文章目录
一、第一章:引言
1.简述编译器与解释器的主要共同点以及工作方式的差异。
- 共同点: 均完成对源程序的翻译;
- 差异:编译器采用先翻译后执行,解释器采用边翻译边执行。
2.解释什么是编译器的扫描遍数
编译器工作的每个阶段对以某种形式表示的完整程序进行一遍分析,每个阶段将程序完整分析一遍的工作模式称为一遍扫描。
3.简述语言的语法和语义,并举一个实际的例子加以说明
语法规定了句子形成的规则,表述了语言的形式,或者说语言的样子和结构,也被称为语法规则。根据语法规则可以识别记号流中的语言结构,也被称为语法分析。
语义揭示了语言本身的含义、施加于语言结构上的限制或要执行的动作。
例如“猫吃老鼠”和“老鼠吃猫”都是语法正确的句子,但后者表述的语义不对
二、第二章:词法分析器
1.说明 DFA 与 NFA 的主要差异
(1)DFA 上没有 ε转移;
(2)DFA 在任一状态下,对于任一输入,其下一状态最多仅有一个。
【可选】(3)这两方面使得 NFA 的最大特点是其不确定性,而 DFA 的最大特点是确定性。
2.词法分析器的作用
【是绿除掉】
- 识别记号并交给语法分析器
- 滤掉源程序中的无用成分
- 处理与具体平台有关的输入
- 调用符号表管理器或出错管理器
三、第三章:语法分析
1.说明消除文法二义性的方法有哪些
(1)改写二义文法为非二义文法
(2)为文法中的符号规定优先级与结合性。
2.语法分析器在编译器中应完成什么任务?
- 语法分析器根据语法规则识别出记号流中的结构,并构造一棵能够正确反映该结构的语法树。
- 检查输入中的错误,调用出错管理器进行适当处理。
四、语法制导
1.简要说明在编译过程中引入中间代码的好处,以及中间代码应具有的特点。
好处主要有两点:
- 一是便于编译程序的开发和移植;
- 二是便于对代码进行优化处理。
特点:
- 便于语法制导翻译;
- 既与机器指令的结构相近, 又与具体机器无关。
2.语法制导翻译过程中使用的拉链-回填技术
拉链-回填技术是语法制导翻译过程中使用的一种基本技术,
其基本思想是当三地址码中的转向不确定时,将所有转向同一地址的三地址码拉成一个链;而一旦所转向的地址被确定,则为此链上所有的三地址码回填入此地址。
3.符号表的作用是什么?符号表上的操作主要有哪些?
作用:【联机版】
- 连接声明和引用的桥梁
- 记住每个符号的相关信息,如作用域和绑定等
- 帮助编译的各个阶段正确有效地工作
符号表上的操作:
(增删查改)查找、插入、删除、修改
4.控制栈中的活动记录保存的信息有什么?具体内容有什么?
活动记录保存的有控制信息和访问信息。
具体内容:【仓库发电功率】
- 参数与返回值
- 控制链(可选)
- 访问链(可选)
- 调用时需要保存的机器状态
- 过程内部声明的数据
- 临时变量