|
|
@@ -21,16 +21,16 @@ int main(int argc, char **argv) { |
|
|
|
inf = fopen(argv[1], "r"); |
|
|
|
} |
|
|
|
|
|
|
|
// Init lexer with its input reader |
|
|
|
struct l2_io_file_reader r; |
|
|
|
r.r.read = l2_io_file_read; |
|
|
|
r.f = inf; |
|
|
|
|
|
|
|
struct l2_lexer lexer; |
|
|
|
l2_lexer_init(&lexer, &r.r); |
|
|
|
|
|
|
|
// Init gen with its output writer |
|
|
|
struct l2_io_mem_writer w = {0}; |
|
|
|
w.w.write = l2_io_mem_write; |
|
|
|
|
|
|
|
struct l2_generator gen; |
|
|
|
l2_gen_init(&gen, &w.w); |
|
|
|
|
|
|
@@ -38,16 +38,24 @@ int main(int argc, char **argv) { |
|
|
|
if (l2_parse_program(&lexer, &gen, &err) < 0) { |
|
|
|
fprintf(stderr, "Parse error: %s:%i:%i: %s\n", |
|
|
|
(argc == 2 ? argv[1] : "-"), err.line, err.ch, err.message); |
|
|
|
l2_gen_free(&gen); |
|
|
|
fclose(inf); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
fprintf(stderr, "Generated bytecode:\n"); |
|
|
|
l2_gen_free(&gen); |
|
|
|
fclose(inf); |
|
|
|
|
|
|
|
printf("Generated bytecode:\n"); |
|
|
|
l2_vm_print_bytecode((l2_word *)w.mem, w.len / sizeof(l2_word)); |
|
|
|
fprintf(stderr, "\n"); |
|
|
|
|
|
|
|
struct l2_vm vm; |
|
|
|
l2_vm_init(&vm, (void *)w.mem, w.len / sizeof(l2_word)); |
|
|
|
l2_vm_run(&vm); |
|
|
|
free(w.mem); |
|
|
|
|
|
|
|
printf("State after executing:\n"); |
|
|
|
l2_vm_print_state(&vm); |
|
|
|
l2_vm_free(&vm); |
|
|
|
} |