还剩3页未读,继续阅读
文本内容:
编译原理练习四
1、填空题1.编译过程中,常见的中间语言形式有四元式、三元式、逆波兰表示和树形表示
2、表达式x+yzVa0Λ8+z3的逆波兰表示为xy+za08z+3ΛV
3、在编译程序中安排中间代码生成的目的是便于代码优化和便于目标程序的移植
4、根据所涉及程序的范围,优化可分为局部优化、循环优化和全局优化三种
5、编译程序进行数据流分析的目的是为了进行全局优化6.局部优化是局限与一个基本块范围内的一种优化7.基本块内可进行的优化有删除公共子表达式、删除无用代码、合并已知常量等8.从词法分析器到中间代码生成与被编译的源代码有关,称之为编译器的前端,而目标代码生成主要与目标机有关,称之为编译器的后端9.编译器通常按需要把寄存器分为三组使用可分配寄存器、保留寄存器和零用寄存器10.释放寄存器的总的原则是释放代价最小的寄存器
2、选择题1.表达式-a+b*-c+d的逆波兰式是da.ab+-cd+-*b.a-b+c-d+*c.a-bc+-d+*d.a-bc-d+*+2.在编译程序中安排中间代码生成的目的是bda.便于进行存储空间的组织b.有利于目标代码的优化c.有利于编译程序的移植d.有利于目标代码的移植e.有利于提高目标代码的质量3.-a-b*c/c-d+-b*a的逆波兰表示是ca.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的逆波兰表示是ca.Xab+cd-/-bc*a+-:=b.Xab+/cd-bc*a+--:=c.Xab+-cd-/abc*+-:=d.Xab+cd-/abc*+--:=
5.对任何一个编译程序来说,产生中间代码是b.a.不可缺少的b.不一定必要的6.逆波兰表达式ab+cd+*所代表的中缀形式的表达式是ba.a+b+c*db.a+b*c+dc.a+b*c+dd.a+b*c+d
7.目标代码生成应着重考虑的问题是ada.每个语法成分的语义b.目标程序运行所占用的空间c.目标程序运行速度d.目标代码中需要哪些信息,怎样截取这些信息e.如何使生成的目标代码尽可能简短8.代码优化的主要目标是abca.如何提高目标程序的运行速度b.如何减少目标程序运行所需的空间c.如何协调a和bd.如何使生成的目标代码尽可能的简短9.编译程序在优化时b用到源程序中的注释a.可能要b.不可能10.在编译程序采用的优化方法中,cde是在循环语句范围内进行的a.合并已知常量b.删除多余运算c.删除归纳变量d.强度消弱e.代码外提11.程序基本块是指da.一个子程序b.一个仅有一个入口和一个出口的语句c.一个没有嵌套的程序段d.一组顺序执行的程序段,仅有一个入口和一个出口12.合并表达式中的常量运算的目的是ca.合并常量,使表达式中的常量尽可能少b.合并常量,是表达式尽可能简短c.将可在编译时刻计算的常量运算在编译时刻计算出来,然后用所计算出来的值替换表达式中出现的所以这种常量运算,使得生成的代码指令尽可能少13.下面的程序段可以进行哪些优化cdei:=1j:=10readk1:x:=x*iy:=j*iz:=x*ywriteji:=i+1ifi100goto1halta.合并已知常量b.删除多余运算c.删除归纳变量d.强度消弱e.代码外提
3、为什么要使用中间语言形式?解答使用中间语言形式有如下好处i.中间语言与具体机器无关,把与机器特性紧密相关的内容尽可能放到后端,有利于重定目标,一种中间语言可以为生成多种不同型号目标机上的目标代码服务ii.可以对中间语言进行与机器无关的优化,有利于提高目标代码的质量iii.使各阶段的开发复杂性降低,有利于编译程序的开发
四、设有表达式A*B*C-AB+C*D1写出逆波兰式中间代码1写出三元式中间代码2写出多元式中间代码3画出树解答逆波兰表示ABC*A-*BCD*+三元式表示
(1)*BC
(2)-
(1)A
(3)*A
(2)
(4)*CD
(5)+B
(4)
(6)
(3)
(5)多元式表示
(1)*BCT1
(2)-T1AT2
(3)*AT2T3
(4)*CDT4
(5)+BT4T5
(6)T3T5T6树表示
五、试写出下列语句的四元式中间代码1ifx0thenx:=0elsex:=12whilex0dox:=x-13ifx0thenifx0thenx:=x+1elsex:=1elsex:=14whilex0dowhiley0dobeginy:=y-x;x:=x-1end解答1x0t1FJ5t1/:=0/xRJ6//:=1/x2x0t1FJ6t1/-x1t2:=t2/xRJ1//34略
六、给出从多元式划分基本块的方法解答基本块划分算法1求出多元式程序中各个基本块的入口语句•1程序的第一个句句;或者•2能由条件转移语句或无条件转移语句转移到达的语句;或者,•3仅跟在条件转移语句后面的语句2对以上求出的每一入口语句,构造其所属的基本块3凡未被纳入某一基本块中的语句,都是程序中控制流程无法到达的语句,从而也是不会被执行的语句,可把他们删除
七、给出程序流图(以基本块为结点)的一种表示方法解答参考书P328
八、设有语句序列i:=2;j:=i*i+1;k:=2*i+j试写出优化前和优化后的多元式代码其中变量均为一般整形变量解答优化前:=2i+i1t1*it1t2:=t2j+ijt3*2t3t4:=t4k优化后:=2i:=6j:=24k+**B-ADCA*BC。