Compiler construction 三地址代码(示例)
我如何描述合适的代码来实现:Compiler construction 三地址代码(示例),compiler-construction,compiler-optimization,Compiler Construction,Compiler Optimization,我如何描述合适的代码来实现: Sum :=0; for i from 1 to n do sum+= i endfor; 首先,请注意,没有三地址代码的“规范”。它通常用于指代一系列具有一些共同属性的中间表示,最显著的是缺少复杂表达式,如((x+5)*z-y) 有了这些,这里有一个例子,展示了我刚刚编造的三个地址代码的形式 外卖是: 在三地址代码中,复杂表达式必须简化为一系列简单表达式,根据需要引入临时变量来保存中间结果。例如,我们可以将表达式x=((x+5)*z-y)转换为: t0 :=
Sum :=0;
for i from 1 to n do sum+= i endfor;
首先,请注意,没有三地址代码的“规范”。它通常用于指代一系列具有一些共同属性的中间表示,最显著的是缺少复杂表达式,如
((x+5)*z-y)
有了这些,这里有一个例子,展示了我刚刚编造的三个地址代码的形式
外卖是:
- 在三地址代码中,复杂表达式必须简化为一系列简单表达式,根据需要引入临时变量来保存中间结果。例如,我们可以将表达式
转换为:x=((x+5)*z-y)
请注意,您的示例仅包含简单表达式t0 := x + 5 t1 := t0 * z x := t1 - y
- 循环将替换为标签之间的简单跳转。这使IR更接近最终将被翻译成的机器代码
转到
或如果
(或返回
,未显示)结尾if
指令同时包含真目标和假目标,从而无需执行以下goto
。在指令选择器上也更好谢谢,非常感谢!如果这回答了您的问题,请将其标记为已接受。否则,现在是提出后续问题的时候了。:-)
t0 := x + 5
t1 := t0 * z
x := t1 - y