编译原理阶段练习四.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理阶段练习四

编译原理练习四 填空题 1.编译过程中,常见的中间语言形式有四元式 、 三元式 、 逆波兰表示和 树形表示。 2、表达式x+y?zVa0Λ(8+z)3的逆波兰表示为 xy+z?a08z+3ΛV 。 3、在编译程序中安排中间代码生成的目的是 便于代码优化 和 便于目标程序的移植 。 4、根据所涉及程序的范围,优化可分为局部优化、循环优化 和全局优化三种。 5、编译程序进行数据流分析的目的是为了进行全局优化。 6.局部优化是局限与一个 基本块 范围内的一种优化。 7.基本块内可进行的优化有:删除公共子表达式 、删除无用代码 、合并已知常量等。 8.从词法分析器到中间代码生成与被编译的源代码有关,称之为编译器的 前端, 而目标代码生成主要与目标机有关,称之为编译器的 后端 。 9.编译器通常按需要把寄存器分为三组使用: 可分配寄存器 、保留寄存器 和 零用寄存器 。 10.释放寄存器的总的原则是释放代价最小的寄存器 。 选择题 1.表达式-a+b*(-c+d)的逆波兰式是 d 。 a.ab+-cd+-* b.a-b+c-d+* c.a-bc+-d+* d.a-bc-d+*+ 2.在编译程序中安排中间代码生成的目的是 b d 。 便于进行存储空间的组织 有利于目标代码的优化 有利于编译程序的移植 有利于目标代码的移植 有利于提高目标代码的质量 3.-a-(b*c/(c-d)+(-b)*a)的逆波兰表示是 c 。 a.abc*cd-b-a*+/-- b.a-bc*cd-b-a*+/- c.a-bc*cd-/b-a*+- d.a-bc*/cd-b-a*+- 4.赋值语句X:=-(a+b)/(c-d)-(a+b*c)的逆波兰表示是 c 。 a.Xab+cd-/-bc*a+-:= b. Xab+/cd-bc*a+--:= c. Xab+-cd-/abc*+-:= d. Xab+cd-/abc*+--:= 5.对任何一个编译程序来说,产生中间代码是 b . a.不可缺少的 b. 不一定必要的 6.逆波兰表达式ab+cd+*所代表的中缀形式的表达式是 b 。 a.a+b+c*d b. (a+b)*(c+d) c. (a+b)*c+d d. a+b*c+d 7.目标代码生成应着重考虑的问题是 a d 每个语法成分的语义 目标程序运行所占用的空间 目标程序运行速度 目标代码中需要哪些信息,怎样截取这些信息 如何使生成的目标代码尽可能简短 8.代码优化的主要目标是 a b c 。 如何提高目标程序的运行速度 如何减少目标程序运行所需的空间 如何协调a和b 如何使生成的目标代码尽可能的简短 9.编译程序在优化时 b 用到源程序中的注释 a.可能要 b.不可能 10.在编译程序采用的优化方法中, c d e 是在循环语句范围内进行的。 合并已知常量 删除多余运算 删除归纳变量 强度消弱 代码外提 11.程序基本块是指 d 。 一个子程序 一个仅有一个入口和一个出口的语句 一个没有嵌套的程序段 一组顺序执行的程序段,仅有一个入口和一个出口 12.合并表达式中的常量运算的目的是 c 。 合并常量,使表达式中的常量尽可能少 合并常量,是表达式尽可能简短 将可在编译时刻计算的常量运算在编译时刻计算出来,然后用所计算出来的值替换表达式中出现的所以这种常量运算,使得生成的代码指令尽可能少 13.下面的程序段可以进行哪些优化c d e i:=1 j:=10 read k 1: x:=x*i y:=j*i z:=x*y write j i:=i+1 if i100 goto 1 halt a.合并已知常量 b.删除多余运算 c.删除归纳变量 d.强度消弱 e.代码外提 为什么要使用中间语言形式? 解答:使用中间语言形式有如下好处: 中间语言与具体机器无关,把与机器特性紧密相关的内容尽可能放到后端,有利于重定目标,一种中间语言可以为生成多种不同型号目标机上的目标代码服务 可以对中间语言进行与机器无关的优化,有利于提高目标代码的质量 使各阶段的开发复杂性降低,有利于编译程序的开发 四、设有表达式A*(B*C-A) ? B+C*D (1)写出逆波兰式中间代码 写出三元式中间代码 写出多元式中间代码 画出树 解答:逆波兰表示:ABC*A-*BCD*+? 三元式表示:(1)* B C (2)-(1) A (3)* A (2)

文档评论(0)

82393aa + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档