Upload
ronda
View
162
Download
8
Embed Size (px)
DESCRIPTION
第四章 语法分析 语法分析是编译程序的核心部分、语法分析的作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子(程序), 自顶向下分析法也就是从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子,若输入串是给定文法的句子,则必能推出,反之必然出错。自顶向下分析法又可分为确定的和不确定的两种,确定的分析方法需对文法有一定的限制,但由于实现方法简单、直观,便于手工构造或自动生成语法分析器,因而仍是目前常用的方法之一。不确定的方法即带回溯的分析方法 ( 又称回溯法 ) ,这种方法实际上是一种穷举的试探方法,因此效率低,代价高,因而极少使用。. - PowerPoint PPT Presentation
Citation preview
()
4.1 4.1.1G[S]: SaBC Bib|b CDE|FG|c Dd Eeh Fde Gt abdet
PPPP=+=>P, G1S SpA SqB AcAd AaW=pccadd, S =>pA=>pcAd=>pccAdd=>pccadd
G2[S]SAp SBq Aa AcA Bb BdBW=ccap, S=>Ap=>cAp=>ccAp=>ccap
G3[S]SaA Sd AbAS AW=abd,abd S=>aA=>abAS=>abS=>abd
4.1.2 1. ,AA=+=>AAA(1) a. EE+T|T ET+E|Tb.EE+T|T TT*F|F F(E)|i ETE E+TE| TFT T*FT| F(E)|i
AA1|A2|A3||Am|1|2|3||nA1 A|2 A|3 A||nAA 1 A|2 A|3 A||m A| SSS*|SS+|aSaS S S*S| S+S|
SAa|b AAc|Sd|A1=S A2=A SAa|b AAc| Aa|bd|SAa|b AAc|ad|bd|SAa|b AbdA|A AcA|adA| 2. PP1|2|3||na,a
Sif E then S|if E then S else S|bSif E then S S|bSelse S| A1|2|3||n| AA| A1|2|3||nG[S]:SaBC Bib|b CDE|FG|c Dd Eeh Fde Gt SaBC Bib|b CdC|c CeE Eh|G Gt
G[S]SaSd SAc AaS AbSaSd SaSc Sbc SaSS Sbc Sd|cG[S]SAp|Bq AaAp|d BaBq|eL[G]={andpn+1ameqm+1|m,n0}mna
G[E] EE+T|T TT*F|F FE|i ETE E+TE| TFT T*FT| F(E)|i
void E() {T()E(); }void E() {if(==+) {() T()E(); } }
void T() { F()T(); } void T() {if(==*) {() F()T(); } }
void F() { if(==i) (); else if(==() {()E() if(==)) (); else (); } else () }
,BNF,:ET{+T} TF{*F) F(E)|i :void E() {T() while(==+) {() T(); } }void T() {F() while(==*) {() F(); } }
void F() { if(==i) (); else if(==() {()E() if(==)) (); else (); } else () }
(1)(2)(3)
4.1.4 ,,LL1 LLKLL1K
1.LL(1) LL1
1 LL(1)M[Aa]A a##M[Aa]AaA2 #
3 Xa#SXaa.XVt {#} X=a=# X=a#X
Xab.XVnXaMM[Xa]M[Xa]XXXM[Xa]
ETE E+TE| TFT T*FT| F(E)|i
i+*()#EETEETEEE+TEEETTFTTFTTTT*FTTTFFiF(E)
0 #E i*(i+i)+i# ETE1 #ET i*(i+i)+i# TFT2 #ETF i*(i+i)+i# Fi3 #ETi i*(i+i)+i# i4 #ET *(i+i)+i# T *F T 5 #ETF* *(i+i)+i# *6 #ETF (i+i)+i# F(E)7 #ET)E( (i+i)+i# (8 #ET)E i+i)+i# ETE9 #ET)ET i+i)+i# TFT
10 #ET)ETF i+i)+i# Fi11 #ET)ETi i+i)+i# i12 #ET)ET +i)+i# T 13 #ET)E +i)+i# E +TE14 #ET)ET+ +i)+i# +15 #ET)ET i)+i# TFT16 #ET)ETF i)+i# Fi17 #ET)ETi i)+i# i 18 #ET)ET )+i# T 19 #ET)E )+i# E
20 #ET) )+i# )21 #ET +i# T 22 #E +i# E +TE 23 #ET+ +i# +24 #ET i# TFT25 # ET F i# Fi26 # ET i i# i 27 # ET # T 28 # E # E 29 # #
2. LL(1)4-1 FIRST()={a|=+=>a...,aVt} =*=>FIRST() AAijFIRST(i) FIRST(j)=AAa,FIRST()AaAAFOLLOW4-2 FOLLOWA={a|S=*=>...Aa...,aVt}S=*=>...A#FOLLOWA
Aiji=*=>FIRST(i)FIRST()FOLLOWA4-3 A=*=>,SELECT(A)=FIRST()-{ }FOLLOWA,SELECT(A)= FIRST()
LL1AAiAj SELECTAi SELECTAj=ij
LL11LL1LL12LL1 LL1 LL1LL1LL1
FIRST XVtVn,FIRSTXFIRST1XVtFIRSTX={X}2XVnXa...aFIRSTXXFIRSTXXY...YVnFIRSTYFIRSTXXY1Y2Y3...YkY1Y2Y3...Yi-1 j1ji-1, FIRSTYiY1Y2Y3...Yi-1=*=>,FIRSTYiFIRSTYiFIRSTXFIRSTYij=1,2,3...,k,FIRST(X)
X1X2X3...XnFIRST FIRSTX1FIRSTX1X2X3...XnFIRSTX1FIRSTX2FIRSTX1FIRSTX2FIRSTX3FIRSTX1X2X3...XniFIRSTXiFIRSTX1X2X3...Xn
FOLLOW GAFOLLOWA#FOLLOWA1S# FOLLOWA2ABFIRSTFOLLOW(B)3ABAB=*=>(FIRST)FOLLOWAFOLLOWB
SELECT ASELECTAFIRSTSELECTA=FIRST()-{}FOLLOWA,SELECT(A)= FIRST()
G[S]SAB SbC A Ab B BaD CAD Cb DaS DcFIRSTFOLLOWSELECTFIRST(S)={a,b,}FIRST(A)={b,}FIRST(B)={a,}FIRST(C)={a,b,c}FIRST(D)={a,c}
FIRST(AB)={a,b,} FIRST(bC)={b} FIRST()={} FIRST(b)={b} FIRST(aD)={a} FIRST(b)={b} FIRST(aS)={a} FIRST(c)={c} FOLLOW(S)={#} FOLLOW(A)={a,#,c} FOLLOW(B)={#} FOLLOW(C)={#} FOLLOW(D)={#}
SELECT(SAB)={a,b,#} SELECT(SbC)={b} SELECT(A)={a,c,#} SELECT(Ab)={b} SELECT(B)={#} SELECT(BaD)={a} SELECT(CAD)={a,b,c} SELECT(Cb)={b} SELECT(DaS)={a} SELECT(Dc)={c}
G[E]ETE E+TE| TFT T*FT| F(E)|iFIRSTFOLLOWSELECTFIRST(E)={(,i} FIRST(E)={+,} FIRST(T)={(,i} FIRST(T)={*,} FIRST(F)= {(,i} FOLLOW(E)={#,)} FOLLOW(E)={#,)} FOLLOW(T)={#,),+} FOLLOW(T)={#,),+} FOLLOW(F)={#,),+,*}
SELECT(ETE)={(,i}SELECT(E+TE)={+}SELECT(E)= {#,)}SELECT(TFT)={(,i}SELECT(T*FT)={*} SELECT(T)= {#,),+}SELECT(F(E))= {(}SELECT(Fi)={i}
1SELECT2#a aSELECT(A),AM[A,a]3M[A,a]FIRSTFOLLOWSELECT
i+*()#EETEETEEE+TEEETTFTTFTTTT*FTTTFFiF(E)
LL1G[S]Sif E then S S|a Selse S| Eb FIRST(S)={if} FIRST(S)={else,} FIRST(E)={b} FOLLOW(S)={else,#} FOLLOW(S)={else,#} FOLLOW(E)={then} SELECT(Sif E then S S)={if} SELECT(Sa)={a} SELECT(Selse S)={else} SELECT(S)={else,#} SELECT(Eb)={b}
M[s,else]S
abelseifthen#SSaSif E then S SSSelse S SSEEb
4.2 .4.2.1 (1) (2) # # a1a2a3a4...an#
#S #SG[S]SaAcBe Ab AAb Bdabbcde
1#abbcde#2#abbcde#3#abbcde#Ab4#aAbcde#5#aAbcde#AAb6#aAcde#7#aAcde#8#aAcde#Bd9#aAcBe#10#aAcBe#SaAcBe11#S#
1. 4-4 XY XY X>Y XYX ,< XY GXY XY X>Y GBD,B=+=>X D=+=>Y
G[S]:SbAb A(B|a BAa):
LASTFIRST
SbA(Ba)#S>b)>>#
4-5(1) V(2) Sj-1 Si+1
2. 3+5*25*23+5-23+5 G[E]:EE+E|E*E|(E)|i
+*i+>>
G[E]:EE+E|E*E|(E)|ii+i+i*(i+i)
1#i+i+i*(i+i)#2#i+i+i*(i+i)#Ei3#E+i+i*(i+i)#4#E+i+i*(i+i)#5# E+i+i*(i+i)#Ei6# E+E+i*(i+i)#EE+E7# E+i*(i+i)#8#E+i*(i+i)#9# E+i*(i+i)#Ei10# E+E*(i+i)#
+*i+>>
G[E]:EE+E|E*E|(E)|i
11# E+E*(i+i)#12# E+E*(i+i)#13# E+E*(i+i)#Ei14# E+E*(E+i)#15# E+E*(E+i)#16# E+E*(E+i)#Ei17# E+E*(E+E)#EE+E18# E+E*(E)#19# E+E*(E)#E(E)20# E+E*E#EE*E21# E+E#EE+E22# E#
4-6ab ab > ,< /
P4-7 GABCABCVn,OG
1 2aPaVt,PVnaP 3PaaVt,PaP 4
(1) if then| else if then | else
(2):=|:=|||:=:=
4-8 Ga,bABCVn1.ab GabaBb2.abB=+=>Cb3.a>b GBb,B=+=>aB=+=>aC Ga.b ab abG
4-9FIRSTVT(B)={a|B=+=>aB=+=>Ca}LASTVT(B)={a|B=+=>aB=+=>aC}AabAaBbababAaBFIRSTVT(B)bab
G[E]:EE+T|T TT*F|F F(E)|iFIRSTVTLASTVT FIRSTVT(E)={+,*,(,i} FIRSTVT(T)={*,(,i} FIRSTVT(F)={(,i} LASTVT(E)={+,*,),i} LASTVT(T)={*,),i} LASTVT(F)={),i}
+*i+>>
##N1a1N2a2NnanNn+1#aiNjNjajNiaiNi+1,aj-1ai+1
G[E]EE+T|T TT*F|F F(E)|iT+F##TT+FT
4-10 G[E]EE+T|T TT*F|F F(E)|iT+T*F+iT+T*F+iT+T*FTT*FiT*FiT*F
i+(i+i)*i
1#i+(i+i)*i##+iF2#F+(i+i)*i##
E+TT+TE+FT+FF+FEPQN
4.2.2 LR ,,LRK
LRK1956KnuthLRKKK1LLKLRLRLR
LR(1) LR(2) LRatction,goto(3) LR0)LR
ACTION[Si,aSia4 l: Sj=GOTO[Siaaij 2: AAr||=rr,SPrASj=GOTO[SiA]Sj 3acc: S
4 LRLR G[S](1) SA(2) SB(3) AaAb(4) Ac(5) BaBb(6) Bd
(1) SA (2) SB (3) AaAb (4) Ac (5) BaBb (6) Bd
ACTIONGOTOabcd#SAB0S4S5S61231acc2r1r1r1r1r13r2r2r2r2r24S4S5S6785r4r4r4r4r46r6r6r6r6r67S98S109r3r3r3r3r310r5r5r5r5r5
aaaadbbbb
ACTIONGOTO10#aaaadbbbbS4204#aaaadbbbbS43044#aaaadbbbbS440444#aaaadbbbbS4504444#aaaadbbbbS66044446#aaaadbbbbr687044448#aaaaBbbbbS10804444810#aaaaBbbbbr58904448#aaaBbbbS10100444810#aaaBbbbr58110448#aaBbbS1012044810#aaBbbr5813048#aBbS101404810#aBb#r531503#B#r211601#S#acc
,4-11,S=r=>A=r=> GSSS,SSS
S =r=>A=r=>aAb=r=>a2Ab2=r=> anAbn=r=> ancbn S =r=>B=r=>aBb=r=>a2Bb2=r=> anBbn=r=> andbn a,a2,a3an, anc, and, anA, anB, anAb, anBb, an-1A, an-1B, an-1Ab, an-1Bb,AB (1) SA (2) SB (3) AaAb (4) Ac (5) BaBb (6) Bd
4.2.3 LR(0) LRkLR0LR0LR04.12 AAGLR0
G[E]EE+T|T TT*F|F F(E)|i EE+T EE+T EE+T EE+T ET F(E) FiA||+1AA
SSSSSS#
4.13 AXGLR0XVnVt,LR0AXVnVt*4.14 LR0LR04.15 GLR(0),1.GLR(0) LR(0)NFANFADFA
LR(0)NFA(1) LR(0)NFALR(0)(2) LR(0)NFA(3) ji,ijX(4) iXAiA
:G[A] AaA AbG:G[S]: (0) SA (1) AaA (2) Ab G[S]LR(0)S AAaAAaAAb AbS AAaA
,:
aAb{1,2,4} {3,2,4}{6}{5}{3,2,4} {3,2,4}{7}{5}{6} {5} {7}
,:GDFA,LR(0)
2.GLR(0) ICLOSUREI(1) ICLOSUREI(2) ABCLOSUREIBBBCLOSUREI(3) 2CLOSUREI 4-16 GOIiX=IjIi XX VnVt Ij=CLOSUREAX| AX Ii
G[E]EE+T|T TT*F|F F(E)|iSECLOSURESE={ SEEE+TETTT*FTFF(E)Fi}GLR01I0= CLOSURESSGSSS2IiG Ii Ij=GO(Ii,X)G32
G[S]SS SA SB AaAb Ac BaBb BdLR0I0= CLOSURESS={ SSSASBAaAb AcBaBb Bd}I1= CLOSURESS={ SS}I2= CLOSURESA={ SA}I3= CLOSURESB={ SB}I4= CLOSUREAaAbBaBb={ AaAb BaBb AaAb Ac BaBb Bd }I5= CLOSUREAc={ Ac}I6= CLOSUREBd={ Bd}I7= CLOSUREAaAb={ AaAb}I8= CLOSUREBaBb={ BaBb}I9= CLOSUREAaAb={ AaAb}I10= CLOSUREBaBb={ BaBb}
4-17 S=r=>A=r=>12A121AXAXXBaBbaB, aaB, aaaB, aaaaB,anB
AAAA122AaAb AaAb Ac BaBb BdaaABABSS
//LR:LR,SAc AbAb|bLR,SAc AAbb|bLR, 4-18 LR0//LR0
LR0 LR0G(1) I0I1,In01,n SS(2) Ik a)AaACTION[k.a]Sj,Ij=GO(Iia) b)AaVt{#}ACTION[k,a]=rj,jj c)ABGOTO[k,B]jBIj=GOIk,B d)SSACTION[k,#]acc(3) (4) LR0
S(L)|a LL,S|S LR00SS 1S(L) 2Sa 3LL,S 4LSI0= CLOSURESS={ SSSLSa}I1= CLOSURESS={ SS}I2= CLOSURESL={ SL LL,SLSSLSa }I3= CLOSURESa={ Sa}I4= CLOSURESLLL,S={ LL,S SL}I5= CLOSURELS={ LS}I6= CLOSURELL,S={ LL, SSLSa }I7= CLOSURESL={SL}I8= CLOSURELL, S={ LL, S }
:GO(I0,S)=I1 GO(I0,()=I2 GO(I0,a)=I3 GO(I2L)=I4 GO(I2,S)=I5 GO(I2,()=I2 GO(I3,a)=I3 GO(I4,)=I6 GO(I4,)=I7 GO(I6,()=I2 GO(I6,a)=I3 GO(I6,S)=I8
ACTIONGOTOa#SL0S3S211acc2S3S2543r2r2r2r2r24S7S65r4r4r4r4r46S3S287r1r1r1r1r18r3r3r3r3r3
4.2.4 SLR(1) LR0LR0AFOLLOWALR1SLR1AkSLRk
LR0II={Xb,A,B}SLR1Ia (1) a=b (2) aFOLLOW(A), A(3) aFOLLOW(B), B(4)
LR0ImA11a11, A22a22,Ammamm;nB1B2 Bn,{a1,a2,,am},FOLLOW(B1), FOLLOW(B2),FOLLOW(Bn)an+1
G(1) I0I1,In01,n SS(2) Ik a) Aa ACTION[k.a]Sj,Ij=GO(Ika) b)AaFOLLOW(A)ACTION[k,a]=rj,jj c)ABGOTO[k,B]jBIj=GOIk,B d) SSACTION[k,#]acc(3) (4) SLR1
G[S] 0SE 1EE+T 2ET 3TT*F 4TF 5F(E) 6FiSLRLR0I0=CLOSURESE={ SEEE+TETTT*FTFF(E)Fi}I1=CLOSURESE={ SE EE+T }I2= CLOSUREETTT*F={ ETTT*F}I3= CLOSURETF={ TF}I4= CLOSUREF(E)={ F(E)EE+TETTT*FTFF(E)Fi}I5= CLOSUREFi={ Fi}I6= CLOSUREEE+T={ EE+TTT*FTFF(E)Fi }
I7= CLOSURETT*F={ TT*FF(E)Fi }I8= CLOSUREF(E)EE+T={ F(E)EE+T}I9= CLOSUREEE+T TT *F ={EE+T TT *F }I10= CLOSURETT*F={ TT*F}I11= CLOSUREF(E)={ F(E)} :GO(I0,E)=I1 GO(I0,T)=I2 GO(I0,F)=I3 GO(I0,)=I4 GO(I0,i)=I5 GO(I1,+)=I6 GO(I2,*)=I7GO(I4,E)=I8 GO(I4,T)=I2 GO(I4,F)=I3 GO(I4,)=I4 GO(I4,i)=I5 GO(I6,T)=I9 GO(I6,F)=I3 GO(I6,)=I4 GO(I6,i)=I5 GO(I8,)=I11 GO(I8,+)=I6 GO(I9,*)=I7
FOLLOWS={#}FOLLOWE={+)#}FOLLOWT={+*)#}FOLLOWF={+*)#}
SLR1
ACTIONGOTO+*i#ETF0S4S51231S6acc2r2S7r2r23r4r4r4r44S4S58235r6r6r6r66S4S5937S4S5108S6S119r1S7r1r110r3r3r3r311r5r5r5r5
LR(1) SLRIkAKaFOLLOW(A)AA Aa(Aa ) SLR{a1,a2,,am}FOLLOWASLR
G[S]SL=R SR L*R Li RLLR0I0= CLOSURESS={ SSSL=RSRL*RLiRL}I1= CLOSURESS={ SS}I2= CLOSURESL=RRL={ SL=RRL }I3= CLOSURESR={ SR}I4= CLOSUREL*R={ L*R RL L*RLi }I5= CLOSURELi={ Li}I6= CLOSURESL=R={ SL=RRL L*RLi }I7= CLOSUREL*R={ L*R}I8= CLOSURERL={ RL }I9= CLOSURESL=R={ SL=R}
I2FOLLOWR={#=}{=}SLR2=R=L=RL
ALRAk[Aa1a2a3ak]ALR0a#LRka1a2a3ak[Aa1a2a3ak][ABa1a2a3ak]a1a2a3ak[Aa1a2a3ak]ka1a2a3akAk=1
LR1[Aa]S=r*=>A=r=>1= 2aa#[TT*F+][TT*F*]E+TE+TLR(1) LR1LR0LR1LR0LR1CLOSUREGO
LR1LR11ICLOSUREI2[ABa]CLOSUREIBFIRSTab,[Bb]CLOSUREI32CLOSUREI[ABa]=S=r*=>Aa=r=>BaabBS=r*=>B b=r=>b[Bb]bFIRSTa
LR14-19 LR1GOGOIi,X=IjXXVtVnIiIj=CLOSURE[AXa]| [AXa] IiaVt{#}IiIj= GOIi,XX
GLR1 (1) I0= CLOSURE[SS#]GSSS (2) IiG Ii Ij= GO(Ii ,X)G (3) 2
0S S (1)SBB (2)BaB (3)Bb LR1I0=CLOSURE[S S#]={[S S#][SBB#][BaB,a/b],[Bb,a/b]}I1=CLOSURE[S S#]={[S S#]}I2=CLOSURE[SBB#]={[SBB#],[BaB,#],[Bb,#]}I3=CLOSURE[BaBa/b]={[BaBa/b], [BaB,a/b],[Bb,a/b]}I4=CLOSURE[Bb,a/b]={ [Bb,a/b]}I5=CLOSURE[SBB#]={[SBB#]}I6=CLOSURE[BaB#]={[SaB#], [BaB,#],[Bb,#]}I7=CLOSURE[Bb,#]={ [Bb,#]}I8=CLOSURE[BaBa/b]={[SaBa/b]}I9=CLOSURE[BaB#]={[SaB#]}
LR1 LR1GOLR0SLR1G(1) I0I1,In01n,[SS#](2) Ik a) [Aab]ACTION[k.a]Sj,Ij=GO(Iia) b) [A,b]ACTION[k,b]=rj,jj c) [ABb]GOTO[k,B]jBIj=GOIk,B d)[SS,#]ACTION[k,#]acc(3) (4) LR1
LR1G[S]SL=R SR L*R Li RLLR1G[S](0)SS (1)SL=R (2)SR (3)L*R (4)Li (5)RLLR1I0=CLOSURE[S S#]={[S S#][SL=R#][SR,#], [L*R,=/#][Li,=/#],[RL,#] }I1=CLOSURE[S S#]={[S S#]}I2= CLOSURE[SL=R#],[RL,#]={[SL=R#],[RL,#]}I3= CLOSURE[SR,#]={ [SR,#]}I4= CLOSURE[L*R,=/#]={ [L*R ,=/#][RL,=/#] [L*R,=/#][Li,=/#] }
I5= CLOSURE[Li,=/#]={[ Li,=/#]}I6= CLOSURE[SL=R,#]={[SL=R,#][RL,#] [L*R,#][Li ,#]}I7= CLOSURE[L*R,= /#]={[ L*R,=/#]}I8= CLOSURE[RL,=/#]={ [RL,=/#] }I9= CLOSURE[SL=R,#]={[SL=R,#]}I10= CLOSURE[RL,#]={ [RL,#] }I11= CLOSURE[L*R,#]={ [L*R ,#][RL,#] [L*R,#][Li,#] }I12= CLOSURE[Li,#]={[ Li,#]}I13= CLOSURE[L*R,#]={[ L*R,#]}
ACTIONGOTO*i=#SLR0S4S51231acc2S63r24S4S5875r4r46S11S121097r3r38r5r59r110r511S11S12101312r413r3
LALR(1) LR1SLRSLRSLRLRLALRlook a head-LRLRSLRLR0LR1SLRSLRLALRLR(1)
0S S (1)SBB (2)BaB (3)Bb LR1I0=CLOSURE[S S#]={[S S#][SBB#][BaB,a/b],[Bb,a/b]}I1=CLOSURE[S S#]={[S S#]}I2=CLOSURE[SBB#]={[SBB#],[BaB,#],[Bb,#]}I3=CLOSURE[BaBa/b]={[BaBa/b], [BaB,a/b],[Bb,a/b]}I4=CLOSURE[Bb,a/b]={ [Bb,a/b]}I5=CLOSURE[SBB#]={[SBB#]}I6=CLOSURE[BaB#]={[SaB#], [BaB,#],[Bb,#]}I7=CLOSURE[Bb,#]={ [Bb,#]}I8=CLOSURE[BaBa/b]={[SaBa/b]}I9=CLOSURE[BaB#]={[SaB#]}
I3I6I4I7I8I9a*b a*bI3bBaBba/bI6BbB#a*ba*b a*b a*bI3I6{[SaBa/b/#], [BaB, a/b/#],[Bb, a/b/#]}I4I7{ [Bb,a/b/#]}a*bBa*b a*b a*bbBa*bBSBS a*bS#
4-20 LR1 GOIXILR1GOIXLR1////LALR
LALR(1)GLR1C={ I0I1,In} C={ J0J1,Jm}[SS#]Jk(2)CACTION a) [Aab]ACTION[k.a]Sj,Jj=GO(Jka) b) [A,b]ACTION[k,b]=rj,jj c) [SS,#]ACTION[k,#]acc(3) GOTO JkIi1, Ii2, Ii3,IitIiGOIi1,X, GO(Ii2,X),GO(Ii3,X),GO(Iit,X)Jj,GOJkX= JjGOJkA=Jj,GOTO[k,A]=j,AVn(4)
GLALRG[S](0)SS (1)SL=R (2)SR (3)L*R (4)Li (5)RLLR1I0=CLOSURE[S S#]={[S S#][SL=R#][SR,#], [L*R,=][Li,=],[RL,#] }I1=CLOSURE[S S#]={[S S#]}I2= CLOSURE[SL=R#],[RL,#]={[SL=R#],[RL,#]}I3= CLOSURE[SR,#]={ [SR,#]}I4= CLOSURE[L*R,=]={ [L*R ,=][RL,=] [L*R,=][Li,=] }I5= CLOSURE[Li,=]={[ Li,=]}I6= CLOSURE[SL=R,#]={[SL=R,#][RL,#] [L*R,#][Li ,#]}I7= CLOSURE[L*R,=]={[ L*R,=]}
I8= CLOSURE[RL,=]={ [RL,=] }I9= CLOSURE[SL=R,#]={[SL=R,#]}I10= CLOSURE[RL,#]={ [RL,#] }I11= CLOSURE[L*R,#]={ [L*R ,#][RL,#] [L*R,#][Li,#] }I12= CLOSURE[Li,#]={[ Li,#]}I13= CLOSURE[L*R,#]={[ L*R,#]}J0=I0J1=I1J2=I2J3=I3J4=I411J5=I512J6=I6J7=I713J8=I810J9=I9GO
GOGOJ0S=J1GOJ0L=J2GOJ0R=J3GOJ0*=J4GOJ0i=J5GOJ2==J6GOJ4R=J7GOJ4L=J8GOJ4*=J4GOJ4i=J5GOJ5R=J9GOJ6L=J8GOJ6*=J4GOJ6i=J5
ACTIONGOTO*i=#SLR0S4S51231acc2S6r53r24S4S5875r4r46S4S5897r3r38r5r59r1
LALR GLR1LALR1LR1LR0LR0LALR4-21 SS LR0 A.=)=[B.Cb],C=*r=>A,aFIRST(b),C=*r=>AA
[A.ab][A.Bb]B=*r=>a,aGOTOGOIX=J,IKJL[A.X, a]K,[AX.,a]L,[A.B, a]K, CXK B=*r=>CbFIRST(a),CX,[CX.,b]L LR0LALR1 IGOIX
A.BLR0IK B=*r=>CCXLR1[A.X, a]KGOIX[CX.,b]Lba b B=*r=>CbFIRST(a), bab ba,aa
:IK,@for(K[B.,@]) { J=closure([B.,@]); if([A.X,a] Ja@) GO(I,X)[AX . ,a] ; if([A.X,a] Ja=@) GO(I,X)[AX . ,a] ; IB.GO(I,X) AX . }
LALR(1):(1) GLR(0)(2) for(LR(0)) for(X) GO(I,X);(3)LR(0);(4) [A.X,a]LCX.,aCX.,a(5)(4)
GLALRG[S](0)SS (1)SL=R (2)SR (3)L*R (4)Li (5)RLI0: S.S,@ S.L=R,@ S.R ,@ L.*R,=/@ L.i=/@ R.L ,@ I1: SS.,@ I2: SL.=R,@ RL. ,@ I3: SR. ,@ I4: L*.R,@ R.L ,@ L.*R ,@ L.i ,@ I5: Li.,@ I6: SL=.R,@ R.L ,@ L.*R ,@ L.i ,@ I7: L*R.,@ I8: RL. ,@ I9: SL=R.,@
:(I0: S.S , I1: SS. )(I0: S.S , I2: SL.=R)(I0: S.S , I3: SR. )(I0: S.S , I4: L*.R)(I0: S.S , I5: Li.)(I2: SL.=R ,I6: SL=.R) (I4: L*.R , I4: L*.R)(I4: L*.R , I5: Li.)(I4: L*.R , I7: L*R.)(I4: L*.R , I8: RL. )(I6: SL=.R, I4: L*.R) (I6: SL=.R, I5: Li.)(I6: SL=.R, I8: RL. ) (I6: SL=.R, I9 :SL=R.)
I0: S.S##I1: SS.#I2: SL.=R #I3: SR. #I4: L*.R ==/#I5: L.i ==/#I6: SL=.R#I7: L*R.=/# I8: RL.=/# I9: SL=R.#
GOGOI0S=I1GOI0L=I2GOI0R=I3GOI0*=I4GOI0i=I5GOI2==I6GOI4R=I7GOI4L=I8GOI4*=I4GOI4i=I5GOI5R=I9GOI6L=I8GOI6*=I4GOI6i=I5LALR
4.2.6 LRSLRLALRLRG[E]:EE+E|E*E|(E)|iG[E]:EE+T|T TT*F|F F (E)|i ,LR
G[E]:EE+E|E*E|(E)|iLR0I0=CLOSURESE={ SEEE+EEE*EE(E)Ei}I1=CLOSURESE={ SE EE+T EE*T }I2=CLOSUREE(E)={E(E)EE+EEE*EE(E)Ei }I3= CLOSUREFi={ Fi}I4= CLOSUREEE+E={ EE+EEE+EEE*EE(E)Ei }I5= CLOSUREEE*E={ EE*EEE+EEE*EE(E)Ei }
I6= CLOSUREE(E)EE+EEE*E={ E(E)EE+EEE*E }I7= CLOSUREEE+EEE+EEE*E={ EE+EEE+EEE*E }I8= CLOSUREEE*EEE+EEE*E={ EE*EEE+EEE*E }I9= CLOSUREE(E)={ E(E)} FOLLOWS={#}FOLLOWE={+*#}
I7EE+EEE+EEE*EEE+EFOLLOWE={+*#}EE+EEE*E{+*}SLRLR1LR1E+E++E+E**I8
ACTIONGOTO+*i#E0S2S311S4S5acc2S2S363r4r4r4r44S2S35S2S36S4S5S97r1S5r1r18r2r2r2r29r3r3r3r3
SSSiSeS|iS|a:I0=CLOSURESS={ SSSiSeSSiSSa}I1=CLOSURESE={ SS}I2=CLOSURESiSeSSiS={ SiSeSSiS SiSeSSiSSa }I3=CLOSURESa={ Sa}I4=CLOSURESiSeSSi S={ SiSeSSi S }I5=CLOSURESiSeS={ SiSeS SiSeSSiSSa }I6=CLOSURESiSeS={ SiSeS}I4SiSeSSi Sfollow(s)e,SLR
ACTIONGOTOiea#S0S2S311acc2S2S343r3r34S5r25S2S366r1r1
*