diff options
Diffstat (limited to 'tnslc/compile')
-rw-r--r-- | tnslc/compile/compile.tnsl | 59 | ||||
-rw-r--r-- | tnslc/compile/isa_x86.tnsl | 32 |
2 files changed, 58 insertions, 33 deletions
diff --git a/tnslc/compile/compile.tnsl b/tnslc/compile/compile.tnsl index d1f72b4..d7e9416 100644 --- a/tnslc/compile/compile.tnsl +++ b/tnslc/compile/compile.tnsl @@ -21,10 +21,67 @@ ;/ +/; compile_block (~int cur, ~{}Token data, ~{}charp hsec, csec, dsec) + ;hsec`.append('b') + + ;cur`++ + + /; loop (cur` < len data`) [cur`++] + /; if (string_equate(data`{cur`}.data`, ";/") || string_equate(data`{cur`}.data`, ";;")) + ;break + ;; else if (string_equate(data`{cur`}.data`, "/;")) + ;bool ch = true + /; loop (ch) + ;compile_block(cur, data, hsec, csec, dsec) + ;ch = string_equate(data`{cur`}.data`, ";;") + ;/ + ;; else if (string_equate(data`{cur`}.data`, ";")) + ;compile_statement(cur, data, hsec, csec, dsec) + ;/ + ;/ +;/ + +/; compile_statement (~int cur, ~{}Token data, ~{}charp hsec, csec, dsec) + ;csec`.append('c') + ;dsec`.append('d') +;/ + /; do_compile ({}charp file, ~{}Token data) - /; + ;{}charp hsec = ".global _start\n" + ;{}charp csec = ".text\n" + ;{}charp dsec = ".data\n" + + ;int j = len data` + + /; loop (int i = 0; i < j) [i++] + /; if (string_equate(data`{i}.data`, "/;")) + ;compile_block(~i, data, ~hsec, ~csec, ~dsec) + ;; else if (string_equate(data`{i}.data`, ";")) + ;compile_statement(~i, data, ~hsec, ~csec, ~dsec) + ;; else + ;break + ;/ + ;/ + + ;tnsl.io.File out = tnsl.io.writeFile(file) + + /; loop (int i = 0; i < len hsec) [i++] + ;out.write(hsec{i}) + ;/ + + ;out.write('\n') + /; loop (int i = 0; i < len csec) [i++] + ;out.write(csec{i}) ;/ + + ;out.write('\n') + + /; loop (int i = 0; i < len dsec) [i++] + ;out.write(dsec{i}) + ;/ + + ;out.write('\n') ;/ ;struct Symtab { diff --git a/tnslc/compile/isa_x86.tnsl b/tnslc/compile/isa_x86.tnsl index 1df9902..bc5d43f 100644 --- a/tnslc/compile/isa_x86.tnsl +++ b/tnslc/compile/isa_x86.tnsl @@ -14,35 +14,3 @@ EXPRESS OR IMPLIED #/ -/; gen_x86 (~Node program, {}charp out) - ;tnsl.io.File o = tnsl.io.writeFile(out) - - ;{}uint8 current = gen_head(program) - /; loop (int i = 0; i < len current) [i++] - ;o.write(current{i}) - ;/ - - ;{}uint8 current = gen_data(program) - /; loop (int i = 0; i < len current) [i++] - ;o.write(current{i}) - ;/ - - ;{}uint8 current = gen_text(program) - /; loop (int i = 0; i < len current) [i++] - ;o.write(current{i}) - ;/ - - ;o.close() -;/ - -/; gen_data (~Node program) [{}charp] - -;/ - -/; gen_text (~Node program) [{}charp] - -;/ - -/; gen_head (~Node program) [{}charp] - -;/ |