* 编译原理第一章内容概述
* 编译原理第二章内容概述:上下文无关文法,最左推导,最右推导,语法分析树与文法的二义性
* 编译原理第三章内容概述:正规表达式与有限自动机(DFA与NFA)
* 编译原理第四章内容概述:LL(1)分析法
* 编译原理第五章内容概述:算符优先分析法
* 编译原理第六章内容概述:S-属性文法的自下而上计算
L-属性文法的自顶向下翻译
* 编译原理第七章内容概述:中间代码生成
第一章
各阶段的任务:
* 词法分析任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词。
* 语法分析任务:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。
* 语义分析与中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义并进行初步翻译。
* 优化阶段任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。
* 目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。
第二章
语法分析树与二义性
1.语法树的根结由开始符号所标记。
2.随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点
其父亲结点间都有一条连线。
3.在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。
例如对于文法 E→E+E|E*E|(E)|i, 关于(i*i+i)的推导形成语法树如图
语法树有不唯一性,如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。关于文法二义性的几个问题:
1.文法二义不等于语言二义
2.文法的二义性是不可判定的
3.文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导
4.文法二义性的消除:给每个产生式定义优先级
消除文法二义性的方法:定义优先级和结合性,引入新的非终结符,建立新的产生式。
形式语言鸟瞰:
* 0型文法(短语文法)
* 1型文法(上下文有关文法)
* 2型文法(上下文无关文法)
* 3型文法(右/左线性文法)
第三章
状态转换图
构造一个识别标识符的状态转换图
构造一个识别整数的状态转换图
识别实型常数的状态转换图
正规表达式与有限自动机
我们可以把具有相同特征的字放在一起组成一个集合,即所谓的正规集,然后使用一种形式化的方法来表示正规集,即所谓的正
规式。
[注]:
正规式是描述单词结构的一种形式;
正规集是该类单词的全集。正规式与正规集的定义(递归的定义方法):
(1)ε和φ是∑上的正规式,它们所表示的正规集分别为{ε}和φ
(2)任何a∈∑,是∑上的一个正规式,他所表示的正规集为{ a }
(3)假定U和V都是∑上的正规式,他们所表示的正规集分别记为L(U)和L(V),那么
(a) (U|V)是正规式,所表示的正规集为L(U)∪L(V)
(b) (UV)是正规式,所表示的正规集为L(U) · L(V)(连接积)
(c) (U)*是正规式,所表示的正规集为 (L(U))*(闭包)
仅由有限次使用(1)(2)(3)所得到的表达式才是∑上的正规式,仅由这些正规式所表示的字集才是∑上的正规集。
若两个正规式U和V所表示的正规集相同,则认为二者等价,记为: U = V
1.状态转换矩阵表示法
设DFA M = ({0,1,2,3},{a, b}, f, 0, {3}),其中
f: f(0, a) = 1, f(0, b) = 2 f(1, a) = 3, f(1, b) = 2 f(2, a) = 1, f(2, b) = 3 f(3, a) = 3, f(3, b) = 3
2.用状态转换图来表示
设DFA M = ({0,1,2,3},{a, b}, f, 0, {3}),其中
f: f(0, a) = 1, f(0, b) = 2 f(1, a) = 3, f(1, b) = 2 f(2, a) = 1, f(2, b) = 3 f(3, a) = 3, f(3, b) = 3
非确定的有限自动机
定义:一个非确定有限自动机(NFA)M是一个五元式
M = (S, ∑, f, S0, F),其中
* S是一个有限的状态集合,它的每个元素我们称为一个状态
* ∑是一个有限的输入符号的字母表,它的每个元素我们称为一个输入字符
* f是从S×∑*→2S 的部分映射,其中,2S表示S的幂集合(所有S的子集组成的集合)(f是非单值的M是非确定)
* 状态集合S0是初始状态集合,它是S的子集
* 状态集合F是终止状态的集合,它是S的子集
NFA M表示方法:
1.用状态矩阵表示
设NFA M = ({0,1,2},{a, b}, f, {0}, {1,2}),其中
f: f(0, aa) = 1, f(0, bb) = 2 f(0, a) = 0, f(0, b) = 0 f(1, a) = 1, f(1, b) = 1 f(2, a) = 2, f(2, b) = 2
2.用状态转换图表示
设NFA M = ({0,1,2},{a, b}, f, {0}, {1,2}),其中
f: f(0, aa) = 1,