Execute Brain****/Icon: Difference between revisions
m
Fixed syntax highlighting.
(new BF) |
m (Fixed syntax highlighting.) |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 1:
{{implementation|Brainf***}}{{collection|RCBF}}
This version of BF takes program and input from the parameter list.
Memory grows as needed from a single cell.
If no program is specified, the hello world program is run.
<pre>BF programtext inputtext</pre>
<syntaxhighlight lang="icon">#
# bf interpreter
#
procedure main(arglist)
prog := get(arglist)
# test for nested brackets, previous version was deemed incorrect
if \prog == "hello" then
prog := ">++++++++[<+++++++++>-]<.>>+>+>++>[-]+<[>[->+<<++++>" ||
"]<<]>.+++++++..+++.>>+++++++.<<<[[-]<[-]>]<+++++++++" ||
"++++++.>>.+++.------.--------.>>+.>++++."
# default program
/prog := "++++++++++[>+>+++>++++>+++++++>++++++++>+++++++++>++" ||
"++++++++>+++++++++++>++++++++++++<<<<<<<<<-]>>>>+.>>>" ||
">+..<.<++++++++.>>>+.<<+.<<<<++++.<++.>>>+++++++.>>>.+++." ||
"<+++++++.--------.<<<<<+.<+++.---."
input := get(arglist)
/input := ""
# 1. toss obvious errors
Line 28 ⟶ 41:
write("Program is well formed.")
write("Program=",image(prog))
write("Ruler =",image(repl("0123456789",
*image(prog)/10 + 1)[1:*image(prog)-1]))
# 2. execute
Line 34 ⟶ 48:
cell := 1
mem := [0]
nest := 0
prog ? while i := move(1) do {
case i of {
">" :
if ( cell +:= 1 ) > *mem then
put(mem, 0)
"<" :
if ( cell -:= 1 ) < 1 then
runerr(205,cell)
"+" : mem[cell] +:= 1
"-" : mem[cell] -:= 1
"." : writes(char(mem[cell]))
"," : input ?:= ( mem[cell] := move(1), tab(0) )
# if the byte at the pointer is zero.
"[" : if mem[cell] = 0 then {
repeat {
i := move(1)
if i == "
}
}
# if the byte at the pointer is nonzero.
"]" : if mem[cell] ~= 0 then {
move(-1)
repeat {
i := move(-1)
if i == "
if i == "[" then if nest = 0 then break else nest -:= 1
}
move(1)
}
▲ }
}
end</
Sample output:
Line 76 ⟶ 106:
Program is well formed.
Program="++++++++++[>+>+++>++++>+++++++>++++++++>+++++++++>++++++++++>+++++++++++>++++++++++++<<<<<<<<<-]>>>>+.>>>>+..<.<++++++++.>>>+.<<+.<<<<++++.<++.>>>+++++++.>>>.+++.<+++++++.--------.<<<<<+.<+++.---."
Ruler ="0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345"
Goodbye, World!
#BF hello
Program is well formed.
Program=">++++++++[<+++++++++>-]<.>>+>+>++>[-]+<[>[->+<<++++>]<<]>.+++++++..+++.>>+++++++.<<<[[-]<[-]>]<+++++++++++++++.>>.+++.------.--------.>>+.>++++."
Ruler ="012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123"
Hello World!
</pre>
|