编译器设计 MCQ

2024 年 8 月 28 日 | 阅读 13 分钟

1) 用户以什么语言编写程序?

  1. 低级语言
  2. 高级语言
  3. 十进制格式
  4. 中级语言

答案: b. 高级语言

解释: 用户使用高级语言编写程序,因为它更易于使用、理解和记忆。


2) 哪个计算机程序接受高级语言并将其转换为汇编语言?

  1. 解释器
  2. 链接器
  3. 汇编器
  4. Compiler

答案: d. 编译器

解释: 编译器是一种计算机程序,它接受用高级语言编写的代码,并将其转换为汇编语言。


3) 编译器程序是否一次性翻译整个源代码?

  1. 不能
  2. 取决于编译器
  3. 不知道
  4. 是的

答案: d. 是

解释: 编译器是一种程序,可以将整个高级代码一次性翻译成机器代码。


4) 以下哪个文件是汇编器的输出?

  1. 程序文件
  2. 目标文件
  3. 数据文件
  4. 任务文件

答案: b. 目标文件

解释: 目标文件包含目标代码,这是汇编器的输出。


5) 在编译器中,使用哪个工具将字符分组为标记?

  1. 解析器
  2. 代码优化器
  3. 代码生成器
  4. Scanner

答案: d. 扫描器

解释: 扫描器是一个由编译器程序调用的子程序。扫描器将字符组合起来,生成标记。


6) 什么是链接器?

  1. 它总是在程序执行之前使用。
  2. 它需要创建加载模块。
  3. 它与加载器相同
  4. 以上都不是

答案: b. 它需要创建加载模块。

解释: 链接器是编译器中的一个程序,它需要创建加载模块。


7) 解析分为多少种类型?

  1. 三种类型
  2. 四种类型
  3. 两种类型
  4. 五种类型

答案: c. 两种类型

解释: 在编译器设计中,解析器主要分为自顶向下解析和自底向上解析。


8) 在哪种解析中,解析器从起始符号开始构建解析树,并将其转换为输入符号。

  1. 自底向上解析
  2. 自顶向下解析
  3. 以上都不是
  4. a 和 b 都是

答案: b. 自顶向下解析

解释: 自顶向下解析是一种技术,它从起始符号开始构建解析树,并将其转换为输入符号。这种解析也称为预测解析或递归解析。


9) 自顶向下解析器生成哪种推导?

  1. 最右推导的反向
  2. 最左推导的反向
  3. 最右推导
  4. 最左推导

答案: d. 最左推导

解释: 自顶向下解析器生成最左推导。它从左到右构建解析树,并生成指定句子的最左推导。


10) 自底向上解析器生成哪种推导?

  1. 最右推导的反向
  2. 最左推导的反向
  3. 最右推导
  4. 最左推导

答案: a. 最右推导的反向。

解释: 自底向上解析器反向生成最右推导。它从输入字符串开始构建解析树,直到根节点,并尝试反向构建指定字符串的最右推导。


11) 以下解析器中,哪个解析器功能最强大?

  1. 算符优先
  2. SLR
  3. 规范 LR
  4. LALR

答案: c. 规范 LR

解释: 规范 LR (CLR) 比 LALR 和 SLR 更强大。


12) 词法分析器的输出是_______

  1. 字符串字符
  2. 语法树
  3. 一组 RE
  4. 一组标记

答案: d. 一组标记

解释: 词法分析器输出一组标记。标记集包含关键字、分隔符、文字、标识符和运算符。


13) 以下哪种文法描述了词法语法?

  1. 词法文法
  2. 上下文无关文法
  3. 语法文法
  4. 正则表达式文法

答案: a. 词法文法

解释: 词法文法是一种指定标记语法的文法。


14) 哪个文法为同一字符串提供多个解析树?

  1. 无歧义
  2. 正则表达式
  3. 歧义
  4. 以上全部。

答案: c. 歧义

解释: 歧义文法是一种上下文无关文法,它为同一指定句子提供一个以上的最左或最右推导。


15) 在编译器中,词法分析器用于?

  1. 删除注释
  2. 删除空格
  3. 将语法分解为标记集
  4. 提及的所有内容

答案: d. 以上全部

解释: 词法分析器在编译器中用于删除空格和注释。它还用于将语法分解为标记集。


16) 哪个术语用于表示标记中的字符序列?

  1. Mexeme
  2. 词素
  3. Texeme
  4. 图案

