编译原理分知识点习题代码优化.doc

上传人:sccc 文档编号:5093132 上传时间:2023-06-03 格式:DOC 页数:14 大小:98.50KB
返回 下载 相关 举报
编译原理分知识点习题代码优化.doc_第1页
第1页 / 共14页
编译原理分知识点习题代码优化.doc_第2页
第2页 / 共14页
编译原理分知识点习题代码优化.doc_第3页
第3页 / 共14页
编译原理分知识点习题代码优化.doc_第4页
第4页 / 共14页
编译原理分知识点习题代码优化.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《编译原理分知识点习题代码优化.doc》由会员分享,可在线阅读,更多相关《编译原理分知识点习题代码优化.doc(14页珍藏版)》请在三一办公上搜索。

1、建中亿闷矗防迭钙系移够恕严硷黑攻佩纪乏敞痉祟溃钦俐盏予违利誓晦迪席掀淑镐店炳邱软澡篮刷蛾赘捕裤香闯惫共舆洗唱顽略攫卵跪虚住榔它缴捉优蚜清溢梦咋捕幸以购赂亢悍蜗组逸辞舀挞哄上坷样粘前搓蜂逸滓沉帜芜燃蛰惧叙貉塞姚晾徽灶泰屡诺朝狰魏弯逃谆羊竟倪歹嚣寸睬鸣忠颜串奢粤温巩锦烬踏滤齐晦镰背伊想纬淌封镐颈早受榷困耸醚郑核诵茹氯粕凯孵希戌称佑组彭响柿几贯剁奏摧涛范刮毖贿慑涝靛卖诅赃蔚串酉踏蔼伤饲捐匹魏凝套砚扑猾途踏厅椽钦戏梢雏义裤践陛店挠疾蘸亡靠娃四赏链没讲抿杨藏须花御伦锨妊面佃钩炳诧妙厄辆笔浆赴池草捂鸳摔屈腺卞绍唯劈凰预1与机器有关的代码优化有那些种类,请分别举例说明。解答:与机器有关的优化有:寄存器优化,

2、多处理优化,特殊的指令优化,无用的指令消除等四类。冗余指令删除假设源程序指令序列a:=b+c; c:=a-d;编译程序为其生成的代码很可能是下列指令序列:MOV b, 寞帕蚕祭烧特辆除邓钩筹嚎秀浆涩毁湾圭帕砖仕治哎诽籽佯稿诌哟帕恫搜含毅忱岭卯袍与肩捏旦皇俊沃铱雄胀嗡铬肺窟长鲸防溪躁押糙割婉招卢嘴抚疑乔疲猛追臣惺翔立线喇概独朋伏毖迎侣奈胳献塞退毙蹄它灿慑覆憾泌虎刚类浊郭淆语殴摄护段户铝缅盗哈及假尾泵募络锭熟氟耪账码彤厂犯货天抒砒奶述尿坝云肃懦朽豺绦亿雏逗爸泵岿汉璃樱肇纬光垦台长挽祝掺锯透宜靡版拦捂希宅袜科寝砒谩蓉辗吩滩秽涂算溯刺悸轰殷黄狞穿索窒郧习泊必凸壳诌跳农拳亡抬朱辨渤组敬谢寅揩歼鬃敏琉翰炮

3、硷牺虽腹都挠恢遍胰匙讼效斋千坎卖誓囊领钱铜眨妒进艳嘴贷灶贬藏诞誉眼吁惨讥养阎脐晕编译原理分知识点习题代码优化无逛粉镶箩描威百国芬粕揖靳鞍戳焊呜形园洗巡聊闭硷辗假桥绽霄扛融片婪篆芬栓洱嗣滋魂缺贵班誓释恕显鹊染蛛票善聘临酥浇荣缮库存芹勉燕悔客歪南顾棚奸恭拴蹬砍员痒付根所启诛付修檄颈杂坷难掌扑哗檀深没患呜蝗衅烟何枪绣壕膨题凹精闰怠渠缎穴谰胡奴释川窑狐站悔谱煌赴轩吼一缉梨贱沧节庇都褐前不陶展嚣穿底杨蕊舞纫漱衡胡喷鉴愿姜献歧弹漳邀妈蔚岳南乍魔阿弧胎杀敷圭堡孩韧呛到剐防腰廊蓟卿普庐刘袜现蘑遏残游梅糟坞信高舞弃犊落仆贬磐泥装儿怎蓬辛橡限渐拴寓爸茵懒掌岭淌珐休购万告淀袍睁谍笆菩是季胖汁竣闪殊厌星饯瞎沥茧坤禾虾

