后面图片上传不全,可以去下载区下载word版
期末考试基本情况:满分100分,卷面成绩低于50分自动判为最终成绩不及格
选择题(每小题 2 分,共 20 分)
填空题(每空 1 分,共 20 分)
简答题(每小题 4 分,共 20 分)
计算题(3 小题,共 40 分)
复习指南:
- 绪论
掌握教材中图1.1的概念
高级语言之间的翻译: 一般被称为转换(预处理)
高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程被称为编译。 从汇编语言到机器语言的翻译被称为汇编。高级语言是与具体计算机无关的,而汇编语言 和机器语言均是与计算机有关的。将一个汇编语言程序汇编为可在另一机器上运行的机器指令,称为交叉汇编,而建立在交叉汇编基础之上的编译模式,如首先将L2 编译成A2,再将 A2 汇编为MI有时也被称为交叉编译。 上述这些翻译模式一般被认为是正向工程。在一些特定情况下需要逆向工程,如把机器语言翻译成汇编语言,或者把汇编语言翻译成 高级语言,分别称它们为反汇编和反编译。
掌握解释与编译的相同与不同之处
-
- 编译器:工作效率高,即时间快、空间省;交互性与动态特性差、可移植性差。如C/C++等;
- 解释器:工作效率低,即时间慢、空间费;交互性与动态特性好、可移植性好。如Java、Python等;
掌握教材中图1.3的概念,清楚编译器各阶段的工作任务以及输入输出
- 词法分析:识别单词,至少分以下几大类:关键字(保留字)、标识符、字面量、特殊符号;
- 语法分析:得到语言结构并以树的形式表示;
- 语义分析:考察结构正确的句子是否语义合法,修改树结构;
- 中间代码生成(可选):生成一种既接近目标语言,又与具体机器无关的表示,便于优化与代码生成;
(到目前为止,编译器与解释器可以一致)
- 中间代码优化(可选):局部优化、循环优化、全局优化等;优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效。
- 目标代码生成:不同形式的目标代码-汇编、可重定位、内存形式(Load-and-Go);
- 符号表管理:合理组织符号,便于各阶段查找、填写等;
- 出错处理:错误的种类-词法错、语法错、静态语义错、动态语义错。
第二章:词法分析
模式、记号、单词的概念
一个单词究竟是标识符、关键字、字面量,还是特殊符号,需要根据 一定的构词规则来产生和识别。
模式(patten):产生和识别元素的规则
记号(token): 按照某个模式(或规则)识别出的元素(一组)
单词(lexeme):被识别出的元素自身的值(一个),也称为词值
语言、符号、符号串之间的关系
从词法分析的角度看程序设计语言,它是由记号组成的集合。
每个记号都是由若干字符按照一定规则组成的字符串。
正规式的定义,字符串集合的操作,正规式的简写
定义2.2 令Σ是一个有限字母表,则Σ上的正规式及其表示的集合递归定义如下:
1. ε是正规式,它表示集合L(ε)={ε}
2. 若a是Σ上的字符,则a是正规式,它表示集合L(a)={a}
3. 若正规式r和s分别表示集合L(r)和L(s),则
(a) r|s是正规式,表示集合L(r)∪L(s),
(b) rs是正规式,表示集合L(r)L(s),
(c) r*是正规式,表示集合(L(r))*,
(d)(r)是正规式,表示的集合仍然是L(r)。(加括弧改变优先级、结合性)
可用正规式描述的语言称为正规语言或正规集。
自动机的定义与不同表示方式
模式的描述―正规式
记号的识别―有限自动机(不确定、确定)
NFA是一个五元组(5-tuple):M =(S,∑,move,s0,F)
DFA是NFA的一个特例,其中:
(1)没有状态具有ε状态转移(ε-transition),即状态转换图中没有标记ε的边;
(2)对每个状态s和每个字符a,最多有一个下一状态
给出文法,构造其对应的DFA的方法,请参考第2章课后习题的解题方法
第三章:语法分析
推导与规约的概念
CFG(产生式)通过推导的方法产生语言。
将产生式左部的非终结符替换为右部的文法符号序列(展开产生式,用标记=>表示),直到得到一个终结符序列。
正规式与文法之间的转换与等价判断方法
消除文法左递归的方法
语言、文法、产生式、句子、句型的概念以及他们之间的关系
句子就是特殊的句型,由非终结符组合而成。句子的集合就是语言。
语法错误处理方法
- 紧急方式恢复:抛弃若干输入,直到遇到同步记号。
- 短语级恢复:采用串替换的方式对剩余输入进行局部纠正(抛弃+插入)。(用分号代替逗号,删除多余分号)
- 出错产生式:用出错产生式捕捉错误(预测错误)。预置型的短语级恢复方式。
- 全局纠正:对错误输入序列x,找相近序列y,使得x变换成y所需的修改、插入、删除次数最少。
0型、1型、2型与3型文法的定义与区别
给出文法,会求一个句子的短语、直接短语以及句柄
给出文法,会计算FIRST集与FOLLOW集
定义3.10 文法符号序列α的FIRST集合为:
FIRST(α)={a|α=*>a...,a∈T},若α=*>ε,则ε∈FIRST(α)。
定义3.11 非终结符A的FOLLOW集合如下:
FOLLOW(A)= { a |S=*>...Aa...,a∈T},若A是某句型的最右符号,则#∈FOLLOW(A)
α的FIRST集合就是从α开始可以导出的文法符号序列中的开头终结符。
而A的FOLLOW集合,就是从开始符号可以导出的所有含A的文法符号序列中紧跟A之后的终结符。
掌握构造识别文法活前缀的DFA的过程
自上而下语法分析方法,包括驱动器算法、分析表构造方法等。
自下而上语法分析方法,包括驱动器算法、分析表构造方法等。
第四章:静态语义分析
符号表的作用与结构
符号表的作用:连接声明与引用的桥梁,记住每个符号的相关信息,如作用域和绑定等,帮助编译的各个阶段正确有效地工作。
逻辑上讲:每个声明的名字在符号表中占据一行,称为一个条目,用于存放名字的相关信息。
符号表中的内容:保留字、标识符、特殊符号(包括算符、分隔符等)等等。
多个子表:不同类别的符号可以存放在不同的子表中,如变量名表、过程名表、保留字表等。
存放方式:名字+属性。
组合关键字:唯一区分一个条目的若干域。
三元式
三地址码: 一种简单而直观的中间代码表示形式,每个指令最多包含三个地址。例如,x = y + z 可以表示为 ADD x, y, z。
①三元式: (i) (op, arg1, arg2)
三地址码:(i) := arg1 op arg2
四元式
(op,arg1,arg2,result)
四元式是对三元式的改进,主要区别在于四元式引入了显式的临时变量来表示运算结果。这一改变的确使得四元式具有了更好的性质,尤其是在代码优化方面。
总的来说,四元式在代码的可读性、灵活性和优化方面都具有优势,因此在许多编译器中被广泛使用。
中缀式、后缀式
后缀式: 一种表达式的表示方法,操作符位于操作数之后,例如逆波兰表达式