aboutsummaryrefslogtreecommitdiff
path: root/bfc.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfc.c')
-rw-r--r--bfc.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/bfc.c b/bfc.c
new file mode 100644
index 0000000..cb1b0f9
--- /dev/null
+++ b/bfc.c
@@ -0,0 +1,59 @@
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+const size_t buffer_size = 256;
+const char* asm_filename = "out.asm";
+
+int main(int argc, char *argv[])
+{
+ FILE* file = fopen(asm_filename, "w");
+ fprintf(
+ file,
+ "section .bss\n"
+ "buffer: resb %zu\n"
+ "section .text\n",
+ "mov rax buffer\n",
+ buffer_size
+ );
+
+ char c;
+ while ((c = fgetc(file)) != EOF)
+ {
+ switch (c)
+ {
+ case '>':
+ fputs("inc rax");
+ break;
+ case '<':
+ fputs("dec rax");
+ break;
+ case '+':
+ fputs("inc [rax]");
+ break;
+ case '-':
+ fputs("dec [rax]");
+ break;
+ case '.':
+ // putchar
+ break;
+ case ',':
+ // getchar
+ break;
+ case '[':
+ // jump to next ] if byte at data ptr is 0
+ break;
+ case '[':
+ // jump to prev [ if byte at data ptr is not 0
+ break;
+ case ';':
+ // comment
+ break;
+ default:
+ // error
+ }
+ }
+
+
+ return 0;
+}