编译程序通常包括以下几个部分:
1,词法分析器 (Lexical Analyzer):将源代码作为输入,并将其转换为一系列称为 tokens 的符号序列。
2,
语法分析器 (Syntactic Analyzer):将 tokens 序列转换为一种称为抽象语法树 (Abstract Syntax Tree,AST) 的树形结构,以表示源代码的语法结构。
3,语义分析器 (Semantic Analyzer):对 AST 进行语义分析,例如类型检查、常量折叠等。
4,中间代码生成器 (Intermediate Code Generator):将 AST 转换为一种称为中间代码 (Intermediate Code) 的低级表示形式,以便后续优化和目标代码生成。
5,
优化器 (Optimizer):对中间代码进行优化,例如常量传播、死代码删除、循环展开等。
6,目标代码生成器 (Target Code Generator):将优化后的中间代码转换为目标平台的机器码或字节码。
7,链接器 (Linker):将编译生成的目标代码与其他库代码或资源文件链接在一起,以形成可执行文件或动态链接库等目标程序。