Commit 81955ca5 authored by Taddeüs Kroes's avatar Taddeüs Kroes

Cleanup

parent f5c9feb6
......@@ -159,22 +159,26 @@ let compile_c memsize program =
let rec compile_commands buf = function
| [] -> buf
| cmd :: tl -> compile_commands (buf ^ compile_command cmd ^ "\n") tl
and compile_offset o = function
| Shift n -> "p" ^ add n
| Add n -> ptr o ^ add n
| Goto 0 -> "p = mem"
| Goto n -> "p = mem + " ^ string_of_int n
| Set n -> ptr o ^ " = " ^ string_of_int n
| Out -> "putchar(" ^ ptr o ^ ")"
| In -> ptr o ^ " = getchar()"
| Mul (x, 1) -> ptr o ^ " += " ^ ptr (o + x)
| Mul (x, -1) -> ptr o ^ " -= " ^ ptr (o + x)
| Mul (x, y) -> ptr o ^ " += " ^ ptr (o + x) ^ " * " ^ string_of_int y
| cmd -> failwith "cannot offset command: " ^ string_of_command cmd
and compile_command = function
| Loop p -> "while (*p != 0) {\n" ^ indent (compile_commands "" p) ^ "}"
| Offset (o, cmd) -> compile_offset o cmd ^ ";"
| cmd -> compile_offset 0 cmd ^ ";"
| Loop p ->
"while (*p) {\n" ^ indent (compile_commands "" p) ^ "}"
| Offset (o, cmd) ->
begin
match cmd with
| Shift n -> "p" ^ add n
| Add n -> ptr o ^ add n
| Goto 0 -> "p = mem"
| Goto n -> "p = mem + " ^ string_of_int n
| Set n -> ptr o ^ " = " ^ string_of_int n
| Out -> "putchar(" ^ ptr o ^ ")"
| In -> ptr o ^ " = getchar()"
| Mul (x, 1) -> ptr o ^ " += " ^ ptr (o + x)
| Mul (x, -1) -> ptr o ^ " -= " ^ ptr (o + x)
| Mul (x, y) -> ptr o ^ " += " ^ ptr (o + x) ^ " * " ^ string_of_int y
| _ -> failwith "cannot compile: " ^ string_of_command cmd
end ^ ";"
| cmd ->
compile_command (Offset (0, cmd))
in
"#include <stdio.h>\n" ^
"#include <stdlib.h>\n" ^
......
#!/usr/bin/env bash
set -e
make -s bf
./bf | opt -O3 -o prog.bc
make -s prog
./prog
rm -f prog{,.bc,.o}
cat > _tmp.b
make -s _tmp-opt
./_tmp-opt
rm -f _tmp*
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment