import * from array_extensions; // Input is not allowed in this example syntax block embed_bf from "BF" [s] "{" Arg(1{s | "+" | "-" | "." | "<" | ">" | "[" | "]"}, code) "}" { {| // Memory array emit("let mem = arr_with_capacity(1000);"); emit("mem.fill(0);"); // Pointer emit("let pt = 500;"); // Code let code = "$code".ref().utf8_array(); // Execution for i in code { if i == '+' { emit("mem[*pt] := mem[*pt] + 1;"); \} else if i == '-' { emit("mem[*pt] := mem[*pt] - 1;"); \} else if i == '.' { emit("out.push(*mem[*pt]);"); \} else if i == '<' { emit("pt = pt - 1;"); \} else if i == '>' { emit("pt = pt + 1;"); \} else if i == '[' { emit("while mem[*pt] != 0 {"); \} else if i == ']' { emit("\}"); \} \} |} } let out = arr(); // Taken from https://en.wikipedia.org/wiki/Brainfuck BF { ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. } if utf8_to_str(out.demut()) != "Hello World!\n" { panic("This should not happen"); }