答案: b. 词素

解释: 词素是标记中的一个字母数字字符字符串。在源程序中,词素是由标记模式识别的字符。


17) 编译器的哪个部分高度使用了文法概念?

  1. 代码优化
  2. 代码生成
  3. 解析器
  4. 词法分析

答案: c. 解析器

解释: 文法概念在编译器的解析器阶段使用得最多。

解析器阶段位于编译器词法分析阶段之后。解析器使用预定义的文法生成解析树。解析器有两种不同的技术用于创建不同的解析树。


18) 编译器的哪个阶段检查程序的语法?

  1. 代码优化
  2. 语义分析
  3. 代码生成
  4. 语法分析

答案: d. 语法分析

解释: 语法分析是编译器的第二个阶段,它检查给定的输入字符串是否符合编程语言的正确语法。


19) 以下哪个组件对语义分析很重要?

  1. Yacc
  2. Lex
  3. 符号表
  4. 类型检查

答案: d. 类型检查

解释: 在语义分析中,类型检查是一个重要组件,因为它根据语义约定验证程序的运算。


20) 编译器的哪个阶段也称为扫描器?

  1. 语法分析
  2. 词法分析
  3. 语义分析
  4. 代码生成

答案: b. 词法分析

解释: 编译器(词法分析)的第一部分也称为扫描器。它扫描源程序中的字符,并将其组合以生成标记。


21) 编译器的哪个阶段也称为解析器?

  1. 代码优化
  2. 语义分析
  3. 语法分析
  4. 词法分析

答案: c. 语法分析

解释: 位于词法分析阶段之后的编译器阶段也称为解析器。

语法分析或解析器接受词法分析器生成的标记,并输出解析树。


22) 以下哪个解析器是自顶向下解析器?

  1. LALR 解析器
  2. LR 解析器
  3. 算子优先级解析器
  4. 递归下降解析器

答案: d. 递归下降解析器

解释: 递归下降解析器是一种自顶向下解析器,它自顶向下生成解析树,并从左到右读取输入字符串。


23) 在编译器中,关键字在哪个阶段被识别?

  1. 代码生成
  2. 数据流分析
  3. 程序的词法分析
  4. 程序解析

答案: c. 程序的词法分析

解释: 在编译器中,关键字首先在程序的词法分析阶段被识别。


24) 解析树中的叶节点表示?

  1. 子终结符
  2. 半终结符
  3. 非终结符
  4. 终结符

答案: d. 终结符。

解释: 解析树中的所有叶节点表示终结符。所有内部节点表示非终结符。


25) 哪个图描述了基本块和后继关系?

  1. 控制图
  2. DAG
  3. 流图
  4. 哈密顿图

答案: c. 流图

解释: 流图是编译器中的一种图,它描述了基本块以及程序控制如何在这些块之间传递。


26) 哪个语言被下推自动机接受?

  1. 0型语言
  2. 1型语言
  3. 2型语言
  4. 3型语言

答案: c. 2型语言

解释: 根据乔姆斯基谱系,下推自动机接受2型语言,用于上下文无关语言。


27) 结构化文法中最通用的阶段是?

  1. 上下文敏感文法
  2. 上下文无关文法
  3. 正则表达式文法
  4. 以上全部

答案: a. 上下文敏感文法

解释: 上下文敏感文法是结构化文法中最通用的阶段,因为在这种文法中,左侧和右侧都包含终结符或非终结符。


28) 在编译器中,使用中间代码的功能是

  1. 改进寄存器分配
  2. 增加错误报告和恢复。
  3. 使语义分析更容易。
  4. 增加在其他编译器中重用与机器无关的代码优化器的机会。

答案: d. 增加在其他编译器中重用与机器无关的代码优化器的机会。

解释: 语义分析后,中间代码增加了在其他编译器中重用与机器无关的代码优化器的机会。


29) 优化可以分为多少种类型?

  1. 两种类型
  2. 三种类型
  3. 四种类型
  4. 五种类型

答案: a. 两种类型

解释: 代码优化技术分为与机器相关的和与机器无关的类型。


30) 在循环中,哪个变量的值被循环不变量更新?

  1. loop
  2. 强度
  3. 归纳
  4. 不变

答案: c. 归纳

解释: 归纳变量的值在循环中被循环不变量更新。


