自制编译器学习2:编译的过程

编译4个阶段

狭义编译大致可分为4个阶段:语法分析->语义分析->生成中间代码->代码生成

语法分析(syntax analyzing)

编译的第一步首先要对代码进行解析parse)也称为语法分析syntax analyzing),解析代码的程序模块称为解析器parser)或语法分析器syntax analyzer)。语法分析最终的结果是语法树,如下图所示:

语义分析

语法分析只是对代码的表象进行分析,语义分析(semantic analysis)则是对表象之外的部分进行分析,例如:区分局部变量还是全局变量、区分变量是声明还是引用、变量是否初始化等。语法树只是将代码的构造照搬过来,语义分析生成抽象语法树Abstract Syntax Tree, AST)中还包含了语义信息,会在变量的引用和定义之前添加链接,适当增加类型转换等命令使得表达式类型一致,另外,表达式外侧的括号、行末的分号等,在抽象语法树中都被省略了。

生成中间代码

中间代码Intermediate Representation, IR)主要是为了支持多编程语言和多机器语言,生成统一的中间代码会大大简化后续的操作。

代码生成

中间代码转换为汇编代码。

你可能感兴趣的