编译原理-LR分析法.ppt
《编译原理-LR分析法.ppt》由会员分享,可在线阅读,更多相关《编译原理-LR分析法.ppt(54页珍藏版)》请在三一办公上搜索。
1、7 自底向上分析(Bottom-up Parsing),LR分析器,7.1 LR分析器 自底向上分析(Bottom-up Parsing),“L”:left-to-right scanning 自左向右扫描“R”:rightmost derivation in reverse 最右推导的逆,5.3.4.1 LR分析方法概述5.3.4.2 LR(0)分析器5.3.4.3 SLR(1)分析器5.3.4.4 LR(1)分析器5.3.4.5 LALR(1)分析器,7.1.1 LR(0)分析器,例:考虑文法GS S aA A cA|d 识别accd是否该文法的句子。,Ac.AA.cAA.d s2,Sa.
2、AA.cAA.d s1,S.aA s0,start,AcA.s4,SaA.s5,Ad.s3,A,d,d,A,c,a,c,Ac.AA.cAA.d s2,Sa.AA.cAA.d s1,S.aA s0,start,AcA.s4,SaA.s5,Ad.s3,A,d,d,A,c,a,c,s0 accd#shifts0as1 ccd#shifts0as1cs2 cd#shifts0as1cs2cs2 d#shifts0as1cs2cs2ds3#reduce Ad s0as1cs2cs2As4#reduce AcA s0as1cs2As4#reduce AcA s0as1As5#reduce SaA s0S#
3、accept,GS:1:S aA 2:A cA3:A daccdL(GS)?,根据上述例子,可以总结如下:一、概念 产生式右部符号被识别的多少,在产生式右部加上.指示位置。项目:在文法产生式右部某个位置标有.的产生式,称为文法的一个LR(0)项目。为了叙述方便,形如 A.的项目称为归约项目;形如 A.B 的项目称为待约项目(基本项目);形如 A.a 的项目称为移进项目。,定义(有效项目):项目A1.2对活前缀=1 是有效的,如果存在规范推导 S*Aw 12w。若项目 A1.B2 对活前缀=1 是有效的,且 B 是产生式,则项目 B.对活前缀=1 也是有效的。,据假设,存在一个规范推导S*Aw
4、1 B 2w设2w*xw,则对任何B 有规范推导 rm S*Aw 1 B 2w 1 B xw 1 xw所以 B.对活前缀 1 也是有效的。,:伽马:艾塔,定义(有效项目集,项目集规范族):文法G的某个活前缀的所有有效项目组成的集合,称为活前缀的LR(0)有效项目集。文法G的所有有效项目集组成的集合,称为G的LR(0)项目集规范族。,定义(项目闭包):设I是文法G的一个LR(0)项目集合,I的项目闭包closure(I)定义如下:1、I closure(I)。2、若项目A.B closure(I),且 B 是G的产生式,则项目B.closure(I)。3、closure(I)仅包含上述两条规则确
5、定的LR(0)项目。,定义(转移函数):若I是文法G的一个LR(0)项目集,X是G中的文法符号。定义 go(I,X)=closure(J)其中 J=A X.|A.X I 称函数go(I,X)为转移函数。项目A X.称为项目A.X后继。,二、识别句柄和活前缀的自动机,若文法G=(VT,VN,S,P),则识别G的句柄的自动机为DFA M=(=VTVN,Q=G的LR(0)项目集规范族,q0=closure(S.S),F=所有含归约项目的有效项目集组成的集合,=go(I,X)。若将所有状态均视为终态,则识别活前缀的自动机DFA M=(=VTVN,Q=G的LR(0)项目集规范族,q0=closure(S
6、.S),F=Q,=go(I,X)。,定理:对于拓广文法G的每一个活前缀,它的有效项目集恰好是从识别 G 活前缀的自动机的初态出发,经过 路径所到达的那个状态所代表的项目集合。,例:设拓广文法GS的产生式为:S S S aA|bB A cA|d B cB|d,Ac.AA.cAA.d I4,Sa.AA.cAA.d I2,Sb.BB.cBB.d I3,Bc.BB.cBB.d I5,S.SS.aAS.bB I0,start,SS.I1,AcA.I8,SaA.I6,Ad.I10,A,d,d,A,c,a,b,S,SbB.I7,BcB.I6,Bd.I11,B,d,d,B,c,c,c,识别文法活前缀的DFA,
7、LR(0)分析表,三、LR分析器的结构和工作过程,LR分析器的结构如图,它的工作过程由算法1描述。,输入,a1.ai.an#,LR驱动程序,分析表,输出,栈,smXmsm-1Xm-1.s0,图4.19 一个LR分析器的模型,action goto,算法1:LR分析算法,输入:一个输入串w和文法G的一张LR分析表M。输出:若w L(G),输出w的一个自底向上的分析;否则,输出一个出错表示。方法:分别置放s0到栈中和w#到输入缓冲器中;置ip指向w#的第一个符号;repeat forever begin 令s是栈顶状态且a是ip所指向的符号 if actions,a=shift s then be
8、gin 将a和s先后压入栈内;使ip指向输入串中的下一个符号;end,算法1:LR分析算法,else if actions,a=reduce A then begin 从栈顶弹出2*|个符号;令s是当前栈顶状态;把A和gotos,A先后入栈;输出产生式A end else if actions,a=accept then return else error()end,7.1.2 SLR(1)分析,若有效项目集中存在冲突动作:I=X.b,A.,B.,设当前输入符号为a,1.若a=b,则移进;2.若aFollow(A),则用A 进行归约;3.若aFollow(B),则用B 进行归约;4.其余情况报
9、错.,SLR分析算法,算法2(构造SLR分析表)输入:一个拓广文法G输出:对于G的分析表的action 子表和goto子表方法:1.构造G的LR(0)项目集规范族。2.对于状态Ii的分析动作如下:(a)若A.aB Ii且 go(Ii,a)=Ij actioni,a=shift j(b)若A.Ii,对于所有a Follow(A)actioni,a=reduce A,A S(c)若SS.Ii,actioni,#=accept3.若go(Ii,A)=Ij,AVN,则 gotoi,A=j4.分析表其余位置为error,SLR(SLR(1)算法:如果文法G按上述算法构造出的分析表不存在冲突动作,则称G为
10、SLR文法。类似地,不难定义LR(0)文法。,若将上述算法的2(b)步中的aFollow(A)改为aVT#,则由此修改后的算法所定义的文法,称为LR(0)文法。,问题.如何定义LR(0)文法?,例:设文法GE的产生式为,EE+T|T TT*F|F F(E)|id 并用SLR(1)方法分析id*id+idL(GE)?G的拓广文法GE:(0)E E(4)TF(1)EE+T(5)F(E)(2)ET(6)F id(3)TT*F,I0:E.E E.E+T E.T T.T*F T.F F.(E)F.idI1(I0 E):EE.EE.+TI2(I0 T)(I4 T):ET.TT.*F,I3(I0 F)(I4
11、 F)(I6 F):TF.I4(I0()(I4()(I6()(I7():F(.E)E.E+T E.T T.T*F T.F F.(E)F.id,I5(I0 id)(I4 id)(I6 id)(I7 id):Fid.I6(I1+)(I8+)EE+.T T.T*F T.F F.(E)F.id,I7(I2*)(I9*):TT*.F F.(E)F.idI8(I4 E):F(E.)EE.+TI9(I6 T):EE+T.TT.*FI10(I7 F):TT*F.I11(I8):F(E).,G:(0)E E(4)TF(1)EE+T(5)F(E)(2)ET(6)F id(3)TT*F,E E,E E+T,E T,
12、T T*F,T F,F(E),F id,E,EE E E+T,T,E T T T*F,(,F(E)E E+TE TT T*FT F F(E)F id,I0,I1,I2,I6,F,T F,I3,F id,id,I5,T,I2,F,I3,id,I5,(,E E+TT T*FT F F(E)F id,+,*,T T*F F(E)F id,I7,F(E)E E+T,E,I8,T,E E+T T T*F,I9,F,I3,id,I5,(,F,T T*F,I10,id,I4,(,I4,*,I7,),F(E),+,I6,I11,E E,E E+T,E T,T T*F,T F,F(E),F id,E,EE E
13、E+T,T,E T T T*F,(,F(E)E E+TE TT T*FT F F(E)F id,I0,I1,I2,I6,F,T F,I3,F id,id,I5,T,I2,F,I3,id,I5,(,E E+TT T*FT F F(E)F id,+,*,T T*F F(E)F id,I7,F(E)E E+T,E,I8,T,E E+T T T*F,I9,F,I3,id,I5,(,F,T T*F,I10,id,I4,(,I4,*,I7,),F(E),+,I6,I11,I0,I1,I6,I9,E,+,T,*,to I7,F,to I3,(,to I4,id,to I5,I2,I7,I10,T,*,F,(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 LR 分析

链接地址:https://www.31ppt.com/p-6194273.html