31) 哪个编译器在一个机器上运行,并为多个机器生成代码?

  1. 多趟编译器
  2. 交叉编译器
  3. 优化编译器
  4. 单趟编译器

答案: b. 交叉编译器

解释: 交叉编译器是在一台机器上运行,并为多台机器生成代码的编译器。


32) 以下哪个不是编译器的特征?

  1. 执行时间更长
  2. 调试过程缓慢
  3. 在移除所有语法错误后进行执行
  4. 首先扫描整个程序,然后将其转换为机器可理解的代码

答案: a. 执行时间更长

解释: 编译器执行并不需要很长时间。因此,执行时间更长不是编译器的特征。


33) 当左侧的非终结符在右侧重复为第一个符号时,会发生什么现象?

  1. 最左推导
  2. 左递归
  3. 左因子分解
  4. 左解析

答案: b. 左递归

解释: 左递归是一个过程,其中产生式左侧的非终结符与右侧最左边的符号相同。


34) 在哪种推导中,每一步都替换最右边的非终结符?

  1. 右前瞻
  2. 右声明
  3. 最右
  4. 右非终结符

答案: c. 最右

解释: 最右推导是上下文无关文法的一种推导,它在每一步都替换最右边的非终结符。


35) 在哪种推导中,每一步都替换最左边的非终结符?

  1. 左递归
  2. 左非终结符
  3. 左下推
  4. 最左

答案: d. 最左

解释: 最左推导是上下文无关文法的一种推导,它在每一步都替换最左边的非终结符。


36) 编译器可以检测哪种类型的错误?

  1. 既不是逻辑错误也不是语法错误
  2. 仅逻辑错误
  3. 仅语法错误
  4. 语法和逻辑错误

答案: c. 仅语法错误。

解释: 编译器是一种计算机程序,它检测语法错误,而不是逻辑错误。


37) 哪个符号与上下文无关文法无关?

  1. 结束符号
  2. 开始符号
  3. 非终结符
  4. 终结符

答案: a. 结束符号

解释: 上下文无关文法是一种文法,它包含开始符号、终结符集合、非终结符集合和产生式集合。


38) 哪种方法将多个循环合并成一个?

  1. 常量折叠
  2. 循环滚动
  3. 循环融合或合并
  4. 以上都不是

答案: c. 循环融合或循环合并

解释: 循环融合是一种优化技术,它将多个循环体合并成一个。这种编程技术可能会降低程序的运行时性能。


39) 哪个解析器被称为移入-归约解析器?

  1. 自底向上解析器
  2. 自顶向下解析器
  3. 自顶向下和自底向上都适用
  4. 以上都不是

答案: a. 自底向上解析器

解释: 编译器中的自底向上解析器也称为移入-归约解析器。


40) 以下哪个树是推导的图形化表示?

  1. 八叉树
  2. 解析树
  3. 二叉树
  4. 以上都不是

答案: b. 解析树

解释: 表示字符串语法结构的树称为解析树。它还指示了终结符、开始符号和非终结符。


41) YACC 的全称是?

  1. Yet Another Computer Computer
  2. Yet Another Computer Compiler
  3. Yet Another Compiler Computer
  4. Yet Another Compiler Compiler

答案: d. Yet Another Compiler Compiler

解释: YACC 的全称是 Yet Another Compiler Compiler,它生成 LALR(1) 文法解析器。


42) 移入-归约解析中可能发生哪种类型的冲突?

  1. 归约/归约
  2. 移入/归约
  3. 移入/归约和归约/归约
  4. 以上都不是

答案: b. 移入/归约

解释:


43) 以下哪种文法可以转换为 DFA?

  1. 通用文法
  2. 左线性文法
  3. 右线性文法
  4. 以上全部。

答案: c. 右线性文法

解释: 右线性文法是一种文法,其产生式右侧的所有非终结符都位于右端。这种文法可以轻松转换为 DFA。


44) 哪个算法调用 GETREG() 函数?

  1. 代码移动算法
  2. 代码优化算法
  3. 中间代码
  4. 代码生成算法

答案: d. 代码生成算法

解释: 代码生成算法调用 GETREG() 函数来检查可用寄存器的状态以及结果应存储的位置。此函数还为每个内存位置选择寄存器。


45) FORTRAN 编程语言是一种 _______

  1. 图灵语言
  2. 上下文敏感语言
  3. 上下文无关语言
  4. 正则表达式语言

