Compiler construction 这个等式的三个地址代码是什么?

Compiler construction 这个等式的三个地址代码是什么?,compiler-construction,intermediate-code,Compiler Construction,Intermediate Code,我的方程是x=y+z 我已经看到,在解决问题时,x=y+z x,y,z是变量,通常会转换为三个地址代码,如下所示: t1=y+z; x=t1 我的疑问是,当x=y+z本身是一个三地址代码时,我们为什么要使用临时变量 例如转换 for(int i=1; i<10; i++) x = y+z; 为什么我们不能写x=y+z而不是t1=y+z和x=t1 x=y+z是一个三地址代码 不,这是一个4地址码 通常,“三”意味着我们必须考虑登记变量或时间变量,另外, 一个可能的等价物可以是: y = &

我的方程是x=y+z

我已经看到,在解决问题时,x=y+z x,y,z是变量,通常会转换为三个地址代码,如下所示: t1=y+z; x=t1

我的疑问是,当x=y+z本身是一个三地址代码时,我们为什么要使用临时变量

例如转换

for(int i=1; i<10; i++) x = y+z;
为什么我们不能写x=y+z而不是t1=y+z和x=t1

x=y+z是一个三地址代码

不,这是一个4地址码

通常,“三”意味着我们必须考虑登记变量或时间变量,另外,

一个可能的等价物可以是:

y = <some value>
z= <some value>
T1 = z
T1 += y
x = T1
y=
z=
T1=z
T1+=y
x=T1
一些开发人员使用类似于汇编程序的语法:

Move y, <some value>
Move z, <some value>
Move T1, z
Add T1, y
Move x, T1
Move y,
移动z,
移动T1,z
加T1,y
移动x,T1

如您所知,为了使用中间代码(或三个地址代码表达式),需要考虑的一些重要事项:

  • “三”是指限制,而不是规则,可以少一些,比如一个或两个操作数

    x++; x=y; x=y+z

  • 以常量、数字或变量作为“位置”,每个操作数或地址码(“p.O.框”)代表计算机内存中的一个位置

  • 除非其中一个变量是结果的目标位置

    w=a*2

  • 该目标变量可以用作源操作数

    x=x*y; y=y+1

  • 三个地址码表达式是简短的数学表达式,与常用表达式类似,但元素较少,因为它们意味着要转换为汇编代码

除了使用1、2或3个位置之外,还有一些操作无法在任何位置完成,通常时间变量表示CPU寄存器

x=y+z是一个三地址代码

不,这是一个4地址码

通常,“三”意味着我们必须考虑登记变量或时间变量,另外,

一个可能的等价物可以是:

y = <some value>
z= <some value>
T1 = z
T1 += y
x = T1
y=
z=
T1=z
T1+=y
x=T1
一些开发人员使用类似于汇编程序的语法:

Move y, <some value>
Move z, <some value>
Move T1, z
Add T1, y
Move x, T1
Move y,
移动z,
移动T1,z
加T1,y
移动x,T1

如您所知,为了使用中间代码(或三个地址代码表达式),需要考虑的一些重要事项:

  • “三”是指限制,而不是规则,可以少一些,比如一个或两个操作数

    x++; x=y; x=y+z

  • 以常量、数字或变量作为“位置”,每个操作数或地址码(“p.O.框”)代表计算机内存中的一个位置

  • 除非其中一个变量是结果的目标位置

    w=a*2

  • 该目标变量可以用作源操作数

    x=x*y; y=y+1

  • 三个地址码表达式是简短的数学表达式,与常用表达式类似,但元素较少,因为它们意味着要转换为汇编代码


除了使用1、2或3个位置之外,还有一些操作无法完成,在任何位置,通常时间变量表示CPU寄存器。

使用时间变量是标准且“幼稚”的方法。在实现优化器时,认识到这样一种特殊情况,即不需要临时设置,通常是为了在课程中获得额外学分而做的事情。@Someprogrammerdude谢谢。我明白,两者都是正确的。我没有足够的声望来回答这个问题。如果你能关闭它,它会更好。使用临时表是标准的和“幼稚”的方法。在实现优化器时,认识到这样一种特殊情况,即不需要临时设置,通常是为了在课程中获得额外学分而做的事情。@Someprogrammerdude谢谢。我明白,两者都是正确的。我没有足够的声望来回答这个问题。如果你能关闭它,它会更好。有什么参考资料吗?根据Alfred V.Aho、Monica S.Lam、Ravi Sethi、Jeffrey D.Ullman的《编译器-原理、技术和工具》一书,Pg 99:x=y op z是一个三地址代码,其中x、y和z可以是名称、常量或编译器生成的临时值。在第366页中,作者再次使用x=y+z作为三个地址码来解释四个字母,有什么参考吗?根据Alfred V.Aho、Monica S.Lam、Ravi Sethi、Jeffrey D.Ullman的《编译器-原理、技术和工具》一书,Pg 99:x=y op z是一个三地址代码,其中x、y和z可以是名称、常量或编译器生成的临时值。在第366页中,作者再次使用x=y+z作为三个地址码来解释四个字母。