课程
学堂在线测试 —— 编译原理
学堂在线测试 —— 编译原理
语义分析和中间代码产生 习题
一、 单项选择题(本题共 11 小题,每小题 1 分,共 11 分)
1. 中间代码生成所依据的是语言的 ( C )。
- A. 词法规则
- B. 语法规则
- C. 语义规则
- D. 产生规则
【解析】 中间代码生成阶段的任务是根据语义规则,将语法分析产生的语法树(或其他中间表示)转换为中间代码。词法规则用于词法分析,语法规则用于语法分析,而中间代码生成依据的是语义规则。
2. 下面哪些属于程序语言的语义定义?( C )
- A. 表达式中圆括号必须匹配
- B. 类的声明必须以
class开头 - C. 关于函数调用时参数传递方法的描述
- D. 函数体必须用
return语句结尾
【解析】 选项 A(圆括号匹配)和 B(以
class开头)属于语法规则的范畴,描述的是程序的结构形式。选项 D(return结尾)也偏向语法约束。而选项 C 关于函数调用时参数传递方法的描述,涉及的是程序运行时的含义和行为,属于语义定义。
3. (a+b)/(c-d) 对应的逆波兰式(后缀式)是 ( B )。
- A.
abcd-/+ - B.
ab+cd-/ - C.
abcd+/- - D.
ab+cd/-
【解析】 后缀式的转换规则:操作符紧跟在其操作数之后。
(a+b)转为ab+,(c-d)转为cd-,两者做除法得到ab+cd-/。
4. 下列 、 中间代码形式有益于优化处理。( A )
- A. 四元式、间接三元式
- B. 三元式、间接三元式
- C. 二元式、间接三元式
- D. 四元式、三元式
【解析】 四元式由于使用了临时变量,各四元式之间没有直接的引用关系,便于调整顺序进行优化。间接三元式通过间接码表间接引用三元式,调整优化时只需修改间接码表而不影响三元式本身。三元式之间存在直接引用关系,调整顺序会导致引用失效,不利于优化。
5. 目标代码的高效性体现在 ( D )
- A. 运行时间较短
- B. 占用存储空间较小
- C. 运行时间短但占用内存空间大
- D. 运行时间短且占用存储空间小
【解析】 目标代码的高效性需要同时兼顾时间和空间两个维度,即运行时间短且占用存储空间小。只满足其中一个方面不能称为全面的高效。
6. 经过编译以后得到的目标代码是 ( D )
- A. 四元式序列
- B. 间接三元式序列
- C. 三元式序列
- D. 机器语言程序或者汇编语言程序
【解析】 四元式、三元式、间接三元式都是中间代码的表示形式,不是最终的目标代码。编译的最终目标代码是机器语言程序或汇编语言程序(也包括可重定位的机器代码)。
7. 中间代码生成时所遵循的是 ( C )
- A. 语法规则
- B. 词法规则
- C. 语义规则
- D. 等价变换规则
【解析】 中间代码生成是在语法分析的基础上,根据语义规则将源程序翻译为中间代码表示。等价变换规则是代码优化阶段所遵循的。
8. 中间代码的表示形式不包括 ( D )
- A. 三元式
- B. 四元式
- C. 抽象语法树
- D. 正规式
【解析】 常见的中间代码形式包括:后缀式(逆波兰式)、三元式、四元式、间接三元式、抽象语法树、三地址代码等。正规式(正则表达式)是用于描述词法规则(正规集)的工具,不是中间代码的表示形式。
9. 下列哪种不是常见的目标代码形式 ( C )
- A. 汇编语言代码
- B. 机器语言代码
- C. 四元式
- D. 可重定位二进制代码
【解析】 常见的目标代码形式有三种:汇编指令代码、绝对指令代码(机器语言代码)、可重定位指令代码(可重定位二进制代码)。四元式是中间代码的表示形式,而非目标代码。
10. 以下不属于中间代码形式的是 ( B )。
- A. 后缀式
- B. DFA
- C. 三地址代码
- D. 抽象语法树
【解析】 后缀式、三地址代码(四元式、三元式等)、抽象语法树都是常见的中间代码形式。DFA(确定有限自动机)是词法分析阶段用于识别单词的工具,不属于中间代码形式。
11. 下列各项不可能是目标代码的是 ( D )
- A. 汇编指令代码
- B. 可重定位指令代码
- C. 绝对指令代码
- D. 三地址代码
【解析】 目标代码的三种常见形式为:汇编指令代码、可重定位指令代码、绝对指令代码。三地址代码(如四元式)属于中间代码形式,不是目标代码。
二、 填空题(本题共 2 小题,每小题 1 分,共 2 分)
1. 语义分析和中间代码生成阶段,用 ______ 属性文法(语法制导定义) 描述语义规则。
2. 表达式 的后缀式形式是 ______ 。
三、 主观题(本题共 1 小题,每小题 10 分,共 10 分)
1. 把程序段:
while a < b do
if c < d then
x := y + z;
翻译成四元式代码,假设语句标号从 100 开始。
【参考答案】
根据
while-do和if-then的翻译模式,生成的四元式如下:
序号 四元式 说明 (100) (j<, a, b, 102)若 则跳转到 (102) (101) (j, -, -, 107)否则跳转到出口 (107),即 while 循环结束 (102) (j<, c, d, 104)若 则跳转到 (104) (103) (j, -, -, 100)否则跳转回 while 循环开始 (100) (104) (+, y, z, t1)(105) (:=, t1, -, x)(106) (j, -, -, 100)无条件跳转回 while 循环开始 (100) 执行流程分析:
- (100)-(101):
while条件判断,若 成立则进入循环体 (102),否则跳出循环到 (107)- (102)-(103):
if条件判断,若 成立则执行赋值语句 (104),否则跳回 while 循环起始 (100)- (104)-(105):执行
x := y + z赋值操作- (106):赋值完成后无条件跳回 while 循环起始 (100),继续下一轮迭代













