第一章
基本概念
一些语言
- 自然语言:人与人交流的语言
- 高级程序设计语言:目前人控制计算机的语言
- 机器语言:最早的程序设计语言(计算机直接执行的语言)
- 翻译:从高级程序设计语言到机器语言的转换
- 编译方式:先翻译,后执行
- 解释方式:边翻译,边执行
编译器的工作流程
- 词法分析
输入源程序,输出待检查的单词符号串,目的是将程序分解为单词。 - 语法分析
输入待检查的单词符号串,输出语法树,目的是得到语法结构并以树的形式表示 - 语义分析
根据语义规则对语法树中的语法单元进行检查,如x→a,x和a的类型是否一致 - 中间代码生成
生成一种既接近目标语言,又与具体机器无关的表示,便于代码优化与代码生成 - 中间代码优化
优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效 - 目标代码生成
将中间代码转换为等价的目标代码,即机器指令或汇编指令
题型
概念解释
第二章
基本概念
符号串
- 符号:字母a,b,c
- 符号串:符号串的有穷序列
- 符号串集合:多个符号串组成的集合
符号串集合的运算
- 乘法
- 方幂
- 正闭包
- 自反闭包
文法
- 产生式:α→β,表示α与β能互相转换
- 文法:(终结符,非终结符,产生式,开始符号)
根据对产生式的限制程度将文法分成四类 - 0型文法(短语文法):无要求
A→a
- 1型文法(上下文有关文法):产生式左部符号个数 <= 右部符号个数
α1Aα2→α1βα2
- 2型文法(上下文无关文法):满足1,且产生式左部必须是非终结符
A→bc
- 3型文法(正规文法):满足2,且必须是一个非终结符→一个终结符,或一个非终结符带上一个终结符
注意 后者分两种情况:
A→a | aB (右线性) 、 A→a | Ba (左线性)
推导
- 直接推导:n=1
- 推导(+推导):根据产生式,将一个符号串经过n步(n>0)转换成另外一个符号串。
- ×推导:n>=0
- 最左推导:任何一步推导,替换掉的都是式子左部的 最左非终结符
E -> E + T-> T + T
- 最右推导(规范推导):任何一步推导,替换掉的都是式子左部的 最右非终结符
E -> E + T-> E + T * F
句型
- 句型:文法G的×推导都是G的句型(当然包括识别符号S)
- 句子:将句型中的符号限定为终结符 即为文法G的句子
- 语言:文法G所有句子的集合 即为文法G的语言
三者关系:句型类似语法结构+具体单词,如主谓宾,apple;句子只包括具体的单词;语言类似完整的一句话。
语法树/产生式树
- 语法树:文法G的任何一个句型都有对应的语法树
- 产生式树:根据产生式一步步画出句型的语法树
分析方法
- 目的:判断一个符号串是否属于文法的句型或句子;
- 自上而下分析:由根结点向下扩展,看最后形成的语法树所有叶子节点从左到右构成的符号串是否是待检查的符号串;
- 确定的自上而下分析:产生式右部最左边的终结符不同,避免了回溯;
- 自下而上分析:由带检查的符号串向识别符方向进行归约;
题型
- 文法语言的互化:由文法求语言,语言用集合或自然语言表示;由语言求文法,先写四元组的框架,再写产生式
- 判断符号串是否合法,并画出语法树
- 二义性的判断:有二义性,画出两种语法树;无二义性,答具有唯一推导过程即可
注意:产生式右部的最左终结符相同时会出现二义性
第三章
概念
正规表达式
- 正规语言:三型文法的所有句子的集合
- 正规集:即正规语言
- 正规表达式:用运算表达式描述正规语言;优先级:闭包*>连接·>或|
有穷自动机
- 有穷自动机FA:用状态转换图来描述正规语言
- 确定有穷自动机DFA
- 非确定有穷自动机NDFA
- 区别:NDFA的开始状态可能不唯一;NDFA的映射是多值映射,所以不确定
题型
- 确定化:NDFA→DFA
- 最小化(在确定化的基础上):DFA→DFA’
- 正规文法与FA的互化
- 正规表达式与FA的互化