rendered paste body# ----------------------------------------
# Get code from stdin and convert.
# ----------------------------------------
var.def code [io.read];
# -----------------------------------------
# Display C header.
# -----------------------------------------
func.def brainfuck.c.header () {
io.write "#include <stdio.h>";
io.write "int main\(\) \{";
io.write " int x\[32768\], xc;";
io.write " for\(xc = 0; xc < 32768; xc++\) x\[xc\] = 0; ";
io.write " xc = 0; ";
}
# ------------------------------------------
# Display C footer. (and close main)
# ------------------------------------------
func.def brainfuck.c.footer () {
io.write "\}";
}
# ------------------------------------------
# Convert from brainfuck to C code.
# ------------------------------------------
func.def brainfuck.c.code (code) {
var.def c [string.len $code] d 1;
loop.while (<= $d $c) {
cond.switch (string [string.right [string.left $code $d] 1])
(string "\+";) { io.write " x\[xc\]++;"; }
(string "\-";) { io.write " x\[xc\]--;" }
(string "\.";) { io.write " putchar\(x\[xc\]\);" }
(string "\,";) { io.write " x\[xc\] = getchar\(\);" }
(string "\>";) { io.write " xc++;" }
(string "\<";) { io.write " xc--;" }
(string "\[";) { io.write " while\(x\[xc\] != 0\) \{" }
(string "\]";) { io.write " \}" }
var.def d [++ $d];
}
}
# ------------------------------------------
# Convert.
# ------------------------------------------
brainfuck.c.header;
brainfuck.c.code $code;
brainfuck.c.footer;