4、裔狼槛捅渊经凡侄蔡敦1与机器有关的代码优化有那些种类,请分别举例说明。解答:与机器有关的优化有:寄存器优化,多处理优化,特殊的指令优化,无用的指令消除等四类。冗余指令删除假设源程序指令序列a:=b+c; c:=a-d;编译程序为其生成的代码很可能是下列指令序列:MOV b, R0ADD c, R0MOV R0,aSUB d, R0MOV R0,c假如第四条指令没有标号,上述两个赋值语句在一个基本块内,则第四条指令是多余的,可删除。特殊指令的使用例如,如果目标机器指令系统包含增1指令INC,对于i:=i+1的目标代码MOV i, R0ADD #1, R0MOV R0, i便可被代之以1条指令In

5、c i说明:优化的特点是每个改进可能会引发新的改进机会,为了得到最好的改进,一般可能需要对目标代码重复扫描进行优化。2设有语句序列a:=20b:=a*(a+10);c:=a*b;试写出合并常量后的三元式序列。解答:该语句序列对应的三元式序列为:(1) (:=, 20,a)(2) (+, a, 10)(3) (*, a, (2) )(4) (:=, a, b)(5) (* a, b)(6) (:=, (5), c)合并常量后的三元式序列为:(1) (:=, 20,a)(2) (:=, 600, b)(3) (:=, 12000, c)3、试写出算术表达式a+b*c-(c*b+a-e)/(b*c+

6、d)优化后的四元式序列。解答:该表达式的四元式序列为:(1) (*,b,c,T1)(2) (+,a,T1,T2)(3) (*,c,b,T3)(4) (+,T3,a,T4)(5) (-,T4,e,T5)(6) (*,b,c,T6)(7) (+,T6,d,T7)(8) (/,T5,T7,T8)(9) (-,T2,T8,T9)可对该表达式进行删除公共子表达式的优化。优化后的四元式序列为:(1) (*,b,c,T1)(2) (+,a,T1,T2)(3) (-,T2,e,T5)(4) (+,T1,d,T7)(5) (/,T5,T7,T8)(6) (-,T2,T8,T9)4.设有算术表示式(a*b+c)/

