视频加载失败

课程

4632 字
约 14 分钟

学堂在线测试 —— 编译原理

编译原理exercises/xuetangx_2026·更新于 2026-09-15

学堂在线测试 —— 编译原理

属性文法和语法的制导翻译 习题


一、 单项选择题(本题共 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. 有文法 GG 及其语法制导翻译如下所示(其中 *++ 分别是常规意义下的算术乘法和加法运算):

TT1T2{T.val=T1.val×T2.val}TT1#n{T.val=T1.val+n.val}Tn{T.val=n.val}\begin{aligned} T &\to T_1 \wedge T_2 && \{ T.\text{val} = T_1.\text{val} \times T_2.\text{val} \} \\ T &\to T_1 \# n && \{ T.\text{val} = T_1.\text{val} + n.\text{val} \} \\ T &\to n && \{ T.\text{val} = n.\text{val} \} \end{aligned}

若分析句子 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. 设有文法片段及语义规则如下:

SaAb{S.len=A.len+2}AbAc{A.len=A.len+2}Aε{A.len=0}\begin{aligned} S &\to aAb && \{ S.\text{len} = A.\text{len} + 2 \} \\ A &\to bA'c && \{ A.\text{len} = A'.\text{len} + 2 \} \\ A &\to \varepsilon && \{ A.\text{len} = 0 \} \end{aligned}

则句子 a bbcc b(其中 bbcc 表示两个 b 和两个 c)对应的 S.lenS.\text{len} 值为 ( )。

  • 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. 产生式 ABCA \to BC 有以下语义规则:

C.d := B.c + 1
A.b := A.a + B.c

属性 a,b,c,da, b, c, d 是综合属性还是继承属性?

2. 以下属性文法中的属性 val\text{val} 是综合属性还是继承属性?

产生式语义规则LEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1FT.val:=T1.val×F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval\begin{array}{ll} \text{产生式} & \text{语义规则} \\ \hline L \to En & \text{print}(E.\text{val}) \\ E \to E_1 + T & E.\text{val} := E_1.\text{val} + T.\text{val} \\ E \to T & E.\text{val} := T.\text{val} \\ T \to T_1 * F & T.\text{val} := T_1.\text{val} \times F.\text{val} \\ T \to F & T.\text{val} := F.\text{val} \\ F \to (E) & F.\text{val} := E.\text{val} \\ F \to \text{digit} & F.\text{val} := \text{digit}.\text{lexval} \end{array}
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录