什么是中间代码生成?
中间代码可以将源程序转换为机器程序。生成中间代码是因为编译器无法在一遍中直接生成机器代码。因此,它首先将源程序转换为中间代码,然后进行高效的机器代码生成。中间代码可以表示为后缀表示法、语法树、有向无环图、三地址码、四元式和三元式。
如果可以将编译阶段分为两部分,即前端和后端,那么此阶段位于两者之间。
中间代码生成的示例:
- 三地址码:这些语句的形式为 c = a op b,即最多包含三个地址,两个用于操作数,一个用于结果。每条指令的右侧最多只有一个运算符。
语句的三地址码示例
- 后缀表示法:在后缀表示法中,运算符位于操作数之后,即运算符位于操作数后面。
示例
表达式 (a+b) * (c+d) 的后缀表示法为 ab + cd + *。
表达式 (a*b) - (c+d) 的后缀表示法为 ab*cd+-。
语法树:它是语法树的简化形式,其中叶子是标识符,内部节点是运算符。
示例
- 四元式表示:具有运算符和操作数字段的记录可以用来描述三地址语句。可以使用具有字段的记录结构,第一个字段保存运算符“op”,接下来的两个分别保存操作数 1 和 2,最后一个字段保存结果。这种三地址表示法称为四元式表示法。
- 三元式表示:操作数 1、操作数 2 和结果字段的内容通常是指向这些字段定义的名称的符号记录的指针。因此,重要的是在生成临时名称时将它们添加到符号表中。
这可以通过使用语句的位置定义临时值来避免。如果完成此操作,则只需要一个具有三个字段的记录结构来定义三地址语句:第一个字段保存运算符,接下来的两个分别保存操作数 1 和操作数 2 的值。这种表示法称为三元式表示法。
中间代码生成的优点
它是与机器无关的。它可以在不同的平台上执行。
它使代码优化功能更容易实现。可以使用与机器无关的代码优化器来优化中间代码以生成代码。
它可以进行高效的代码生成。
可以从现有的前端为给定的后端生成新的编译器。
语法制导翻译实现了中间代码生成,因此可以通过增强解析器将其折叠到解析中。
广告