什么是三地址码?

三地址代码是 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 可以是 <、>、<=、>=。如果条件为真,那么它可以在执行if语句之后的Label L else语句处执行三个地址语句。

  • 数组语句-

x = y[i],将数组 y 的 ithlocation 的值分配给 x。

x[i] = y,y 的值被赋值给数组 x 的 ithlocation。

  • 地址和指针分配- Pascal 和 C 等语言允许指针分配。

x = & y,y 的地址分配给 x。

x = * y,将 y 指向的位置的内容分配给 x。

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

  • 过程调用/返回- 使用参数 x 1 , x 2 ...调用过程 P(x 1 , x 2 ... . . x n ) 。. x n写为

              参数 x 1

              参数 x 2

             …………..

             参数 x n

             调用 p, n

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

以上是 什么是三地址码? 的全部内容, 来源链接: utcz.com/z/363438.html

回到顶部