蒋立源 编译原理第三版第八章 习题与答案
- 格式:doc
- 大小:99.00 KB
- 文档页数:10
第8章习题
7-1 设有如下的三地址码(四元式)序列:
read N
I:=N
J:=2
L1 : if I≤J goto L3
L2 : I:=I-J
if I>J goto L2
if I=0 goto L4
J:=J+1
I:=N
goto L1
L3 : Print ′YES′
halt
L4 : Print ′NO′
halt
试将它划分为基本块,并作控制流程图。
7-2 考虑如下的基本块:
D:=B*C
E:=A+B
B:= B*C
A:=E+D
(1) 构造相应的DAG;
(2) 对于所得的DAG,重建基本块,以得到更有效的四元式序列。
7-3 对于如下的两个基本块:
(1) A:=B*C
D:=B/C
E:=A+D
F:=2*E
G:=B*C
H:=G*G
F:=H*G
L:=F
M:=L
(2) B:=3
D:=A+C
E:=A*C
F:=E+D
G:=B*F
H:=A+C
I:=A*C
J:=H+I
K:=B*5
L:=K+J
M:=L
分别构造相应的DAG,并根据所得的DAG,重建经优化后的四元式序列。在进行优化时,须分别考虑如下两种情况:
(ⅰ)变量G、L、M在基本块出口之后被引用;
(ⅱ)仅变量L在基本块出口之后被引用。
7-4 对于题图7-4所示的控制流程图:
(1) 分别求出它们各个结点的必经结点集;
(2) 分别求出它们的各个回边;
(3) 找出各流程图的全部循环。
7-5 对于如下的程序:
I:=1
read J,K
L: A:=K*I
B:=J*I
C:=A*B
write C
I:=I+1
if A<100 goto L
halt
试对其中的循环进行可能的优化。
第8章习题答案
7-1 解:划分情况及控制流程如答案图7-1所示:
答案图7-1 将四元式序列划分为基本块
7-2 解:
(1) 相应的DAG如答案图7-2所示。
答案图7-2 DAG
(2) 优化后的代码为:
D:=B*C
E:=A+B
B:=D
A:=E+D
7-3 解:
(1) 相应的DAG如答案图7-3-(1)所示。
若只有G、L、M在出口之后被引用,则优化后的代码为:G:=B*C
H:=G*G
L:=H*G
M:=L
若只有L在出口之后被引用,则代码为:
G:=B*C
H:=G*G
L:=H*G
(2) 相应的DAG如答案图7-3-(2)所示。
若只有G、L、M被引用,则代码为:
D:=A+C
E:=A*C
F:=E+D
G:=3*F
L:=15+F
M:=L
若只有L被引用,则代码为:
D:=A+C
E:=A*C
F:=E+D
L:=+F15
7-4 解:
(a) 必经结点集:
D2={2}
D3 ={2,3}, D4 ={2,4}
D5 ={2,4,5} D6 ={2,4,6}
D7 ={2,4,7} D8={2,4,7,8}
回边及相应的循环:
7→4:{4,5,6,7}
8→2:{2,3,4,5,6,7,8}
(b) 必经结点集:
D1 ={1} D2 ={1,2}
D3 ={1,2,3} D4 ={1,2,3,4}
D5 ={1,2,3,5} D6 ={1,2,3,6}
D7 ={1,2,7} D8 ={1,2,7,8}
回边及相应循环:
7→2:{2,3,4,5,6,7}
(c) 必经结点集:
D1 ={1} D2 ={1,2},
D3 ={1,2,3} D4 ={1,2,4},
D5 =1,2,5} D6 ={1,2,3,6},
D7 ={1,2,7}
回边及相应循环:
5→2:{2,3,4,5}
6→6: {6}
注意:5→4不是回边。因为4不是5的控制结点。
7-5 解:
(1) 划分基本块后的流程图如答案图7-5-(1)所示。
(2) 削弱运算强度后的流程图如答案图7-5-(2)所示。
答案图7-5-(2) 削弱运算强度后的流程图(3) 消除归纳变量后的流程图如答案图7-5-(3)所示。
答案图7-5-(3) 消除归纳变量后的流程图