如何描述要实施的合适代码:
Sum :=0;
for i from 1 to n do sum+= i endfor;
答案 0 :(得分:2)
首先,请注意,没有"规范"对于三地址代码。它通常用于指代具有一些共同属性的一系列中间表示 - 最值得注意的是,缺少像((x + 5) * z - y)
这样的复杂表达式。
关于这一点,以下是一个例子,说明它是如何构成我刚刚编写的三地址代码 。
; ... preceding code ...
sum := 0
i := 1
goto loop_header
loop_header:
if i > n then loop_end else loop_body
loop_body:
sum := sum + i
i := i + 1
goto loop_header
loop_end:
; ... rest of function ...
外卖是:
在三地址代码中,复杂表达式必须简化为一系列简单表达式,引入临时变量以根据需要保存中间结果。例如,我们可能将表达式x = ((x + 5) * z - y)
翻译成:
t0 := x + 5
t1 := t0 * z
x := t1 - y
请注意,您的示例仅包含简单表达式。
代码格式反映了我个人对低级别IR的一些偏好:
goto
或if
(或return
(未显示)结尾。if
指令包含true和false目标,无需后续goto
。它在指令选择器上也更好。