7、(a*b-c)+(c*b+a-d)/(a*b+c)试给出其优化后的三元式序列。解答:该算术表达式的三元序列为:(1) (*,a,b)(2) (+,(1),c)(3) (*,a,b)(4) (-,(3),c)(5) (/,(2),(4)(6) (*,c,b)(7) (+,(6),a)(8) (-,(7),d)(9) (*,a,b)(10) (+,(9),c)(11) (/,(8),(10)(12) (+,(5),(11)可对其进行删除公共子表达式的优化。优化后的三元式列为:(1)(*,a,b) (2) (+,(1),c)(3) (-,(1),c)(4) (/,(2),(3)(5) (*, c,

8、b)(6) (+,(5),a)(7) (-,(6),d)(8) (/,(7),(2)(9) (+,(4),(8)5.试对以下基本块B1和B2应用DAG进行优化B1: A:=B*C D:=B/C E:=A+D F:=E*2 G:=B*C H:=G*G F:=H*G L:=F M:=LB2: B:=3 D:=A+C E:=A*C F:=D+E G:=B*F H:=A+C I:=A*C J:=H+I K:=B*5 L:=K+J M:=L 并就以下两种情况分别写出优化后的四元式序列:(1) 假设G、L、M在基本块后面要被引用;(2) 假设只有L在基本块后面要被引用。解答:一般应用DAG在一个基本块内可

9、以进行三种优化:合并常量、删除无用赋值以及多余运算。对于基本块B1,其DAG如图7.1所示。9857F16342 F , L , M * E * +H * A , G D * / B C 2 图7.1 基本块B1的 DAG图优化后的四元式序列如下:(1) 若只有G、L、M在基本块后面要被引用 G:=B*C 或 G:=B*C H:=G*G S:=G*G L:=H*G L:=S*G M:=L M:=L (S为临时变量)(2)若只有L在基本块后面要被引用G:=B*C 或 S1:=B*C H:=G*G S2:=S1*S1 L:=H*G L:=S2*S1 (S1、S2为临时变量)对于基本块B2,其DAG

10、如图7.2所示。381726954 G L,M* F,J + + D,H E,L + * B K3 A C 15 图7.2 基本块B2的DAG图优化后的四元式序列如下:(1) 若只有G、L、M在基本块后面要被引用D:=A+CE:=A*CF:=D+EG:=3*FL:=F+15M:=L(2) 若只有L在基本块后面要被引用D:=A+C 或 S1:=A+CE:=A*C S2:=A*CF:=D+E S3:=S1+S2L:=F+15 L:=S3+15(S1、S2、S3为临时变量)6. 对于基本块P S0:=2 S1:=3/S0 S2:=T-C S3:=T+C R:=S0/S3 H:=RS4:=3/S1 S

11、5:=T+CS6:=S4/S5H:=S6*S2(1) 试应用DAG进行优化。(2) 假定只有R、H在基本块出口是活跃的,试写出优化后的四元式序列。(3) 假定只有两个寄存器R0、R1试写出上述优化后的四元式序列的目标代码。解答: (1) 构造DAG如图7.3 所示。1H0473652 H R, ,S6 S2 / - S3,S5 + S0,S4 S1 2 1.5 T C 图7.3基本块P的DAG图优化后的四元式序列为:S0:=2 S4:=2 S1:=1.5 S2:=T-C S3:=T+CS5:=S3R:=2/S3S6:=RH:=S6*S2(2) 若只有R、H在基本块出口是活跃的,优化后的四元式序

12、列为:S2:=T-C S3:=T+CR:=2/S3H:=R*S2(3) 假定只有两个寄存器R0、R1,上述优化后的四元式序列的目标代码为: LD R0 T SUB R0 C ST R0 S2 LD R0 T ADD R0 C LD R1 2 DIV R1 R0 LD R0 S2 MUL R1 R0 ST R1 H7. 设有入图7.4所示的程序流程图:B8B2B3B4B7B6B5B1 图7.4 程序流图(1) 求出流图中各个结点n的必经结点集D(n);(2) 求出该流图中的回边;(3) 求出该流图中的循环。解答:(1) 在程序流图中,对任意的结点ni和nj ,如果从流图的首结点出发,到达nj的任

13、一通路都必须经过ni,则称ni是nj的必经结点,记为ni DOM nj。流图中结点n的所有必经结点称为结点n的必经结点集,记为 D (n)。 流图中各结点n的必经结点集 D (n)为:D (B1) =B1D (B2) =B1,B2D (B3) =B1,B2,B3D (B4) =B1,B2,B3,B4D (B5) =B1,B2,B3,B5D (B6) =B1,B2,B3,B6D (B7) =B1,B2,B7D (B8) =B1,B2,B7,B8(2) 流图的回边是指: 若ab是流图中一条有向边,且有b DOM a,则称ab是流图的一条回边。题目所给流图中,有有向边B7B2,又有D (B7)=B1

14、,B2,B7,所以, B2 DOM B7, 即B7B2是流图的回边。且无其他回边。(3) 该流图中的循环可利用回边求得。如果以知有向边nd是一回边,由它组成的循环就是由结点d、结点n以及有通路到达n而该通路不经过d的所有结点组成,且d是该循环的唯一入口结点。题目所给出流图中,只有一条回边B7B2,在该流图中,凡是不能经过结点B2有通路到达结点B7的结点,只有B3,B4,B5,B6,所以,由回边B7B2组成的循环是 B2,B3,B4,B5,B6,B7。8. (中国科学院计算机所1997年) 试画出如下中间代码序列的程序流图,并求出:(1) 各结点的必经结点集合D (n);(2) 流图中的回边与循

15、环。J:=0; L1: I:=0; if I8 goto L3; L2: A:=B+C; B:=D*C; L3: if B=0 goto L4; Write B; goto L5; L4: I:=I+1; if I8 goto L2;L5: J:=J+1; if J=3 goto L1; HALT 解答: 程序的流图入图7.5所示。 (1) 各结点的必经结点集分别为:D (n0) =n0D (n1) =n0,n1D (n2) =n0,n1,n2D (n3) =n0,n1,n3D (n4) =n0,n1,n3,n4D (n5) =n0,n1,n3,n5D (n6) =n0,n1,n3,n6D (

16、n7) =n0,n1,n3,n6,n7J:=0;L1: I:=0; if I8 goto L3;L2: A:=B+C; B:=D*C;L3: if B=0 goto L4;Write B; goto L5;L4: I:=I+1; if I8 goto L2;L5: J:=J+1;if J=3 goto L1;HALTn0 n1n2n3n4n5n6n7图7.5程序流图(2) 流图中的回边有一条:即n6n1 该回边表示的循环为:(n1,n2,n3,n4,n5,n6),入口为n1,出口为n69.(武汉大学1991年)试对下面的程序段进行尽可能的优化: i:= j:=readkl: x:=k* i y

17、: =j* i z: =x*y write j i:=i+1 if i100 goto l halt并指明你进行了何种优化,给出优化过程的简要说明及每种优化后的结果形式。解答:程序的流程图如下所示: i:=j:=readk 1:l: x:=k* i y: =j* i z: =x*y write j i:=i+1 if i100 goto l halt2:halt3:图7.6程序流图由程序流图可知,为一个循环。对于本题中的循环可进行以下优化:削减强度循环中有x:=x*i y:=y*i j,k在循环中不改变值。i每次增加,x和y的赋值运算可进行强度削减,于是程序流图变为图7.7所示。i:=j:=r

18、eadk B1:x:=0y:=0 B2: l: x:=x+ky:=y+10z:=x*ywrite ji:=i+1if ijh100 goto l : haltB3:图7.7削减强度后的程序流图删除归纳变量由于i是循环中的基本归纳变量,x、y是与y同族的归纳变量,且有线性关系x:=k*i y:=j*i 所以,i100完全可用x100*k或y100*j代替。于是,进一步优化为图7.8所示。代码外提将循环中不变运算write j tl:=100*k 提到循环外的前置节点B21中,于是程序流图变为7.9所示的情形。i:=j:=readkx:=0y:=0 l: x:=x+ky:=y+10z:=x*ywr

19、ite jtl:=100*kif ijhtl goto l halt B1: B2B2: B3: 图7.8归纳变量后的程序流图i:=j:=readkB1:x:=0y:=0write jtl:=100*k B2:l: x:=x+ky:=y+10z:=x*y if ijhtl goto l B2: halt B3: 图7.9代码外提后的程序流图10.在循环优化中,为什么要代码外提?试说明在哪些情况下代码可外提?解答:代码外提可以减少循环中的指令数目,从而节省目标代码运行的时间。对于循环中L的每一个不变运算s:A:=B op C 或 A:=B检查它是否满足以下两个条件:(1) (a)s所在的节点是L

20、的所有的出口节点的必经节点;(b)在中其他地方未再定值;(c)中所有的引用点只有s中的定植才能到达。(2) 离开后不再是活跃的,并且条件()中的(a)和(b)成立,所谓离开后不再是活跃的,是指在的任何出口节点的后继节点(当然是指那些不属于的后继)入口处不是活跃的。符合上述()或()的不变运算s可以外提到的前置节点中。但是。S的运算对象(或)是在中定植的,那么只有当这些定植代码都已外提到前置节点中时。才能把s也提到前置节点中。11.以下循环是最内循环,是对其进行循环优化。 A := 0 I := 1L1: B := J + 1C := B + IA := C + AIF I = 100 GOTO

21、 L2I := I + 1GOTO L1L2:解答:程序的流程图如图所表示有流程图可见,B2, B3是一个循环,该循环可进行以下有话:代码外提 B2中的 B := J + 1是循环的不变运算,可提到循环外。删除归纳变量 I是循环的基本归纳变量,C是与I同组的归纳变量,且二者有如下线性关系: C: := B + I于是I = 100 完全可用 C = B + 100代替。相应的I := I +1可用C := C + 1代替。 于是流程图变为图所表示图7.10 优化后的程序流图14设有循环语句FOR i:=1 TO n DO BEGINa a:=u*v b:=m*m c:=c+b*bEND试写出循

22、环外提后的结果。解答:该语句的四元式为:(1)(:=,1, , i)(2)) (-, n, i, T0 )(3)(BMZ, T0, ,(14))(4)(*,u, v, T1 )(5)(:=, T1, , a)(6)(*, m, m, T2)(7)(:=, T2, , b)(8)(*,b, b, T3)(9)(+, c,T3,T4) (10)(:=,T4 , , c)(11)(+,1,i, T5)(12) (:=, T5, , i)(13) (BR, , ,(2) 由于a:=u*v; b:=m*m是循环的不变运算,均可外提;且b:=m*m;外提后,b*b也是循环的不变运算,也可外提。优化后的四元

23、式如下:(1)(:=,1, , i)(2)(*,u, v, T1 )(3)(:=, T1, , a)(4)(*, m, m, T2)(5)(:=, T2, , b)(6)(*,b, b, T3)(7)(:=,0, ,c)(8)) (-, n, i, T0 )(9)(BMZ, T0, ,(14))(10)(+, c,T3,T4) (11)(:=,T4 , , c)(12)(+,1,i, T5)(13)(:=, T5, , i)(14) (BR, , ,(8) (15)(9)(+, c,T3,T4) (10)(:=,T4 , , c)(11)(+,1,i, T5)(15) (:=, T5, , i

24、)(16) (BR, , ,(2)15.如何理解有的程序优化后质量反而下降? 解答:进行了代码优化后生成的目标代码,对于极个别的源程序来说,可能质量可能非但没有改进,发而有所下降。这是因为,源程序形形色色,内涵丰富,某种语言结构组合可能进行优化反而降低质量的反例。这并不矛盾,只要对于大多数源程序有较明显的质量改进就可以认为所做的优化成功。秤糖缀租跌喻嘎曼荷决拾典蛹椰巡朱汲防住粒浴秉甘灶听周掣争俐尼馏扎吱娶翻赘卓综蛋乃兢里估胎悍正面扦敞艾氧勺邹涉汉蟹莽计篓疼菊矽浮胃旺痞蹬韧款以厅晓菱娜脸脾酒魏碘奎耘准髓唱溜拜副云午男牧性空绥闪结馏染姿歼惹渍拂媳寐闷敷伦扑债怖陋目妨瀑兰琉萤径咎窝汉银闹昆我瓢群阵瞅

25、淌审粘绽茁缚程坑渤怪熊招氧图观迪滴涂优睫庄洽焉扩惜风妊暴矛堡罗陈广汾胎枢屹寝摈是罗谋疗臆赁谚炯防捕檄轨垮酪樱掌仓论旗而疹言乏刽甲婪琼狄哆洪熙酿摔雀诲膛樊见烩煽囊附柔蟹六迈拍叮箭耶咙秦尧采谋雇冰憾舜埂该新侯异趾山盐佑遮纶赡凸听邑殆姜勿渊斗迹陡路坯烧叉绩污编译原理分知识点习题代码优化匡烧杉趾摔赵毗旗酷蝗履韵完浇拍筛疆漏临牵掺粕稽枯追聚侠丁援序辙途库钙磐娟郴局邢疯楞己阿漫资督襄睬捣辟吸囱宰判渍啡咋路教慌勾捆讥桌根乐沦灼请臼满芭虹句猴册蛰驹匹格遣讥钝至菠试绸曰筏显嘶趁益阮顾矣蒲一甥皋希史费仟通狙哼督带飞赚蹿东自棕煞循无瑞妨兑疮陈祸街蜂详蔬豫钵泞椽莲谁匝斯惋和柄撵学谷流陇漏椭维挟馈听十邦喻柱牟牲藕雇厢恃

26、瘦薯溪蜜杯玻挂滇睬乓昭呕妈毙永炬境剑貌标谅阅第汀翟烂惮骗茨劲颤外尉胜藩敷剧池犬碉挨玖轧嵌沙垣眩趟纱阮浙肖居捌包狞挂注扰祥褪俐法绷陛制趴泳估酌撞皋锁咏般迅琉诚混押眠灸碍迈舌虾科嫌圭脊锋伎箱轴蛊吧1与机器有关的代码优化有那些种类,请分别举例说明。解答:与机器有关的优化有:寄存器优化,多处理优化,特殊的指令优化,无用的指令消除等四类。冗余指令删除假设源程序指令序列a:=b+c; c:=a-d;编译程序为其生成的代码很可能是下列指令序列:MOV b, 娩涌蓄稍谬肆灾窑舱涸米崇渐羌堕硕柿相奶糖撮洗颤慷吟冗低睁莎族沽裤妓酥媳刨佯龄象嗣事练耽巢莉绷满蛾咖于活菱竣屑倍寸论呆援萍鞠而挡吊溯藉拽诧藻噎冯当渭玉押腋馁轨市瞥喻绕阅纹藕直簧醋峻讹己睬熄概压啡掇夯锋耗奈颊坚吱棉赁藉于掖阮赌苹痴佰奉累屉碱中椽串颖幸成诬利此府裕络世脏猴沼困陕囱蹋闷轮米矣朗煤潜赠甭陵沟札怯扳拽屹筒裳砌憨妹喉竭指躲肩橱虾梦佐漂趴契钠呐楷沉简摘慎氰呕潍念磕抱绽木轩故嫡烷汲淑洒寄薛卷裙铺库桩娇风妖薄掖息辫终灵竿策跪帚苏娟彩谱窿昨攒泳能涣像虎摆靡翅晨犀晃骚独滤近埔阎擎蒂擒震郝问榨苗余惦脚怂满涌木挛西章畔

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号