编译原理 :中间代码生成

一. 单选题(共10题,20分)
1. (单选题, 2分) 中间代码是介于源语言程序和什么之间的一种码? B
A 源代码

B 机器语言

C 汇编语言

D 目标代码

2. (单选题, 2分)
在编译程序中与生成中间代码的目的无关的是(  )D
A便于目标代码优化

B便于存储空间的组织

C便于目标代码的移植

D便于编译程序的移植

3. (单选题, 2分)
四元式之间的联系是通过(  )实现的 B
A指示器

B临时变量

C符号表

D程序变量

4. (单选题, 2分)
后缀式 ab+cd+/可用表达式(  )来表示 B
Aa+b/c+d

B(a+b)/(c+d)

C a+b/(c+d)

D a+b+c/d

5. (单选题, 2分)
间接三元式表示法的优点为(  ) A
A采用间接码表,便于优化处理

B节省存储空间,不便于表的修改

C便于优化处理,节省存储空间

D节省存储空间,不便于优化处理

6. (单选题, 2分)
编译过程中将源代码翻译成中间代码,具有很多优点,其中(  )不是中间代码的优点。 A
A中间代码不能用于解释

B利于在不同目标机上实现同一种语言

C利于进行与机器无关的优化

D 编译程序的逻辑结构更为简单明确

7. (单选题, 2分)
中间代码生成时所依据的是(    ) C
A语法规则

B词法规则

C语义规则

D等价变换规则

8. (单选题, 2分)
在目标代码生成阶段,符号表的作用是(    ) B
A目标代码生成

B语义检查

C语法检查

D地址分配

9. (单选题, 2分)
以下(  )不是中间代码的表示形式 D
ADAG图

B后缀式

C三元式

D间接四元式

10. (单选题, 2分)

表达式a+b*c-d/e↑f的后缀式是(  ) C
Aab+c*d-e↑f

Babc+*def/↑-

C abc*+def↑/-

Dabc*+-def↑/

二. 填空题(共8题,20分)
11. (填空题, 2分)
当源程序中的标号出现“先引用后定义”时,中间代码的转移地址须持标号定义时才能确定,因而要进行       。 回填

12. (填空题, 2分)
生成中间代码主要是为了使         。目标代码的优化容易实现

13. (填空题, 4分)
文法符号的属性有两种,一种称为   综合属性      ,另一种称为   继承属性       。

14. (填空题, 4分)
符号表中名字的有关信息在  词法分析    和   语法语义分析   过程中陆续填入。

15. (填空题, 2分)
在目标代码生成阶段,符号表是    地址分配         的依据。

16. (填空题, 2分)
目标程序运行的动态分配策略中,含有栈式和      堆式        分配策略

17. (填空题, 2分)
优化就是对程序进行各种等价 变换,使之能生成更有效的   目标代码           。

18. (填空题, 2分)
局部优化是     基本块       范围内进行的一种优化。

三. 判断题(共5题,10分)
19. (判断题, 2分)
逆波兰表示法表示表达式时无须使用括号     对

20. (判断题, 2分)
 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用   

21 (判断题, 2分)
为了提高线性符号表的查找效率,可以将线性组织成自适应线性表。

22. (判断题, 2分)
建立完整的符号表只需要扫描一遍程序。 

23. (判断题, 2分)
编译一个源程序时,符号表可以是一张统一的表,也可以按名字的不同种属分为几张。

四. 简答题(共3题,50分)
24. (简答题, 20分)
给出赋值语句X:=-Y*-(C+D)的四元式表示形式。

(1)(+,C,D,T1)

(2)(-,0,T1,T2)

(3)(*,Y,T2,T3)

(4)(-,0,T3,X)

25. (简答题, 10分)
什么是基本块?划分基本块的算法是什么?

基本块是连续三地址状态的最大序列,其中控制流只能在块的第一个语句中输入,并在最后一个语句中停留,而不会停止或分支。

划分基本块的算法:

(1)从语句序列中确定满足以下条件的出口语句:

1)第一个语句;

2)能由条件转移语句或无条件转移语句转移到的语句;

3)紧跟在条件转移语句后面的语句;

(2)确定满足以下 条件的出口语句:

1)下一个入口语句的前导语句;

2)转移语句(包括转移语句自身);

3)停语句(包括停语句自身)。

26. (简答题, 20分)
把下面的语句翻 译成四元式序列。

  while A<C and B<D do 

      if A=1 then C:=C+1  else 

             while A≤D do A:=A+2

该语句的四元式序列如下(其中   E1  、  E2  和   E3  分别对应:  A<C  ∧  B<D, A=1  和   A≤D  并且关

系运算符优先级高):

100 (j<,A,C,102)

101(j,_,_,113  )  /*E1  为   F*/

102 (j<,B,D,104)         /*El  为   T*/

103 (j,_,_,113)          /*El  为   F*/

104 (j=,A,1,106)          /*Ez  为   T*/

105 (j,_,_,108  )  /*EZ  为   F*/

106 (  +  ,C,1,C)            /*C:=C+1*/

107 (j,_,_,112)           /*  跳过   else  后的语句  */

108 (j≤,A,D,110)           /*E3  为   T*/

109 (j,_,_,112)            /*E3  为   F*/

110 (  +  ,A,2,A)             /*A:=A+2*/

111 (j,_,_,108)             /*  转回内层   while  语句开始处  */

112(j,_,_,100)             /*  转回外层   while  语句开始处  */

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值