蒋立源编译原理第三版第八章习题与答案.docx
《蒋立源编译原理第三版第八章习题与答案.docx》由会员分享,可在线阅读,更多相关《蒋立源编译原理第三版第八章习题与答案.docx(11页珍藏版)》请在冰豆网上搜索。
蒋立源编译原理第三版第八章习题与答案
蒋立源-编译原理第三版第八章-习题与答案(总10页)
第8章习题
7-1设有如下的三地址码(四元式)序列:
readN
I:
=N
J:
=2
L1:
ifI≤JgotoL3
L2:
I:
=I-J
ifI>JgotoL2
ifI=0gotoL4
J:
=J+1
I:
=N
gotoL1
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
readJ,K
L:
A:
=K*I
B:
=J*I
C:
=A*B
writeC
I:
=I+1
ifA<100gotoL
halt
试对其中的循环进行可能的优化。
第8章习题答案
7-1解:
划分情况及控制流程如答案图7-1所示:
答案图7-1将四元式序列划分为基本块
7-2解:
(1)相应的DAG如答案图7-2所示。
答案图7-2DAG
(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)消除归纳变量后的流程图