蒋立源 编译原理第三版第八章 习题与答案

  • 格式:doc
  • 大小:99.00 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第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) 消除归纳变量后的流程图