#include #include #include #include "assemble.h" #include "compiler.h" #include "node.h" #include "regalloc.h" #include "to_assembly.h" extern FILE *yyin; extern int yyparse(void); extern struct node *root_node; int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } yyin = fopen(argv[1], "r"); if (!yyin) { fprintf(stderr, "Cannot open file '%s'\n", argv[1]); return 1; } int result = yyparse(); if(!feof(yyin)) { assert(false); } #ifdef DEBUG node_print(root_node, stdout, 0); printf("\n"); #endif struct ir *ir = compile(root_node); #ifdef DEBUG ir_print(ir, stdout); printf("\n"); #endif struct allocation *alloc = regalloc(ir); to_assembly(ir, alloc); allocation_delete(alloc); #ifdef DEBUG ir_print(ir, stdout); printf("\n"); #endif assemble(ir, stdout); return result; }