什么是三地址码?


三地址码是一系列形式为 A−=B op C 的语句,其中 A、B、C 可以是程序员定义的名称、常量或编译器生成的临时名称,op 表示一个运算符,可以是常量或浮点算术运算符,或者布尔值数据或逻辑运算符。“三地址码”这个名称的原因在于,每个语句通常包含三个地址,两个用于操作数,一个用于结果。

在三地址码中,最多三个地址定义任何语句。两个地址用于操作数,一个用于结果。

因此,op 是一个运算符。

在表达式的右侧一次只允许进行单个操作。

示例− 表达式 a = b + c + d 可以转换为以下三地址码。

t1 = b + c

t2 = t1 + d

a = t2

其中 t1 和 t2 是编译器生成的临时变量。大多数情况下,语句包含少于三个引用,但它仍然被称为三地址语句。

三地址码语句的类型

以下是各种类型的三地址语句:

  • 赋值− 三种类型的赋值语句为

x = y op z,op 是一个二元运算符,y、z 为操作数。

x = op y,op 是一个一元运算符

x = y,y 的值赋给 x。

  • 无条件跳转− 无条件跳转的形式为 goto L,L 为标签。

控制流到标有 L 的三地址语句。

  • 条件跳转− 条件跳转的形式为

if x relop y goto L

这里 relop 可以是 <、>、<=、>=。如果条件为真,则它可以执行标签 L 处的三地址语句,否则将执行 if 语句之后的语句。

  • 数组语句

x = y[i],数组 y 的第 i 个位置的值赋给 x。

x[i] = y,y 的值赋给数组 x 的第 i 个位置。

  • 地址和指针赋值− 像 Pascal 和 C 这样的语言允许指针赋值。

x = & y,y 的地址赋给 x。

x = * y,y 指向的位置的内容赋给 x。

*x=y,最终将 x 指向的对象的右值设置为 y 的右值。

  • 过程调用/返回− 对过程 P(x1, x2 … . . xn) 的调用,其参数为 x1, x2 … . . xn,写成

              param x1

              param x2

             ………..

             param xn

             call p, n

这里 param 指的是参数,& call p, n 将用 n 个参数调用过程 p。

更新于: 2021年11月5日

16K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告