第5章 自下而上语法分析方法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 算符优先分析法
1 算符文法和算符优先文法 2 FIRSTVT集和LASTVT集 3 算符优先关系表及优先函数 4 算符优先分析算法及其特点 5 算符优先分析中的出错处理
1、 算符文法和算符优先文法
(1)算符文法
如果一个文法G中的任何产生式的右部候选项都不含两个连续的非
终结符,即不含形如
P QR
1、 算符文法和算符优先文法
(2)终结符之间的关系
在下面的定义中,a、b代表任意的终结符;P、Q、R代表任意非终
结符;“…” 代表由终结符和非终结符组成的任意序列,包括空串。 假定G是一个不含ε产生式的算符文法,对任意一对终结符a,b,我们 定义: a=b,当且仅当文法G中含有形如P→…ab…或P→…aQb…的产生式;
串就是最左素短语。
所谓算符优先就是借鉴了表达式运算不同优先顺序的概念,在终结 符之间定义某种优先归约的关系,从而在句型中寻找可归约串。由于终
结符关系的定义和普通算术表达式的算符(如加减乘除)运算的优先关
系相似,所以得名算符优先分析方法。这种方法可以用于一大类上下文 无关文法,GNU GCC中的Java编译器GCJ就采用了算符优先分析方法。
概述语法分析器的自动产生工具
教学内容
5.1 自下而上分析的一般思想和面临的问题 5.2 算符优先分析法 5.3 LR分析法 5.4 语法分析器的自动产生工具——YACC 5.5 本章小结
5.1 自下而上分析的一般思想和面临的问题
1 归约和“移进-归约”分析法 2 短语、句柄和最左素短语
3 规范归约与规范推导 4 自下而上分析的核心问题和分析方法 5 语法分析栈的使用与语法树的表示
最左简单子树的叶子结点自左至右排列构成一个句柄。
2、 短语、句柄和最左素短语
【例5.2】 文法:
返回
E ET|T T T*F | F F (E) | i
E T T F i1 * ( F E E + T F i2 T F i3 )
计算句子i*(i+i)的所有短语、直接短语、 句柄、素短语和最左素短语。
指示分析的下一步动作。分析时,从左至右扫描输入符号串,并将输入符号
逐个移进分析栈中,边移进边分析,一旦栈顶出现可归约串(也就是栈的顶 端符号串形成某个产生的右部)时,就将这个可归约串归约为相应产生式的
左部,即把栈顶部构成可归约串的那个符号串用相应产生式的左部替代。接
着,再检查栈的顶部是否又形成了新的可归约串,若是,则再进行归约,若 未形成新的可归约串,则再从输入串中移进新的符号,如此继续下去,重复
(1)规范推导与规范句型
在形式语言中,最右推导通常被称为规范推导。由规范推导所得的
句型称为规范句型。
(2)规范归约
假定α是文法G的一个句子,如果序列
n , n 1 ,, 0
满足以下条件,则称这个序列是α的一个规范归约: ① αn=α; ② α0为文法的开始符号,即α0=S; ③ 对任何i,0<i≤n,αi-1是αi从经把句柄替换为相应产生式的左部符号而得
到的。
3、 规范归约与规范推导
容易看出,规范归约是关于α的一个最右推导的逆过程。因此,规范 归约也称为最左归约。如果文法G是无二义的,则规范推导和规范归约 是一个互逆过程。
(3)规范归约的实质
对于规范句型来说,句柄的后面不会出现非终结符号(即句柄的后 面只能出现终结符)。基于这一点,可用句柄来刻画“移进-归约”过程 中的“可归约串”。
第第55章章自下而上语法分析方法自下而上语法分析方法安庆师范学院计算机不信息学院安庆师范学院计算机不信息学院本章目标本章目标概述语法分析器的自动产生工具教学内容教学内容51自下而上分析的一般思想和面临的问题52算符优先分析法53lr分析法54语法分析器的自动产生工具yacc55本章小结5151自下而上分析的一般思想和面临的问题自下而上分析的一般思想和面临的问题归约和移进归约分析法11归约和移进归约和移进归约分析法归约分析法1归约所谓弻约就是推导的逆过程
返回
语法树
S
S AB A aAb
A A
B bB
B
B b c b B A a a A S #
分析栈
A ab
Bc
B c
a
ip
a
b
b
b
#
2、 短语、句柄和最左素短语
(1)短语和直接短语
令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句
型,如果有
*
S A
且
A
则称β是句型ɑβδ相对于非终结符A的短语。
规范归约的实质
在移进过程中,当发现栈顶呈现句柄时就用相应产生式的左部符号 进行替换。
规范归约的中心问题
如何寻找或确定一个句型的句柄。
3、 规范归约与规范推导
(4)修剪语法分析树寻找规范归约序列
【方法】
① 找出句子的一个推导,并画出语法树。 ② 将当前句型的句柄归约为相应产生式的左部,得到新的句型。 ③ 剪去语法树的最左简单子树的叶子结点和分支,保留根结。 ④ 重复步骤和,直至只剩下开始符号为止。
1、 归约和“移进-归约”分析法
(1)归约
所谓归约就是推导的逆过程。
若
A 是一条产生式,则
A
其中
A
推导 归约
*
A VN , , , (VT VN )
1、 归约和“移进-归约”分析法
(2)“移进—归约”分析法
我们所讨论的自下而上分析法是一种“移进-归约”法,其一般思想为: 采用一个寄存符号的先进后出栈,称为分析栈,用来保存分析的历史信息和
S aAcBe Ab A Ab Bd
4、 自下而上分析的核心问题和分析方法
S aAcBe Ab A Ab Bd
b和Ab都可 以是可归约 串,如何归 约? 方案一:按A→b 进行归约。 分析失败! #” 输入串已到“ ,而栈内并非 “#S”,因此, 分析失败!
语法树
S
方案二:按A→Ab 进行归约。 分析成功!
1、 归约和“移进-归约”分析法
开始
将#压入分析栈ຫໍສະໝຸດ Yes输入串扫描完否? No
Yes 输入串合法 报告分析成功
栈中只剩下 开始符号和#?
No
将下一个输入符号 移进分析栈
输入串非法 调用ERROR处理程序 栈顶出现 可归约串? Yes 结束 将可归约串归约为相 应产生式左部 No
1、 归约和“移进-归约”分析法
5、 语法分析栈的使用与语法树的表示
(1)“移进-归约”分析器基本构成
分析器一般由分析栈、分析表、分析程序和输入缓冲区组成。
(2)分析器的结构模型 成功结束 初始时刻 一般情形
输入串
a1
a2
......
an
#
Xm
分 析 栈
分析程序
输出
.....
X1 S #
分析表
5、 语法分析栈的使用与语法树的表示
3、 规范归约与规范推导
【例5.3】 设有文法:
S aAcBe Ab A Ab Bd
试通过修剪语法树的方法来分析句子abbcde的规范归约过程。
3、 规范归约与规范推导
S aAcBe Ab A Ab Bd
返回
S
a
规范推导: 规范归约:
A
c
B
e
S aAcBe aAcde aAbcde abbcde
(4)举例
【例5.1】 设有文法:
(1)S AB (2)A aAb (3)A ab (4)B bB (5)B c
给出输入串aabbbc的“移进-归约”分析过程。
1、 归约和“移进-归约”分析法
(1)S AB (2)A aAb (3)A ab (4)B bB (5)B c
以上分析过程,即一边移进一边归约,直至输入串分析完毕,此时,若栈中
只剩下文法的开始符号,则表明所分析的输入串是合法的,报告分析成功; 否则,输入串是不合法的。
1、 归约和“移进-归约”分析法
(3)算法流程
实际分析时,为了便于识别符号串,一般首先将“#”压入分析栈,当 分析成功时,分析栈中只剩下文法的开始符号和“#”。这里,将“#”作为 输入串的结束符,并非文法中的符号。
e B e d c B d c A b b A S a #
分析栈
A A a
ip
B b c d e #
b
4、 自下而上分析的核心问题和分析方法
(2)核心问题与分析方法
返回
核心问题:如何寻找或界定 “ 可归约串 ”?
自下而上分析方法
最左素短语
什么是可归约串?
句柄
非规范归约
规范归约
算符优先分析法
LR分析法
a<b,当且仅当G中含有形如P→…aR…的产生式,而 R b
或 R Qb ; a>b,当且仅当G中含有形如P→…Rb…的产生式,而 R a 或 R aQ 。
1、 算符文法和算符优先文法
(2)终结符之间的关系
【注意】
=、< 、> 称为算符优先关系(简称为优先关系),它们表示算符
*
这一条件。
2、 短语、句柄和最左素短语
(2)句柄
一个句型的最左直接短语称为该句型的句柄。
(3)素短语
所谓素短语是指这样的一个短语,它至少含有一个终结符,并且,
除它自身之外不再含任何更小的素短语。
(4)最左素短语
最左素短语是指处于句型最左边的那个素短语。
2、 短语、句柄和最左素短语
(5)通过语法分析树来寻找一个句型的短语、直接短语和句柄
S aAcBe aAcde aAbcde abbcde
A
b
b
d
4、 自下而上分析的核心问题和分析方法
(1)引例
自下而上分析是一种“移进-归约”分析法,在移进的过程中一旦发
现栈顶端出现“可归约串”,即进行“归约”。这里,我们认为可归约 串即为某个产生式的右部。 例如,针对以下文法,分析输入串abbcde的“移进-归约”过程。
编译原理
第5章 自下而上语法分析方法
安庆师范学院计算机与信息学院
本章目标
阐明自下而上语法分析的一般思想和面临的问题
讨论自下而上分析的核心问题及其分析方法
介绍短语、直接短语、句柄、素短语和最左素短语的概念及其求解方法 介绍算符文法和算符优先文法的概念 介绍FIRSTVT集和LASTVT集的含义及其构造方法 阐述算符优先分析算法并探讨其局限性 解释LR分析器的工作原理 介绍LR(0)分析表、SLR分析表、LR(1)分析表、LALR分析表的构造方法 简要介绍二义文法在LR分析中的应用
其中A∈VN,α,β,δ∈(VT∪VN)*。
2、 短语、句柄和最左素短语
(1)短语和直接短语
特别地,如果有
S A
且
*
A
则称β是句型ɑβδ相对于规则A→β的直接短语,也称为简单短语。
【注意】
作为“短语”的两个条件均是不可缺少的。仅仅有 A
,未必
意味着β就是句型αβδ的一个短语。因为,还需要 S A
(3)分析器的四种动作
移进:将输入串的一个符号移进分析栈。
归约:发现栈顶呈“可归约串”,并用适当的相应符号去替换这个串。 接受:宣布最终分析成功,可看作是归约的一种特殊形式。
报错:发现栈顶内容与输入串相悖,调用出错处理程序进行诊察和校正,
并对栈顶内容和输入符号进行调整。
(4)“移进-归约”分析法用栈实现的特点
子树和简单子树
语法树的子树是由该树的某个结点(称为子树的根)及其所有分支 构成的部分树称为原树的一棵子树。语法树的简单子树是只有单层分支 的子树——这棵子树只有且必须有父子两代,没有第三代。
2、 短语、句柄和最左素短语
(5)通过语法分析树来寻找一个句型的短语、直接短语和句柄
【结论】
每个句型(句子)都对应一棵语法树。 每棵语法树的叶子结点自左至右排列构成一个句型(句子)。 每棵子树的叶子结点自左至右排列构成一个相对于子树根的短语。 每棵简单子树的叶子结点自左至右排列构成一个直接短语。
的产生式,其中 P, Q, R VN ,则称该文法为算符文法。 根据以上定义,算符文法的句型的一般形式显然可写成:
[ N1 ]a1[ N2 ]a2 [ Nm ]am[ Nm1 ]
其中, ai VT (i 1,2,, m; ,可能出现也可能不出现。 ) Ni VN (i 1,2,, m 1)
文法G中任意两个终结符之间的关系,与非终结符无关。
可归约串必定位于栈顶,即可归约串之后就是剩余的输入串。 栈内符号串与剩余输入串正好构成一个句型。
(5)语法分析树的表示
具体实现时可以采用不同的数据结构,如“穿线表”方法。
作业5.1
返回
习题五(P150):
1(1)至(6) 3 4( 3)
5.2 算符优先分析法
算符优先分析是一种分析过程比较迅速的自下而上的分析方法,特 别适用于表达式的分析,易于手工实现。算符优先分析不是一种严格的 最左归约,即不是一种规范归约方法。在算符优先分析方法中,可归约
解:为了加以区分,对句子i*(i+i)中的i加上 下标,即i1*(i2+i3),其语法分析树如右图 所示。 ①短语:i1*(i2+i3),i1,(i2+i3),i2+i3,i2,i3 ②直接短语:i1,i2,i3 ③句柄:i1 ④素短语:i1,i2,i3 ⑤最左素短语:i1
3、 规范归约与规范推导