Compiler construction 这个等式的三个地址代码是什么?
我的方程是x=y+z 我已经看到,在解决问题时,x=y+z x,y,z是变量,通常会转换为三个地址代码,如下所示: t1=y+z; x=t1 我的疑问是,当x=y+z本身是一个三地址代码时,我们为什么要使用临时变量 例如转换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 = &
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
- 三个地址码表达式是简短的数学表达式,与常用表达式类似,但元素较少,因为它们意味着要转换为汇编代码
通常,“三”意味着我们必须考虑登记变量或时间变量,另外,
一个可能的等价物可以是: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作为三个地址码来解释四个字母。