什么是中间代码表示的类型?
将源代码转换为目标机器的目标代码时,编译器可以生成中间语言代码,称为中间代码或中间文本。中间代码表示有三种类型:
后缀表示法
在后缀表示法中,运算符位于操作数之后,即运算符位于操作数之后。
示例
表达式(a+b) * (c+d)的后缀表示法为ab + cd +*
表达式(a*b) - (c+d)的后缀表示法为ab*cd+-。
语法树
一个树,其中每个叶节点描述一个操作数,每个内部节点描述一个运算符。语法树是语法树的简写形式。
示例 - 绘制字符串a + b * c - d的语法树。
三地址码
三地址码是由A-=B op C形式的语句序列组成的,其中A、B、C是程序员定义的名称、常量或编译器生成的临时名称,op表示运算符,可以是定点或浮点算术运算符、布尔值数据或逻辑运算符。“三地址码”这个名称的原因是每个语句通常包含三个地址:两个用于操作数,一个用于结果。
三地址码语句有三种类型:
四元组表示 - 可以用带有运算符和操作数字段的记录来定义三地址语句。可以使用一个带有字段的记录结构,第一个字段保存运算符“op”,接下来的两个分别保存操作数1和2,最后一个保存结果。这种三地址表示称为四元组表示。
三元组表示 - 操作数1、操作数2和结果字段的内容通常是指向这些字段所描述的名称的符号记录的指针。因此,重要的是在生成临时名称时将其添加到符号表中。
这可以通过使用语句的位置来定义临时值来避免。如果完成此操作,则只需要一个包含三个字段的记录结构来定义三地址语句:第一个字段保存运算符,接下来的两个分别保存操作数1和操作数2的值。这种表示称为三元组表示。
间接三元组表示 - 间接三元组表示使用一个额外的数组来按所需顺序列出指向三元组的指针。这称为间接三元组表示。
语句x-= (a + b)*-c的三元组表示如下:
语句 | 语句 | 位置 | 运算符 | 操作数1 | 操作数2 |
---|---|---|---|---|---|
(0) | (1) | (1) | + | a | b |
(1) | (2) | (2) | - | c | |
(2) | (3) | (3) | * | (0) | (1) |
(3) | (4) | (4) | / | (2) | d |
(4) | (5) | (5) | :=) | (3) |
广告