# ---------------------------------------- # Get code from stdin and convert. # ---------------------------------------- var.def code [io.read]; # ----------------------------------------- # Display C header. # ----------------------------------------- func.def brainfuck.c.header () { io.write "#include "; 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;