3.4 自下而上分析
3.4.1 归约
3.4.2 句柄
句型的句柄是和**某产生式右部匹配**的**子串**,并且,把它归约成该产生式左部的非终结符代表了**最右推导过程的逆过程的一步**。
S → aABe
A → Abc | b
B → d
句柄的右边仅含终结符
如果文法二义,那么句柄可能不唯一
3.4.3 用栈实现移进-归约分析
移进-归约分析器在分析输入串id1 * id2 + id3时的动作序列:
3.5 LR分析器
本节介绍LR(k)分析技术
特点
适用于一大类上下文无关文法
效率高
主要介绍构造LR分析表的三种技术
简单的LR方法(简称SLR)
规范的LR方法
向前看的LR方法(简称LALR)
3.5.1 LR分析算法
3.5.2 LR文法和LR分析方法的特点
1、概念
活前缀:右句型的前缀,该前缀不超过最右句柄的右端
2、定义
LR文法:我们能为之构造出所有条目都唯一的LR分析表
3、LR分析方法的特点
-
栈中的文法符号总是形成一个活前缀
-
分析表的转移函数本质上是识别活前缀的DFA
-
栈顶的状态符号包含了确定句柄所需要的一切信息
-
是已知的最一般的无回溯的移进归约方法
-
能及时发现语法错误
-
手工构造分析表的工作量太大
4、LR分析方法和LL分析方法的比较
3.5.3 构造SLR分析表
术语:LR(0)项目(简称项目)
-
在右部的某个地方加点的产生式
-
加点的目的是用来表示分析过程中的状态
构造SLR分析表的两大步骤
1、从文法构造识别活前缀的DFA
2、从上述DFA构造分析表
具体步骤
1、从文法构造识别活前缀的DFA
1)拓广文法
E → E
E → E + T | T
T →T * F | F
F →( E ) | id
2)构造LR(0)项目集规范族