1、编译原理练习四一、 填空题1编译过程中,常见的中间语言形式有 、 、 和 。2、表达式x+yzVa0(8+z)3的逆波兰表示为 。3、在编译程序中安排中间代码生成的目的是 和 。4、根据所涉及程序的范围,优化可分为局部优化、 和全局优化三种。5、编译程序进行数据流分析的目的是 。6局部优化是局限与一个 范围内的一种优化。7基本块内可进行的优化有: 、 、 等。8从词法分析器到中间代码生成与被编译的源代码有关,称之为编译器的 ,而目标代码生成主要与目标机有关,称之为编译器的 。9编译器通常按需要把寄存器分为三组使用: 、 和 。10释放寄存器的总的原则是 。二、 选择题1表达式-a+b*(-c+
2、d)的逆波兰式是 。a.ab+-cd+-*b.a-b+c-d+*c.a-bc+-d+*d.a-bc-d+*+2在编译程序中安排中间代码生成的目的是 。a. 便于进行存储空间的组织b. 有利于目标代码的优化c. 有利于编译程序的移植d. 有利于目标代码的移植e. 有利于提高目标代码的质量3-a-(b*c/(c-d)+(-b)*a)的逆波兰表示是 。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)的逆波兰表示是 。a.Xab+cd-/-bc*a+-:=b.
3、 Xab+/cd-bc*a+-:=c. Xab+-cd-/abc*+-:=d. Xab+cd-/abc*+-:=5.对任何一个编译程序来说,产生中间代码是 .a.不可缺少的b. 不一定必要的6下面逆波兰表达式所代表的中缀形式的表达式是 。a.a+b+c*db. (a+b)*(c+d)c. (a+b)*c+dd. a+b*c+d7.目标代码生成应着重考虑的问题是 a. 每个语法成分的语义b. 目标程序运行所占用的空间c. 目标程序运行速度d. 目标代码中需要哪些信息,怎样截取这些信息e. 如何使生成的目标代码尽可能简短8代码优化的主要目标是 。a. 如何提高目标程序的运行速度b. 如何减少目标程
4、序运行所需的空间c. 如何协调a和bd. 如何使生成的目标代码尽可能的简短9编译程序在优化时 用到源程序中的注释a.可能要b.不可能10在编译程序采用的优化方法中, 是在循环语句范围内进行的。a. 合并已知常量b. 删除多余运算c. 删除归纳变量d. 强度消弱e. 代码外提11程序基本块是指 。a. 一个子程序b. 一个仅有一个入口和一个出口的语句c. 一个没有嵌套的程序段d. 一组顺序执行的程序段,仅有一个入口和一个出口12合并表达式中的常量运算的目的是 。a. 合并常量,使表达式中的常量尽可能少b. 合并常量,是表达式尽可能简短c. 将可在编译时刻计算的常量运算在编译时刻计算出来,然后用所
5、计算出来的值替换表达式中出现的所以这种常量运算,使得生成的代码指令尽可能少13下面的程序段可以进行哪些优化i:=1j:=10read k1:x:=x*iy:=j*iz:=x*ywrite ji:=i+1if i0 then x:=0 else x:=1(2) while x0 do x:=x-1(3) if x0 then if x0 do while y0 do begin y:=y-x; x:=x-1 end六、给出从多元式划分基本块的方法七、给出程序流图(以基本块为结点)的一种表示方法。八、设有语句序列i:=2;j:=i*(i+1);k:=2*(i+j)试写出优化前和优化后的多元式代码。其中变量均为一般整形变量。3 / 3