150
第四章 语法分析 语法分析是编译程序的核心部分、语法分析的作用是识别 由词法分析给出的单词符号序列是否是给定文法的正确句子 (程序), 自顶向下分析法也就是从文法的开始符号出发企图推导 出与输入的单词串完全相匹配的句子,若输入串是给定文法 的句子,则必能推出,反之必然出错。自顶向下分析法又可 分为确定的和不确定的两种,确定的分析方法需对文法有一 定的限制,但由于实现方法简单、直观,便于手工构造或自 动生成语法分析器,因而仍是目前常用的方法之一。不确定 的方法即带回溯的分析方法 ( 又称回溯法 ) ,这种方法实际 上是一种穷举的试探方法,因此效率低,代价高,因而极少 使用。

第四章 语法分析 语法分析是编译程序的核心部分、语法分析的作用是识别由词法分析给出的单词符号序列是否是给定文法的正确句子(程序),

  • 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|

  • (2) (P=+=>P)a.A1,A2,A3,,Anb.for(i=1;i
  • 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

  • G[E]EE+T|T TT*F|F FPF|P P(E)|iVt={+*i}EE+TT=+=>T*F+PF*E+T+>+FPFF=+=>PFE+T=>T+T=>T*F+T=>F*F+T=>PF*F+T=>iF*F+T=>iF*F+T=>iF*F+T*F=>iF*F+F=>iF*F+T*i
  • 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

    *