编译原理课后-答案.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》课后习题答案第十一章 《编译原理》课后习题答案第十一章 PAGE 10 PAGE 10 计算机咨询网( )陪着您 第 11 章 代码优化 第1题 何谓代码优化?进行优化所需要的基础是什么? 答案: 对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少,或两者都有。 优化所需要的基础是在中间代码生成之后或目标代码生成之后。第2题 编译过程中可进行的优化如何分类? 答案: 依据优化所涉及的程序范围,可以分为:局部优化、循环优化和全局优化。第3题 最常用的代码优化技术有哪些? 答案: 删除多余运算 代码外提 强度削弱 变换循环控制条件 合并已知量与复写传播 删除无用赋值 第 4 题 图 11.23 是图 11.22 的 C 代码的部分三地址代码序列。 void quicksort(m,n) int m,n; { int i,j; int v,x; if (n=m) return; /* fragment begins here */ i = m-1; j = n; v = a[n]; while(1) { do i = i+1;while (a[i]v); do j = j-1; while (a[j]v); if (i=j) break; x = a[i]; a[i] = a[j]; a[j] = x; } x = a[i]; a[i] = a[n]; a[n] = x; /* fragment ends here */ quicksort (m,j); quicksort(i+1,n); } 图 11.22 (1) i:=m-1 (2) j:=n (3) t1:=4*n (4) v:=a[t1] (5) i:=i+1 (6) t2:=4*i (7) t3:=a[t2] (8) if t3 v goto (5) (9) j:=j-1 (10) t5:=4*j (11) t5:=a[t4] if t5 v goto (9) if i = j goto (23) (14) t6:=4*i (15) x:=a[t6] (16) t7:=4*i (17) t6:=4*j (18) t9:=a[t8] (19) a[t7]:=t9 (20) t10:=4*j (21) a[t10]:=x (22) goto (5) (23) t11:=4*i (24) x:=a[t11] (25) t12:=4*i (26) t13:=4*n (27) t14:=a[t13] (28) a[t12]:=t14 (29) t15:=4*n (30) a[t15]:=x 图 11.23 请将图 11.23 的三地址代码序列划分为基本块并做出其流图。 将每个基本块的公共子表达式删除。 找出流图中的循环,将循环不变量计算移出循环外。 找出每个循环中的归纳变量,并在可能的地方删除它们。答案: (1) 基本块 流图 (2) B5 中(14)和(16)是公共子表达式、(17)和(20)是公共子表达式,B5 变为 (14) t6:=4*I (15) (16) t7:=t6 (17) t8:=4*J … (20) t10:=t8 (21) (22) B6 中(23)和(25)是公共子表达式、(26)和(29)是公共子表达式,B6 变为 (23) t11:=4*I (24) (25) t12:=t11 (26) t13:=4*n … (29) t15:=t13 (3) 循环 ① {B2} ② {B3} ③ {B2,B3,B4,B5} (4) 在循环{B2,B3,B4,B5}中,原来的(14)(17)都可以删除。 第 5 题: 如下程序流图(图 11.24)中,B3 中的 i∶=2 是循环不变量,可以将其提到前置结点吗? 你还能举出一些例子说明循环不变量外移的条件吗? 图 11.24 答案: 不能。因为 B3 不是循环出口 B4 的必经结点。循环不变量外移的条件外有: (a)(I)s 所在的结点是 L 的所有出口结点的必经结点 A 在 L 中其他地方未再定值 L 中所有 A 的引用点只有 s 中 A 的定值才能到达 (b)A 在离开 L 之后不再是活跃的,并且条件(a)的(II)和(III)成立。所谓 A 在离开 L 后不再是活跃的是指,A 在 L 的任何出口结点的后继结点的入口处不是活跃的(从此点后不被引用)(3)按步骤(1)所找出的不变运算的顺序,依次把符合(2)的条件(a)或(b)的不变运算 s 外提到 L 的前置结点中。如果 s 的运算对象(B 或 C)是在 L 中定值的,则只有当这些定值四元式都已外提到前置结点中时,才可把 s 也外提到前置结点。 第 6 题 试对以下基本块 B1 和 B2: B1:

文档评论(0)

zhanghaoyu888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档