龙书6.2
6.2 节的练习
6.2.1
将算数表达式 a+-(b+c) 翻译成
- 抽象语法树
- 四元式序列
- 三元式序列
- 间接三元式序列
解答
-
抽象语法树
-
四元式序列
op arg1 arg2 result 0 + b c t1 1 minus t1 t2 2 + a t2 t3 -
三元式序列
op arg1 arg2 0 + b c 1 minus (0) 2 + a (1) -
间接三元式序列
op arg1 arg2 0 + b c 1 minus (0) 2 + a (1) instruction 0 (0) 1 (1) 2 (2)
参考
6.2.2
对下列赋值语句重复练习 6.2.1
- a = b[i] + c[j]
- a[i] = b*c - b*d
- x = f(y+1) + 2
- x = *p + &y
解答
-
a = b[i] + c[j]
-
四元式
0) =[] b i t1 1) =[] c j t2 2) + t1 t2 t3 3) = t3 a
-
三元式
0) =[] b i 1) =[] c j 2) + (0) (1) 3) = a (2)
-
间接三元式
0) =[] b i 1) =[] c j 2) + (0) (1) 3) = a (2) 0) 1) 2) 3)
-
-
a[i] = b*c - b*d
-
四元式
0) * b c t1 1) * b d t2 2) - t1 t2 t3 3) []= a i t4 4) = t3 t4
-
三元式
0) * b c 1) * b d 2) - (0) (1) 3) []= a i 4) = (3) (2)
-
间接三元式
0) * b c 1) * b d 2) - (0) (1) 3) []= a i 4) = (3) (2) 0) 1) 2) 3) 4)
-
-
x = f(y+1) + 2
-
四元式
0) + y 1 t1 1) param t1 2) call f 1 t2 3) + t2 2 t3 4) = t3 x
-
三元式
0) + y 1 1) param (0) 2) call f 1 3) + (2) 2 4) = x (3)
-
间接三元式
0) + y 1 1) param (0) 2) call f 1 3) + (2) 2 4) = x (3) 0) 1) 2) 3) 4)
-
参考
6.2.3 !
说明如何对一个三地址代码序列进行转换,使得每个被定值的变量都有唯一的变量名。