1、1编译原理朱雪峰博士计算机科学与技术系Tel: 89733787(O)Email: 2第三十题(P218 第6题)6.按7.4.2节的办法,写出布尔式A or (B and not (C or D)的四元式序列。34第三十题(P218 第6题)1 (jnz, A, _, 0)2 (j, _, _, 3)3 (jnz, B, _, 5)4 (j, _, _, 0)5 (jnz, C, _, 0)6 (j, _, _, 7)7 (jnz, D, _, 0)8 (j, _, _, 0)1 (jnz, A, _, 0)2 (j, _, _, 3)3 (jnz, B, _, 5)4 (j, _, _,
2、0)5 (jnz, C, _, 4)6 (j, _, _, 7)7 (jnz, D, _, 5)8 (j, _, _, 1)5第三十一题(P218 第7题)7.用7.5.1节的办法,把下面的语句翻译成四元式序列:while A100 goto L2haltL2: F:=F-1goto L119第三十五题(P306 第2题)(1)求入口语句read A,BF:=1C:=A*AD:=B*Bif C100 goto L2haltL2: F:=F-1goto L120第三十五题(P306 第2题)(2)划分基本块read A,BF:=1C:=A*AD:=B*Bif C100 goto L2haltL2
3、: F:=F-1goto L1B1B2B3B4B521第三十五题(P306 第2题)(3)画数据流图如下:B1B2 B3B4 B522第三十六题(P306 第3题)3.试对以下基本块B1和B2分别应用DAG对它们进行优化,并就以下两种情况分别写出优化后的四元式序列(1)假设只有G、L、M在基本块后面还要被引用;(2)假设只有L在基本块后面还要被引用。B1: A:=B*CD:=B/CE:=A+DF:=2*EG:=B*CH:=G*GF:=H*GL:=FM:=LB2: B:=3D:=A+CE:=A*CF:=D+EG:=B*FH:=A+CI:=A*CJ:=H+1K:=B*5L:=K+JM:=L23第三
4、十六题(P306 第3题)B1: A:=B*CD:=B/CE:=A+DF:=2*EG:=B*CH:=G*GF:=H*GL:=FM:=L24第三十六题(P306 第3题)B2: B:=3D:=A+CE:=A*CF:=D+EG:=B*FH:=A+CI:=A*CJ:=H+1K:=B*5L:=K+JM:=L25第三十六题(P306 第3题)(1)假设只有G、L、M在基本块后面还要被引用,基本块B1和B2优化后的四元式序列分别如下:B1: G:=B*CH:=G*GL:=H*GM:=LB2: D:=A+CE:=A*CF:=D+EG:=3*FL:=15+FM:=L26第三十六题(P306 第3题)(2)假设
5、只有L在基本块后面还要被引用,基本块B1和B2优化后的四元式序列分别如下:B1: G:=B*CH:=G*GL:=H*G B2: D:=A+CE:=A*CF:=D+EL:=15+F27第三十七题(P307 第4题)4.对以下四元式程序,对其中的循环进行循环优化。I:=1read J,KL : A:=K*IB:=J*IC:=A*Bwrite CI:=I+1if I100 goto Lhalt28第三十七题(P307 第4题)4.对以下四元式程序,对其中的循环进行循环优化。解:先进行基本块划分,再画程序流图。由于要进行循环优化,于是可考虑代码外提、强度削弱和删除归纳变量等优化方法。先将程序划分为基本
6、块B1、B2和B3,其程序流图如图1所示,从流图中可知要优化的循环是指基本块B2。对循环B2中的代码分别实行代码外提、强度削弱和删除归纳变量优化如下:(1)代码外提:由于循环中没有不变运算,故此项29第三十七题(P307 第4题)4.对以下四元式程序,对其中的循环进行循环优化。(2)强度削弱:由于循环中有A:=K*I和B:=J*I,其中K、J在循环中值不发生改变,I每次增加1。因此对A、B的赋值运算可进行强度削弱,即可将表达式中的乘法运算(*)改为加法运算(+)。强度削弱后的程序流图如图2。(3)删除基本归纳变量:循环中I是基本归纳变量,A、B是与I同族的归纳变量,且有如下线性关系:A:=K*I B:=J*I于是,条件I100完全可用A100*K或B100*J替代。30第三十七题(P307 第4题)4.对以下四元式程序,对其中的循环进行循环优化。(3)这样基本块B2中的控制条件和控制语句便可改写为:T1:=100*Kif AT1 goto L或改写为:T2:=100*Jif BT2 goto L于是程序流图就变为如图3所示的情况。