自底向上语法分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析栈 # #b #b( #b(a #b(M #b(Ma #b(Ma) #b(L #bM #bMb #Z
关系
输入流 b(aa)b#
(aa)b# aa)b#
a)b# a)b#
)b# b# b# b#
# #
归约符
M
L M
Z
停
6.3 算符优先方法
算符优先文法的定义 算符优先关系表的构造 算符优先分析算法 算符优先分析法的局限性
1.有形如U→SiSj 2.有形如U→SiW
的产生式 且W+ Sj的产生式
3.有形如U→VSj 且V +Si的产生式的
产生式
4.有形如U→VW 且V+ Si和W+ Sj的
产生式的产生式
定义了三种优先关系( , , )其定义 如下:
• Si Sj:当且仅当存在如下的产生式 U→…SiSj…
例子:A→abABc,其中b与A相邻 b A
•US→i …SSji:W当…,且且仅有当W存+ 在S如j…下…)产生式
例子:A→abABc B→bcd,其中A与b相邻 A b
•US→i …SVj:W当…,且且仅有当V+存在Si如和下W*产S生j…式…)
例子:A→abABc A→ccd B→bcb,其中d与b相邻 d b
优先关系可用矩阵来表示,称这种矩 阵为优先关系矩阵。
( ,(i+i)*i) 1 =移=>(( , i+i)*i) 2 =移=>((i , +i)*i) 3 =归=>((F , +i)*i) 4
=归=>((T , +i)*i) 5 =归=>((E , +i)*i) 6 =移=>((E+ , i)*i) 7 =移=>((E+i , )*i) 8 =归=>((E+F , )*i) 9 =归=>((E+T , )*i) 10 =归=>((E , )*i) 11 =移=>((E) , *i) 12 =归=>(F , *i) 13
例子:ZabCDc a b C D e 则bCD是句柄。
分析句子b( a a )b(文法G[Z])的过程:
ZML b ( a ) Z M L b ( a )
移进项目的处理
分析栈 # # #b
关系
输入流 b(aa)b# b(aa)b#
(aa)b#
归约符
移进项目的处理
#b(a #b(a #b(M
a)b# a)b# M a)b#
G[S]: S→aAcBe A→b A→Ab B→d
对输入串abbcde的最右推导是: SaAcBeaAcdeaAbcdeabbcde SaAcBeaAcdeaAbcdeabbcde
所以移进-归约方法的分析过程如下:
步骤 符号栈 1# 2 #a 3 #ab 4 #aA 5 #aAb 6 #aA 7 #aAc 8 #aAcd 9 #aAcB 10 #aAcBe 11 #S
E Biblioteka BaiduT
+T +T
T *F
下面文法均不为简单优先文法
❖ G1:B→a D→a (有两个相同的右部)
❖ G2:E→E+T|T T→T*F|F F→(E)|i (其中( E,( E)
定理3.10 设S1S2Sn是简单优先文法的 规范句型,其子串SiSi+1Sj满足条件:
Si-1 Si,Si Si+1 Sj , Sj Sj+1,则SiSi+1Sj定为句柄。
的运算符,小于括号内的运算符, 内括号的优先性大于外括号 (5)#的优先性低于与其相邻的算符
=归=>(T , *i) 14 =移=>(T* , i) 15 =移=>(T*i , ) 16 =归=>(T*F , ) 17 =归=>(T , ) 18 =归=>(E , ) 19
6.2 简单优先方法
设Si和Sj是文法的任意两个符号,那 么它们在句型中相邻出现的充要条件是
必须满足下列条件之一:
具体定义如下图:
M[si,sj]
当 Si Sj 当 Si Sj 当 Si Sj
空 否则
构造优先关系矩阵步骤:
* STEP1:对每个非终极符号W求下面
两种集合
➢ ➢
FIRST(W)={S|W+ LAST(W)={S|W+
S,S(Vn∪Vt)} S,S(Vn∪Vt)}
* STEP2:对每个符号对Si,Sj填写优 先关系矩阵。
输入串
Action
abbcde# 移进
bbcde# 移进
bcde# 归约(A→b)
bcde# 移进
cde# 归约(A→Ab)
cde# 移进
de# 移进
e# 归约(B→d)
e# 移进
# 归约(S→aAcBe)
# 接受
例:考虑文法 G(E): E→T|E+T T→F|T*F F→i|(E)
并假定已给定终极符串(i+i)*i。下面是 对该串的移入─归约过程:
例子:假设有文法 G[Z]: Z→bMb M→a|( L L→M a )
第一步: ① Z→b M b b M
②Z→b M b
b (
(… a…
ba
第二步: ① Z→b M b
M b
②Z→b M b
…) …L …a
) b L b a b
ZML b ( a ) Z M L b ( a )
所以对G[Z]: Z→bMb M→a|( L L→M a )
有:FRIST(M)={ (,a } LAST(M)={ ),L,a } 有下表:
Z FIRST b
LAST b
M (a
)La
L M(a
)
定义3.13 满足下面两个条件的文法称为 简单优先文法。
1.任意两个符号至多成立一种关系 2.任意两个产生式具有不同右部
例子:G[Z]: E→E+T|T E T→T*F|F F→(E)|i
6.3.1 直观算符优先分析法
• 自下而上分析算法 模型----移进归约 • 算符优先分析不是规范归约
分析程序模型
输入串#
总控程序
输出
# 算符优先关系表 产生式
如何确定算符优先关系?
文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i
人为确定:
(1)i的优先级最高 (1) 优先级次于i,右结合 (2)*和/优先级次之,左结合 (3)+和-优先级最低,左结合 (4)括号‘(’,‘)’的优先级大于括号外
第6章 自底向上语法分析
6.1 自底向上语法分析
一、自底向上方法概述 自底向上方法:从给定终极符串进行
归约,并归约成文法的初始符。
移进-归约方法的四个动作: ➢ 移进:输入流头符读到分析栈中 ➢ 归约:分析栈句柄归约非终极符 ➢ 接受:分析成功 ➢ 报错:处理错误
例子:对输入串abbcde进行分析,检查该 串是否是G[S]的句子。