资源描述:
《编译原理LR分析法ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、7自底向上分析(Bottom-upParsing)——LR分析器17.1LR分析器——自底向上分析(Bottom-upParsing)“L”:left-to-rightscanning自左向右扫描“R”:rightmostderivationinreverse最右推导的逆5.3.4.1LR分析方法概述5.3.4.2LR(0)分析器5.3.4.3SLR(1)分析器5.3.4.4LR(1)分析器5.3.4.5LALR(1)分析器27.1.1LR(0)分析器例:考虑文法G[S]SaAAcA
2、d识别ac
3、cd是否该文法的句子。Ac.AA.cAA.ds2Sa.AA.cAA.ds1S.aAs0startAcA.s4SaA.s5Ad.s3AddAcac3Ac.AA.cAA.ds2Sa.AA.cAA.ds1S.aAs0startAcA.s4SaA.s5Ad.s3AddAcacs0accd#shifts0as1ccd#shifts0as1cs2cd#shifts0as1cs2cs2d#shifts0as1cs2cs2ds3#reduceAds0as1cs2cs2As4#
4、reduceAcAs0as1cs2As4#reduceAcAs0as1As5#reduceSaAs0S#accept动作acton栈G[S]:1:SaA2:AcA3:Adaccd∈L(G[S])?4根据上述例子,可以总结如下:一、概念产生式右部符号被识别的多少,在产生式右部加上‘.’指示位置。项目:在文法产生式右部某个位置标有‘.’的产生式,称为文法的一个LR(0)项目。为了叙述方便,形如A.的项目称为归约项目;形如A.B的项目称为待约项目(基本项目);形如A.a的项目称为
5、移进项目。5定义(有效项目):项目A1.2对活前缀=1是有效的,如果存在规范推导S*Aw12w。若项目A1.B2对活前缀=1是有效的,且B是产生式,则项目B.对活前缀=1也是有效的。据假设,存在一个规范推导S*Aw1B2w设2w*xw,则对任何B有规范推导rmS*Aw1B2w1Bxw1xw所以B.对活前缀1也是有效的。:伽马:艾塔6定义(有效项目集,项目集规范族):文法G的某个活前缀的所有有效
6、项目组成的集合,称为活前缀的LR(0)有效项目集。文法G的所有有效项目集组成的集合,称为G的LR(0)项目集规范族。7定义(项目闭包):设I是文法G的一个LR(0)项目集合,I的项目闭包closure(I)定义如下:1、Iclosure(I)。2、若项目A.Bclosure(I),且B是G的产生式,则项目B.closure(I)。3、closure(I)仅包含上述两条规则确定的LR(0)项目。8定义(转移函数):若I是文法G的一个LR(0)项目集,X是G中的文法符号。定义go(I
7、,X)=closure(J)其中J={AX.
8、A.XI}称函数go(I,X)为转移函数。项目AX.称为项目A.X后继。9二、识别句柄和活前缀的自动机若文法G=(VT,VN,S,P),则识别G的句柄的自动机为DFAM=(=VTVN,Q=G的LR(0)项目集规范族,q0=closure({S.S}),F=所有含归约项目的有效项目集组成的集合,=go(I,X))。若将所有状态均视为终态,则识别活前缀的自动机DFAM=(=VTVN,Q=G的LR(0)项目集规范族,q0
9、=closure({S.S}),F=Q,=go(I,X))。10定理:对于拓广文法G的每一个活前缀,它的有效项目集恰好是从识别G活前缀的自动机的初态出发,经过路径所到达的那个状态所代表的项目集合。11例:设拓广文法G[S]的产生式为:SSSaA
10、bBAcA
11、dBcB
12、dLR(0)项目集规范族I0:S.SS.aAS.bBI1:(I0,S)SS.I2:(I0,a)Sa.AA.cAA.dI3:(I0,b)Sb.BB.cBB.dI4:(I2,c)(I4,
13、c)Ac.AA.cAA.dI5:(I3,c)(I5,c)Bc.BB.cBB.dI6:(I2,A)SaA.I7:(I3,B)SbB.I8:(I4,A)AcA.I9:(I5,B)BcB.I10:(I4,d)Ad.I11:(I3,d)Bd.12Ac.AA.cAA.dI4Sa.AA.cAA.dI2Sb.BB.cBB.dI3Bc.BB.cBB.dI5S.SS.aAS.bBI0startSS.I1AcA.