static void Compile(char *file) { AstTranslationUnit transUnit; Initialize(); // parse preprocessed C file, generate an abstract syntax tree transUnit = ParseTranslationUnit(file); // perform semantic check on abstract synatx tree CheckTranslationUnit(transUnit); if (ErrorCount != 0) goto exit; if (DumpAST) { DumpTranslationUnit(transUnit); } // translate the abstract synatx tree into intermediate code Translate(transUnit); if (DumpIR) { DAssemTranslationUnit(transUnit); } // emit assembly code from intermediate code EmitTranslationUnit(transUnit); exit: Finalize(); }
/* 编译 */ static void Compile (char *file) { AstTranslationUnit transUnit; Initialize (); if ( test_lex ) { LexTest (file); goto exit; } /* 处理C文件,产生语法树所需的节点 */ transUnit = ParseTranslationUnit (file); /* 检查节点的语义 */ CheckTranslationUnit (transUnit); if ( ErrorCount ) goto exit; if ( DumpAST ) { /* 生成语法树 */ DumpTranslationUnit (transUnit); } /* 语句翻译 */ ast_translate (transUnit); #if 0 if (DumpIR) { /* 中间代码输出 */ DAssemTranslationUnit (transUnit); } /* 目标代码生成 */ //EmitTranslationUnit (transUnit); #endif exit: Finalize (); }