void executeCodegen(CodegenOptions options) { llvm::SmallString<128> outpath(options.inputFilePath); llvm::sys::path::replace_extension(outpath, extension(options.type)); Parser p(options.inputFilePath); AST ast = p.parse(); filebuf outfile; outfile.open(outpath.c_str(), ios::out); ostream os(&outfile); if (options.type == codegen::AST) { pretty_print(ast, os); return; } llvm::raw_os_ostream raw_os(os); llvm::InitializeAllTargets(); llvm::InitializeAllTargetMCs(); llvm::InitializeAllAsmPrinters(); Symbols symbols; checkSemantics(ast, symbols); MjModule module(ast, symbols); Codegen cg(module, options); cg.emitCode(&raw_os); raw_os.flush(); }
int main(int argc, char *argv[]){ FILE *input = fopen(argv[1], "r"); FILE *output; if(input == NULL) return -1; token_list *tl = lex(input); fclose(input); if(correctTokenList(tl) != 1) return 0; if(tl == NULL){ fprintf(stderr, "scanning error\n"); fflush(NULL); return 0; } program_node *pn = parse(tl); freeTokenList(tl); if(pn){ int tmp; output = fopen("result.k15", "w"); tmp = checkSemantics(pn, output); fclose(output); return tmp; } return 0; }