课程
学堂在线测试 —— 编译原理
学堂在线测试 —— 编译原理
属性文法和语法的制导翻译 习题
一、 单项选择题(本题共 32 小题,每小题 1 分,共 32 分)
1. 关于 S-属性文法,以下说法错误的是 ( )。
- A. S-属性文法中的文法符号仅包含综合属性
- B. S-属性文法中的每个文法符号都必须至少包含一个综合属性
- C. S-属性文法能够在自下而上语法分析过程中完成语义处理
- D. S-属性文法的翻译过程需要借助于栈来完成
2. 关于属性文法,以下说法错误的是 ( )。
- A. 终结符号只有综合属性
- B. 非终结符号既可以有综合属性,也可以有继承属性
- C. 某个属性可以既是综合属性,又是继承属性
- D. S-属性文法是 L-属性文法的一种特殊情况
3. 下面的属性文法中适合一遍自上而下计算的是 ( )。
- A. S - 属性文法
- B. L - 属性文法
- C. 任何属性文法
- D. 只含继承属性的属性文法
4. 终结符仅有 ______ 属性。
- A. 传递
- B. 综合
- C. 抽象
- D. 继承
5. 程序设计语言的语义通常不包括 ( )。
- A. 静态语义
- B. 动态语义
- C. 语法语义
- D. 语用语义
6. 语义分析阶段的主要输出是 ( )。
- A. 单词符号
- B. 语法树
- C. 带语义信息的语法树
- D. 目标代码
7. 文法制导翻译的主要目的是 ( )。
- A. 检查程序的语法
- B. 利用语法规则将源程序翻译成中间代码或目标代码
- C. 优化程序的执行
- D. 解析源程序查找语法错误
8. 在文法制导翻译中,属性表示 ( )。
- A. 与语法树节点相关联的一段信息
- B. 源程序中的语法错误
- C. 一种解析技术
- D. 一种代码优化技术
9. 文法制导翻译的关键组成部分是 ( )。
- A. 属性文法
- B. 语法分析器
- C. 语义分析器
- D. 代码生成器
10. 语义规则在文法制导翻译中的作用是 ( )。
- A. 定义属性如何在语法树中计算 and 传播
- B. 检查程序的语法
- C. 优化程序代码
- D. 生成目标代码
11. 下列关于综合属性的说法正确的是 ( )。
- A. 其值由其子节点的值计算得到
- B. 其值由其父节点的值计算得到
- C. 其值从父节点传递到子节点
- D. 用于语义检查
12. 有文法 及其语法制导翻译如下所示(其中 和 分别是常规意义下的算术乘法和加法运算):
若分析句子 1 ∧ 2 ∧ 3 # 4,其属性计算的算术表达式应为:
- A.
1 + (2 * 3) + 4 - B.
1 * (2 + 3) + 4 - C.
1 * (2 * (3 + 4)) - D.
1 * (2 + 3 * 4)
13. 文法制导翻译中,翻译方案是指 ( )。
- A. 一组用于将源程序翻译的产生式规则和相关语义动作
- B. 一组语法检查规则
- C. 一组代码优化规则
- D. 一组目标代码生成规则
14. 关于文法制导翻译,下列说法正确的是 ( )。
- A. 它将语法分析和语义分析结合起来
- B. 它仅用于语法错误检测
- C. 它只专注于代码优化
- D. 它仅用于中间代码生成
15. 下列关于继承属性的描述,正确的是 ( )。
- A. 继承属性的值由该节点的子节点属性计算得到
- B. 继承属性的值从父节点或兄弟节点传递而来
- C. 综合属性和继承属性不能同时出现在同一个文法符号中
- D. 继承属性仅用于表示常量或变量的取值
16. 在语法制导翻译中,属性文法的 “属性” 不可以表示 ( )。
- A. 变量的类型
- B. 表达式的值
- C. 语法树的深度
- D. 源程序的行号
17. 翻译方法与属性文法的主要区别在于 ( )。
- A. 翻译方法只处理综合属性,属性文法处理所有属性
- B. 翻译方法将语义动作嵌入到产生式右部,属性文法将语义规则独立列出
- C. 翻译方法用于代码生成,属性文法用于语义检查
- D. 翻译方法是属性文法的一种简化形式,不含继承属性
18. 文法制导翻译中,对语法树进行属性计算的常用方法是 ( )。
- A. 先序遍历
- B. 后序遍历(适用于综合属性)
- C. 层次遍历
- D. 随机遍历
19. 设有文法片段及语义规则如下:
则句子 a bbcc b(其中 bbcc 表示两个 b 和两个 c)对应的 值为 ( )。
- A. 4
- B. 6
- C. 8
- D. 10
20. 下列不属于文法制导翻译应用场景的是 ( )。
- A. 计算表达式的值
- B. 检查变量是否声明
- C. 生成中间代码(如三地址码)
- D. 对源程序进行词法分析
21. 语义分析的主要目的是 ( )。
- A. 识别源程序的语法结构是否符合文法规则
- B. 检查源程序的语义正确性,并收集类型信息等用于后续翻译
- C. 将源程序转换为中间代码
- D. 优化目标代码的执行效率
22. 下列哪项不属于语义分析的常见任务 ( )。
- A. 变量未声明就使用的检查
- B. 表达式中不同类型数据的运算合法性检查
- C. 识别源程序中的关键字和标识符
- D. 函数调用时实参与形参的个数和类型匹配检查
23. 在语义分析中,“类型检查”的核心是 ( )。
- A. 检查变量名是否符合命名规范
- B. 确保运算或函数调用中参与的操作数类型符合语法规则
- C. 确保变量在使用前已被赋值
- D. 检查表达式的括号是否匹配
24. 语义分析阶段收集的信息通常存储在 ( ) 中,供后续代码生成等阶段使用。
- A. 语法树
- B. 符号表
- C. 中间代码
- D. 目标代码
25. 下列关于语义分析与语法分析的关系,说法正确的是 ( )。
- A. 语义分析必须在语法分析之前进行
- B. 语义分析依赖语法分析的结果(如语法树)
- C. 语法分析和语义分析是完全独立的过程
- D. 语义分析仅关注源程序的结构,不关注意义
26. 下列哪种错误最可能在语义分析阶段被发现 ( )。
- A. 括号不匹配(如
(a + b) - B. 关键字拼写错误(如
whle代替while) - C. 整数与指针进行加法运算
- D. 语句末尾缺少分号
27. 对于表达式 x + 5,若 x 是字符串类型,语义分析阶段会 ( )。
- A. 认为语法错误,因为
+不能连接字符串和整数 - B. 认为语义错误,因为类型不匹配
- C. 自动将整数转换为字符串后允许运算
- D. 忽略类型问题,留待代码生成阶段处理
28. 编译过程中,不属于中间代码生成阶段的任务是 ( )。
- A. 生成三地址码
- B. 进行类型转换
- C. 生成四元式
- D. 生成抽象语法树
29. 对于属性文法中的综合属性,下列说法正确的是 ( )。
- A. 只能由父节点传递给子节点
- B. 可用于表示变量的类型(需从声明处传递到使用处)
- C. 其值由子节点的属性计算得到
- D. 必须通过继承属性才能计算
30. 下列属于语义分析阶段完成的工作是 ( )。
- A. 消除文法的左递归
- B. 记录变量的类型和作用域
- C. 将
a + b转换为add(a, b) - D. 优化循环结构
31. 关于终结符的属性,下列说法正确的是 ( )
- A. 终结符可以有继承属性,且需通过父节点传递
- B. 终结符的综合属性值通常由词法分析器提供(如标识符的名字、常数的值)
- C. 终结符的属性必须由语义规则显式定义
- D. 终结符不能有任何属性
32. 属性文法中的 “语义规则” 主要用于 ( )
- A. 定义语法结构的合法性(如语法规则)
- B. 计算属性值,描述语法成分的语义含义(如类型检查、值计算)
- C. 确定语法分析的优先级和结合性
- D. 生成目标代码
二、 主观题(本题共 2 小题,每小题 10 分,共 20 分)
1. 产生式 有以下语义规则:
C.d := B.c + 1
A.b := A.a + B.c
属性 是综合属性还是继承属性?
2. 以下属性文法中的属性 是综合属性还是继承属性?













