#include #include #include #include"lexer.h" #include"parse.h" #include"ntc.h" #include"reporting.h" #include"cg.h" #include"dumberdowner.h" #include"x86.h" static int argc; static char **argv; const char* ntc_get_arg(const char *name) { for(int i = 1; i < argc; i++) { if(strstr(argv[i], name) == argv[i]) { return argv[i] + strlen(name) + 1; } } return NULL; } int main(int argc_, char **argv_) { argc = argc_; argv = argv_; if(x86_target() == IUNKNOWN86) { stahp(0, 0, "Unknown architecture %s", ntc_get_arg("target")); } const char *in = ntc_get_arg("in"); FILE *f = in ? fopen(in, "rb") : stdin; Token *tokens = nct_lex(f); if(in) fclose(f); AST *chunk = nct_parse(tokens); free(tokens); fputs("; === Original AST ===\n", stderr); fputs(ast_dump(chunk), stderr); fputc('\n', stderr); dumben_pre(chunk); dumben_go(chunk); fputs("\n; === Dumbified ===\n", stderr); fputs(ast_dump(chunk), stderr); fputc('\n', stderr); while(!cg_go(chunk)) { dumben_go(chunk); fputs("\n; === Spill ===\n", stderr); fputs(ast_dump(chunk), stderr); fputc('\n', stderr); } return 0; }