void run(){ Lexer* lexer; Perser* perser; if(debug){ std::cout<<"Debug option\n"; } lexer = new Lexer(debug); lexer->load(input_file); if(debug){ lexer->put_result(); } perser = new Perser(lexer->getTokens(), debug); if(!perser->perse()){ std::cout<<"Perse Error!!\n"; RELEASE(lexer); RELEASE(perser); return; } TranslationUnitAST* ast = perser->getAST(); CodeGen *codeGen = new CodeGen(debug); if(!codeGen->codeGen( ast, input_file)){ std::cout<<"CodeGen Error!!\n"; RELEASE(lexer); RELEASE(perser); return; } llvm::Module &module = codeGen->getModule(); if(module.empty()){ std::cout<<" Module is empty!!\n"; RELEASE(lexer); RELEASE(perser); return; } llvm::PassManager pm; pm.add(llvm::createPromoteMemoryToRegisterPass()); std::error_code error; llvm::StringRef out_filename("do.out"); llvm::raw_fd_ostream raw_stream( out_filename, error, llvm::sys::fs::OpenFlags::F_None ); pm.add(createPrintModulePass( raw_stream)); pm.run(module); raw_stream.close(); std::cout<<"Complate!!!!\n"; RELEASE(lexer); RELEASE(perser); }