《精品课程《编译原理第6章自底向上语法分析》PPT课件.ppt》由会员分享,可在线阅读,更多相关《精品课程《编译原理第6章自底向上语法分析》PPT课件.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6章章自底向上语法分析自底向上语法分析6.1 6.1 自底向上语法分析自底向上语法分析一、自底向上方法概述 自底向上方法:从给定终极符串进行归约,并归约成文法的初始符。移进-归约方法的四个动作:移进:输入流头符读到分析栈中 归约:分析栈句柄归约非终极符 接受:分析成功 报错:处理错误 例子:对输入串abbcde进行分析,检查该串是否是GS的句子。GS:SaAcBe Ab AAb Bd对输入串abbcde的最右推导是:SaAcBeaAcdeaAbcdeabbcdeSaAcBeaAcdeaAbcdeabbcde所以移进-归约方法的分析过程如下:移进e#aAcB9归约(Bd)e#aAcd8移进d
2、e#aAc7移进cde#aA6归约(AAb)cde#aAb5移进bcde#aA4归约(Ab)bcde#ab3移进bbcde#a2移进abbcde#1Action 输入串 符号栈 步骤 归约(SaAcBe)#aAcBe10接受#S11例:考虑文法 G(E):ET|E+T TF|T*F Fi|(E)并假定已给定终极符串(i+i)*i。下面是对该串的移入归约过程:(,(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)
3、9=归=(E+T ,)*i)10=归=(E ,)*i)11=移=(E),*i)12=归=(F ,*i)13=归=(T ,*i)14=移=(T*,i)15=移=(T*i ,)16=归=(T*F ,)17=归=(T ,)18=归=(E ,)19 设Si和Sj是文法的任意两个符号,那么它们在句型中相邻出现的充要条件是必须满足下列条件之一:1.有形如USiSj 的产生式2.有形如USiW 且W Sj的产生式3.有形如UVSj 且V Si的产生式的产生式4.有形如UVW 且V Si和W Sj的产生式的产生式+6.2 6.2 简单优先方法简单优先方法 定义了三种优先关系(,)其定义如下:Si Sj:当且仅
4、当存在如下的产生式USiSj 例子:AabABc,其中b与A相邻 b A Si Sj:当且仅当存在如下产生式USiW,且有W Sj)+例子:AabABc Bbcd,其中A与b相邻 A b 例子:AabABc Accd Bbcb,其中d与b相邻 d b Si Sj:当且仅当存在如下产生式 UVW,且有V Si和W Sj)+*优先关系可用矩阵来表示,称这种矩阵为优先关系矩阵。具体定义如下图:Msi,sj当 Si Sj当 Si Sj当 Si Sj空否则*STEP2:对每个符号对Si,Sj填写优先关系矩阵。构造优先关系矩阵步骤:*STEP1:对每个非终极符号W求下面两种集合 FIRST(W)=S|W
5、S,S(VnVt)LAST(W)=S|W S,S(VnVt)+例子:假设有文法 GZ:ZbMb Ma|(L LM a)第一步:Zb M b b M Zb M b(a b (b a第二步:Zb M b M b Zb M b)La)b L b a b)a(bLMZ)a(bLMZ所以对GZ:ZbMb Ma|(L LM a)有:FRIST(M)=(,a LAST(M)=),L,a 有下表:)L abLASTM(a(abFIRSTLMZ定义3.13 满足下面两个条件的文法称为简单优先文法。1.任意两个符号至多成立一种关系 2.任意两个产生式具有不同右部 例子:GZ:EE+T|T TT*F|F F(E)|
6、i EE+TT*F+T +T下面文法均不为简单优先文法 v G1:Ba Da(有两个相同的右部)v G2:EE+T|T TT*F|F F(E)|i(其中(E,(E)定理3.10 设S1S2Sn是简单优先文法的规范句型,其子串SiSi+1Sj满足条件:Si-1 Si,Si Si+1 Sj,Sj Sj+1,则SiSi+1Sj定为句柄。例子:ZabCDe a b C D e 则bCD是句柄。+试用简单优先方法分析符号串b(a a)b 是否为该文法的句子。例:设有GZ:ZbMb Ma|(L LM a)分析句子b(a a)b的过程:)a(bLMZ)a(bLMZ(aa)b#bb(aa)b#b(aa)b#归
7、约符 输入流 分析栈 关系 a)b#b(aMa)b#b(aa)b#b(M移进项目的处理移进项目的处理b#bMMb#b(LLb#b(Ma)b#b(Maa)b#b(MMa)b#b(aaa)b#b(aa)b#bb(aa)b#归约符 输入流 分析栈 Z#bMb停#Z关系 算符优先文法的定义算符优先文法的定义算符优先关系表的构造算符优先关系表的构造算符优先分析算法算符优先分析算法算符优先分析法的局限性算符优先分析法的局限性6.3 6.3 算符优先方法算符优先方法分析程序模型分析程序模型总控程序算符优先关系表产生式输入串#输出6.3.1直观算符优先分析法直观算符优先分析法自下而上分析算法自下而上分析算法模
8、型模型-移进归约移进归约算符优先分析不是规范归约算符优先分析不是规范归约如何确定算符优先关系?如何确定算符优先关系?人为人为确定:确定:(1 1)i i的优先级最高的优先级最高(1 1)优先级次于优先级次于i i,右结合,右结合(2 2)*和和/优先级次之,左结合优先级次之,左结合(3 3)+和和-优先级最低,左结合优先级最低,左结合(4 4)括号)括号(,)(,)的优先级大于的优先级大于括号外的运算符,小于括号内的运括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号算符,内括号的优先性大于外括号(5 5)#的优先性低于与其相邻的算符的优先性低于与其相邻的算符文法文法GE:EE+E|
9、E-E|E*E|E/E|E E|(E)|i算符优先关系表算符优先关系表6.3.2算符优先文法的定义算符优先文法的定义定义定义:如果不含空产生式的上下文无关文法:如果不含空产生式的上下文无关文法 G G 中没中没有形如有形如 A ABCBC的产生式,其中的产生式,其中B B,CVCVN N 则称则称G G 为算符文法(为算符文法(OGOG)。)。例例6.1 GE:EE+E|E-|E*E|E/E|E E|(E)|i例例6.2 GE:EET|TTT*F|FFPFPP(E)|i性质性质1 1:在算符文法中任何句型都不包含两个相邻的非终结符:在算符文法中任何句型都不包含两个相邻的非终结符.性质性质2 2
10、:如:如 A Ab b 或或 b bA A 出现在算符文法的出现在算符文法的 句型句型 中,其中中,其中 AVAVN N,b bV VT T,则则 中任何中任何 含含 b b 的短语必含有的短语必含有A A。算符优先关系算符优先关系在在OG中中 定义定义(算符优先关系)(算符优先关系)a=bG中有形如中有形如:Aab 或或AaBb.的产生式。的产生式。abG中有形如中有形如:ABb的产生的产生 式式,而而Ba或或 BaC 规定规定若若Sa或或SCa则则#在在OG文法文法G中,若中,若任意两个终结符间至多有任意两个终结符间至多有一种一种算符优先关系存在,则称算符优先关系存在,则称G为为算符优先文
11、算符优先文法法(OPG)。注意:允许注意:允许bc,cb;不允许不允许bc,bc,b=c中中任两个任两个同时同时存在。存在。b=c不一不一定定 c=b。例例6.1中:中:“(”=“)”,“)”“(”。结论结论:算符优先文法是无二义的。算符优先文法是无二义的。6.3.3算符优先关系表的构造算符优先关系表的构造首先定义如下两个集合:首先定义如下两个集合:FIRSTVT(B)=bBb或或BCbLASTVT(B)=aBa或或BaC按如下算法计算出给定文法中任何两个终结符对按如下算法计算出给定文法中任何两个终结符对(a,b)之间的之间的优先关系:优先关系:1)=关系关系直接看产生式的右部,若出现了直接看
12、产生式的右部,若出现了A ab或或 A aBb,则则a=b 2)关系关系求出每个非终结符求出每个非终结符B的的FIRSTVT(B)若若AaB,则则 bFIRSTVT(B),则则a关系关系求出每个非终结符求出每个非终结符B的的LASTVT(B)若若ABb,则则 aLASTVT(B),则则ab计算算符优先关系计算算符优先关系例例6.3 文法文法GE:(0)E#E#(1)EE+T(2)ET(3)TT*F(4)TF(5)FP F|P(6)P(E)(7)PiFIRSTVT(E)=#FIRSTVT(E)=+,*,(,iFIRSTVT(T)=*,(,iFIRSTVT(F)=,(,iFIRSTVT(P)=(,
13、iLASTVT(E)=#LASTVT(E)=+,*,),iLASTVT(T)=*,),iLASTVT(F)=,),iLASTVT(P)=),i(0)E#E#(1)EE+T(2)ET(3)TT*F(4)TF(5)FP F|P (6)P(E)(7)Pi3)关系关系找形如:找形如:ABb的产生式的产生式E#:则则 LASTVT(E)#E+:则则 LASTVT(E)+T*:则则 LASTVT(T)*P:则则 LASTVT(P)E):则则 LASTVT(E)2)关系关系找形如找形如AaB的产生式的产生式#E:则:则#FIRSTVT(E)+T:则则+FIRSTVT(T)*F:则则*FIRSTVT(F)F:
14、则则 FIRSTVT(F)(E:则则(FIRSTVT(E)1)=关系关系由产生式由产生式(0)和和(6),得得#=#,(=)表达式文法表达式文法GE的算符优先关表的算符优先关表6.3.4算符优先分析算法算符优先分析算法 算符优先文法句型的性质算符文法的任何一个句型应为如下形式:N1a1N2a2.Nnan Nn+1其中N k(1kn+1)为非终结符或空,ak(1kn)为终结符算符优先文法句型的最左素短语NiaiNi+1ai+1.Njaj Nj+1满足:ai-1 aiai=ai+1=aj-1=ajaj aj+1即:即:a ai-1i-1 a aj+1j+1算符优先分析的算符优先分析的可归约可归约串
15、串是是句型的句型的最左素短语最左素短语定义定义 cfg cfg(上下文无关文法)(上下文无关文法)G G 的句型的的句型的素短语素短语是一个短语,它是一个短语,它至少包含一个终至少包含一个终结符结符,且除自身外,且除自身外不再包含其他素短语不再包含其他素短语。处于句型最左边的素短语为处于句型最左边的素短语为最左素短语最左素短语文法文法GS短语的定义短语的定义 S A且且A 则称则称是句型是句型相对于非相对于非终结符终结符A的的短语短语例:有文法例:有文法GE:(1)EE+T(2)ET(3)TT*F(4)TF(5)FP F|P(6)P(E)(7)Pi1.画出句型画出句型T+T*F+i的语法树并写
16、出改句型的所有短语。的语法树并写出改句型的所有短语。2.写出句型写出句型T+T*F+i的简单短语和句柄。的简单短语和句柄。3.写出句型写出句型T+T*F+i的素短语和最左素短语。的素短语和最左素短语。文法文法GE:(1)EE+T(2)ET(3)TT*F(4)TF(5)FP F|P(6)P(E)(7)Pi句型句型T+T*F+i其短语有:其短语有:T+T*F+iT+T*FTT*FiEET+ET*FTTi最左素短语为最左素短语为:T*FF素短语为素短语为:T*F,i简单短语为简单短语为:T,T*F,i句柄为句柄为:T句型句型T+T*F+i的语法树的语法树EET+ET*FTTi 句型句型T+T*F+i
17、进进行算符优先分析时语行算符优先分析时语法树的框架法树的框架FNNN+NN*NNi 省略了省略了ET,ET,ET的规约的规约F句型句型T+T+F的素短语为的素短语为:T+T最左素短语是最左素短语是T+TE+TE句型句型T+T+i的素短语为的素短语为:T+T,I最左素短语为最左素短语为T+T(注:注:T+T不是简单短语,但是素短语)不是简单短语,但是素短语)ETT例:有文法例:有文法GE:(1)EE+T(2)ET(3)TT*F(4)TF(5)FP F|P(6)P(E)(7)PiFE+TEETTi分析程序模型分析程序模型 总控程序算符优先关系表产生式输入串#输出算符优先分析法算符优先分析法简单,直观,有利于表达式分析,易于简单,直观,有利于表达式分析,易于手工实现手工实现比规范归约快比规范归约快可能导致把错误的句子得到正确的归约可能导致把错误的句子得到正确的归约