Rebol3 Code Examplex
Execute Brain****
Interpret and run Brainfuck code.
Rebol [
title: "Rosetta code: Execute Brain****"
file: %Execute_Brainfuck.r3
url: https://rosettacode.org/wiki/Execute_Brain****
note: "Commented original Red version"
]
brainfuck: function [
"Brainfuck interpreter - executes a Brainfuck program string"
prog [string!]
][
; Initialize 30'000 memory cells (standard Brainfuck tape size)
cells: make string! size: 30000
append/dup cells null size ;; Fill all cells with null (ASCII 0)
;; Parse and execute each Brainfuck instruction
parse prog [
some [
#">" (cells: next cells) ;; Move tape pointer right
| #"<" (cells: back cells) ;; Move tape pointer left
| #"+" (cells/1: cells/1 + 1) ;; Increment current cell
| #"-" (cells/1: cells/1 - 1) ;; Decrement current cell
| #"." (prin cells/1) ;; Output current cell as character
| #"," (cells/1: first input "") ;; Read one character of input into current cell
| #"[" [if (cells/1 = null) thru #"]" | none] ;; If current cell is 0, jump past matching "]"
| #"]" [
;; If current cell is non-zero, jump back to matching "["
pos: if (cells/1 <> null)
(pos: find/reverse pos #"[") :pos ;; Seek backward to find "[", then jump to it
| none ;; Otherwise, do nothing and continue
]
| skip ;; Ignore any unrecognized characters
]
]
]
brainfuck {
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.
>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
}