1 / 39

第 6 章 自底向上语法分析

第 6 章 自底向上语法分析. 6.1 自底向上语法分析. 一、自底向上方法概述 自底向上方法:从给定终极符串进行归约,并归约成文法的初始符。. 移进 - 归约方法的四个动作 : 移进 : 输入流头符读到分析栈中 归约 : 分析栈句柄归约非终极符 接受 : 分析成功 报错 : 处理错误. 例子: 对输入串 abbcde 进行分析,检查该串是否是 G[S] 的句子。 G[S] : S→aAcBe A→b A→Ab B→d

kaoru
Download Presentation

第 6 章 自底向上语法分析

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 自底向上语法分析

  2. 6.1 自底向上语法分析 一、自底向上方法概述 自底向上方法:从给定终极符串进行归约,并归约成文法的初始符。 • 移进-归约方法的四个动作: • 移进:输入流头符读到分析栈中 • 归约:分析栈句柄归约非终极符 • 接受:分析成功 • 报错:处理错误

  3. 例子:对输入串abbcde进行分析,检查该串是否是G[S]的句子。例子:对输入串abbcde进行分析,检查该串是否是G[S]的句子。 G[S]: S→aAcBe A→b A→Ab B→d 对输入串abbcde的最右推导是:SaAcBeaAcdeaAbcdeabbcde SaAcBeaAcdeaAbcdeabbcde 所以移进-归约方法的分析过程如下:

  4. 步骤 符号栈 输入串 Action 1 # abbcde# 移进 2 #a bbcde# 移进 3 #ab bcde# 归约(A→b) 4 #aA bcde# 移进 5 #aAb cde# 归约(A→Ab) 6 #aA cde# 移进 7 #aAc de# 移进 8 #aAcd e# 归约(B→d) 9 #aAcB e# 移进 10 #aAcBe # 归约(S→aAcBe) 11 #S # 接受

  5. 例:考虑文法 G(E): E→T|E+T T→F|T*F F→i|(E) 并假定已给定终极符串(i+i)*i。下面是对该串的移入─归约过程: ( ,(i+i)*i) 1 =移=>(( , i+i)*i) 2 =移=>((i , +i)*i) 3 =归=>((F , +i)*i) 4

  6. =归=>((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

  7. =归=>(T , *i) 14 =移=>(T* , i) 15 =移=>(T*i , ) 16 =归=>(T*F , ) 17 =归=>(T , ) 18 =归=>(E , ) 19

  8. 设Si和Sj是文法的任意两个符号,那么它们在句型中相邻出现的充要条件是必须满足下列条件之一:设Si和Sj是文法的任意两个符号,那么它们在句型中相邻出现的充要条件是必须满足下列条件之一: 1.有形如U→SiSj的产生式 2.有形如U→SiW且WSj的产生式 3.有形如U→VSj且V Si的产生式的产生式 4.有形如U→VW且V Si和W Sj的产生式的产生式 + + + +     6.2 简单优先方法

  9. 定义了三种优先关系( , , )其定义如下: • Si Sj:当且仅当存在如下的产生式U→…SiSj… 例子:A→abABc,其中b与A相邻 b A • Si Sj:当且仅当存在如下产生式U→…SiW…,且有W Sj……) + 

  10. 例子:A→abABc B→bcd,其中A与b相邻 A b • Si Sj:当且仅当存在如下产生式 U→…VW…,且有V Si和W Sj……) 例子:A→abABc A→ccd B→bcb,其中d与b相邻 d b *  + 

  11. 当 Si Sj 当 Si Sj 当 Si Sj 空 否则 优先关系可用矩阵来表示,称这种矩阵为优先关系矩阵。 具体定义如下图: M[si,sj]

  12. FIRST(W)={S|W S,S(Vn∪Vt)} • LAST(W)={S|W S,S(Vn∪Vt)} + +   构造优先关系矩阵步骤: • STEP1:对每个非终极符号W求下面两种集合 • STEP2:对每个符号对Si,Sj填写优先关系矩阵。

  13.  b ( b a 第一步: ①Z→b M b  b M ②Z→b M b (… a… 例子:假设有文法 G[Z]: Z→bMb M→a|( L L→M a )

  14. 第二步: ①Z→b M b  M b ②Z→b M b …) …L …a  ) b L b a b

  15. Z M L b ( a ) Z M L b ( a )

  16. Z M L FIRST b ( a M ( a LAST b ) L a ) 所以对G[Z]: Z→bMb M→a|( L L→M a ) 有:FRIST(M)={ (,a } LAST(M)={ ),L,a } 有下表:

  17. E E + T T * F + T + T 定义3.13满足下面两个条件的文法称为简单优先文法。 1.任意两个符号至多成立一种关系 2.任意两个产生式具有不同右部 例子:G[Z]: E→E+T|T T→T*F|F F→(E)|i

  18. G2:E→E+T|T T→T*F|F F→(E)|i (其中( E,( E) 下面文法均不为简单优先文法 • G1:B→a D→a (有两个相同的右部)

  19. Si-1 Si,Si Si+1  Sj , Sj Sj+1,则SiSi+1Sj定为句柄。 例子:ZabCDc a b C D e 则bCD是句柄。 定理3.10设S1S2Sn是简单优先文法的规范句型,其子串SiSi+1Sj满足条件:

  20. Z M L b ( a ) Z M L b ( a ) 分析句子b( a a )b(文法G[Z])的过程:

  21. 分析栈 关系 输入流 归约符 # b(aa)b# # b(aa)b# #b (aa)b# #b(a a)b# #b(a a)b# M #b(M a)b# 移进项目的处理 移进项目的处理

  22. 分析栈 关系 输入流 归约符 # b(aa)b# #b (aa)b# #b( aa)b# #b(a a)b# M #b(M a)b# #b(Ma )b# #b(Ma) b# L #b(L b# M #bM b# #bMb # Z #Z # 停

  23. 6.3 算符优先方法 算符优先文法的定义   算符优先关系表的构造 算符优先分析算法 算符优先分析法的局限性

  24. 6.3.1 直观算符优先分析法 分析程序模型 • 自下而上分析算法 模型----移进归约 • 算符优先分析不是规范归约 输入串# 总控程序 输出 # 算符优先关系表 产生式

  25. 如何确定算符优先关系? 文法G[E]:E→E+E|E-E|E*E|E/E|EE|(E)|i 人为确定: (1)i的优先级最高 (1) 优先级次于i,右结合 (2)*和/优先级次之,左结合 (3)+和-优先级最低,左结合 (4)括号‘(’,‘)’的优先级大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号 (5)#的优先性低于与其相邻的算符 算符优先关系表

  26. 6.3.2 算符优先文法的定义 • 定义:如果不含空产生式的上下文无关文法 G 中没有形如 A…BC…的产生式,其中B,C∈VN 则称G 为算符文法(OG)。 例6.1 G[E]:E→E+E|E-|E*E|E/E|EE|(E)|i 例6.2 G’[E]: E→E+T|T T→T*F|F F→P↑F|P P→(E)|i 性质1:在算符文法中任何句型都不包含两个相邻的非终结符. 性质2:如 Ab或 bA 出现在算符文法的 句型  中,其中 A∈VN,b∈VT, 则  中任何 含 b的短语必含有A。

  27. 算符优先关系 在OG中 定义(算符优先关系) a = b G中有形如:A…ab… 或A  …aBb...的产生式。 a < b G中有形如: A …aB…的产生式, 而B b… 或B Cb… a > b G中有形如: A  …Bb…的产生 式,而B …a或 B … aC 规定若S a…或S Ca… 则#<a 若S …a或S …aC 则a>#

  28. 在OG文法G 中,若任意两个终结符间至多有一种算符优先关系存在,则称G 为算符优先文法(OPG)。 注意:允许b>c, c>b; 不允许 b>c, b<c, b=c中任两个同时存在。 b=c 不一定 c = b。 例6.1中:“(” = “)”,“)”<>“(”。 结论: 算符优先文法是无二义的。

  29. 6.3.3 算符优先关系表的构造 首先定义如下两个集合: FIRSTVT(B)={b|B b… 或 B Cb…} LASTVT(B)={a|B …a 或 B …aC} 按如下算法计算出给定文法中任何两个终结符对(a,b)之间的优先关系: 1) ‘=‘关系 • 直接看产生式的右部,若出现了A →…ab…或 A →…aBb,则a=b 2)’<‘关系 • 求出每个非终结符B的FIRSTVT(B) • 若A→…aB…,则b∈FIRSTVT(B),则a<b 3)’>’关系 • 求出每个非终结符B的LASTVT(B) • 若A→…Bb…,则a∈LASTVT(B),则a>b

  30. 计算算符优先关系 FIRSTVT(E’)={#}FIRSTVT(E)={+,*,,(,i}FIRSTVT(T)={*,,(,i}FIRSTVT(F)={,(,i}FIRSTVT(P)={(,i}LASTVT(E’)={#}LASTVT(E)={+,*,,),i}LASTVT(T)={*,,),i}LASTVT(F)={,),i}LASTVT(P)={),i} 例6.3 文法G’[E’]:(0) E’→#E#(1) E→E+T(2) E→T(3) T→T*F(4) T→F(5) F→PF|P(6) P→(E)(7) P→i

  31. (0)E’→#E# (1) E→E+T (2) E→T (3) T→T*F (4) T→F(5) F→PF|P (6) P→(E) (7) P→i 1)‘=’关系由产生式(0)和(6),得#=#, (= ) 3)‘>’关系找形如:A→…Bb…的产生式E#: 则 LASTVT(E)>#E+: 则 LASTVT(E)>+ T*: 则 LASTVT(T)>*P: 则 LASTVT(P)>E): 则 LASTVT(E)>) 2)‘<’关系找形如A→…aB…的产生式#E:则 #<FIRSTVT(E)+T: 则 +<FIRSTVT(T) *F: 则 *<FIRSTVT(F)F: 则 <FIRSTVT(F)(E: 则 (<FIRSTVT(E)

  32. 表达式文法G’[E’]的算符优先关表

  33. 6.3.4 算符优先分析算法 算符优先文法句型的性质 算符文法的任何一个句型应为如下形式: #N1a1N2a2 ... Nnan Nn+1# 其中N k(1≤k≤n+1)为非终结符或空,ak(1≤k≤n)为终结符 算符优先文法句型的最左素短语NiaiNi+1ai+1 ... Njaj Nj+1满足: ai-1< ai ai =ai+1 =…… =aj-1 =aj aj> aj+1 即:ai-1<ai=ai-1=...= aj-1 = aj> aj+1

  34. 算符优先分析的可归约 串是句型的最左素短语 定义 cfg(上下文无关文法) G 的句型的素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。处于句型最左边的素短语为最左素短语 文法G[S]短语的定义 SαAδ且A 则称是句型αδ相对于非终结符A的短语

  35. 例:有文法G[E]:(1) E→E+T(2) E→T(3) T→T*F(4) T→F(5) F→PF|P(6) P→(E)(7) P→i E E + T F E + T T T * F i 句型T+T*F+i其短语有:T+T*F+iT+T*FTT*Fi 素短语为:T*F, i 最左素短语为:T*F

  36. E E + T 句型T+T*F+i的语法树 F E + T T T * F i N 句型T+T*F+i进行算符优先分析时语法树的框架 N + N i N + N N * N 省略了E→T, E→T, E→T的规约

  37. 例:有文法G[E]:(1) E→E+T(2) E→T(3) T→T*F(4) T→F(5) F→PF|P(6) P→(E)(7) P→i E T E + F E + T i T 句型T+T+i的素短语为:T+T, I 最左素短语为T+T (注:T+T不是简单短语,但是素短语) E T E + 句型T+T+F的素短语为:T+T 最左素短语是T+T F E + T T

  38. 分析程序模型 输入串# 总控程序 输出 # 算符优先关系表 产生式

  39. 算符优先分析法 • 简单,直观,有利于表达式分析,易于手工实现 • 比规范归约快 • 可能导致把错误的句子得到正确的归约

More Related