答案: b. 上下文敏感语言。

解释: 上下文敏感语言是由上下文敏感文法定义的语言。


46) 代码的执行时间取决于?

  1. 机器惯用法的使用
  2. 寄存器使用方式
  3. 计算执行的顺序
  4. 提及的所有内容

答案: d. 以上全部

解释:


47) 使用哪种优化技术来减少多个跳转?

  1. 后期优化技术
  2. 窥孔优化技术
  3. 局部优化技术
  4. 代码优化技术

答案: b. 窥孔优化技术

解释: 窥孔优化技术用于减少内存占用和代码大小。它还用于提高程序性能。


48) 以下哪个术语用于跟踪名称的当前值存储的位置?

  1. 寄存器描述符
  2. 地址描述符
  3. 分配描述符
  4. 标志寄存器

答案: b. 地址描述符

解释: 地址描述符是代码生成器技术中的一种描述符,它跟踪内存位置。


49) 以下哪个是由运算符符号标记的?

  1. 内部节点
  2. 叶子
  3. 节点

答案: b. 内部节点

解释: 在编译器中,内部节点由运算符符号指定。


50) DAG 是 ______ 的缩写?

  1. 检测有向无环图
  2. 数据有向无环图
  3. 动态有向无环图
  4. 有向无环图

答案: d. 有向无环图

解释: DAG 是有向无环图(Directed Acyclic Graph),它使用三地址码构建以优化基本块。


51) 以下哪个用于编译器的各个阶段?

  1. 记录
  2. 程序
  3. 符号表

答案: c. 符号表

解释: 符号表是一个由编译器创建和维护的表,并在编译器的各个阶段中使用。


52) 以下哪个结构有四个字段?

  1. 解析树
  2. 三元式
  3. 间接三元组
  4. 四元式

答案: d. 四元组

解释: 四元组是编译器中的一种记录结构,具有四个字段,用于实现三地址码。


53) 在以下哪个树中,叶子表示操作数,内部节点表示运算符。

  1. 语法树
  2. 解析树
  3. 结构树
  4. 语义树

答案: a. 语法树

解释: 语法树是编译器中的一种树,它用叶子表示操作数,用内部节点表示运算符。


54) 哪个语句是中间代码的抽象形式?

  1. 3-地址
  2. 2-地址
  3. 地址
  4. 中间代码

答案: a. 3-地址

解释:


55) 语法制导翻译器的实现描述了哪种映射?

  1. 解析表
  2. 输入
  3. 输出
  4. 输入-输出 (Input-Output)

答案: d. 输入-输出

解释: 输入-输出是一种由语法制导翻译器(SDT)的实现描述的映射。


56) 以下哪个函数被称为 LR(0) 项的规范集合。

  1. FIRST
  2. GOTO
  3. COMPUTE
  4. FOLLOW

答案: b. GOTO

解释: GOTO 是一个用于定义 DFA 的函数。它被称为 LR(0) 项的规范集合。


57) 以下哪个选项不是移入-归约解析器的功能?

  1. Reduce(归约)
  2. Accept
  3. Go
  4. 移位

答案: c. Go

解释: 移入-归约解析器只包含移入、归约、错误和接受动作。因此,Go 不是移入-归约解析器的功能。


58) 以下哪种文法没有两个相邻的非终结符?

  1. 不规则文法
  2. 正则表达式文法
  3. 运算符
  4. 优先级文法

答案: c. 运算符

解释: 运算符文法是一种在其产生式右侧不包含两个相邻非终结符的文法。它是定义数学运算符的文法。


59) DFA 是 ______ 的缩写。

  1. 非确定性有限状态自动机
  2. 确定性有限自动机
  3. 非确定性有限自动机
  4. 确定性有限集自动机

答案: b. 确定性有限自动机

解释: DFA 的全称是确定性有限自动机(Deterministic Finite Automata)。它也称为确定性有限接受器。自动机一次只从输入字符串中读取一个符号。


60) NFA 是 ______ 的缩写。

  1. 非确定性有限状态自动机
  2. 确定性有限自动机
  3. 非确定性有限自动机
  4. 确定性有限集自动机

答案: c. 非确定性有限自动机

解释: NFA 的全称是非确定性有限自动机(Non-Deterministic Finite Automata)。它也称为非确定性有限状态机。自动机在同一状态下可以有多个可能的转换。