22 lines
651 B
Plaintext
22 lines
651 B
Plaintext
bf[program_, input_] :=
|
|
Module[{p = Characters[program], pp = 0, m, mp = 0, bc = 0,
|
|
instr = StringToStream[input]},
|
|
m[_] = 0;
|
|
While[pp < Length@p,
|
|
pp++;
|
|
Switch[p[[pp]],
|
|
">", mp++,
|
|
"<", mp--,
|
|
"+", m[mp]++,
|
|
"-", m[mp]--,
|
|
".", BinaryWrite["stdout", m[mp]],
|
|
",", m[mp] = BinaryRead[instr],
|
|
"[", If[m[mp] == 0,
|
|
bc = 1;
|
|
While[bc > 0, pp++; Switch[p[[pp]], "[", bc++, "]", bc--]]],
|
|
"]", If[m[mp] != 0,
|
|
bc = -1;
|
|
While[bc < 0, pp--; Switch[p[[pp]], "[", bc++, "]", bc--]]]]];
|
|
Close[instr];];
|
|
bf[program_] := bf[program, ""]
|