如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
LALR(1)项目集构造的另一种算法搜索符的传播判定算法ProcedureSponsor(I,X)/*I是一个LR(0)集,X是一个文法符号*/ForI的核中的每个项目B→γ·δDoBeginJ:=Closure({[B→γ·δ,]});/*采用LR(1)项目集求闭包算法*/if[A→α·Xρ,a]∈J但a不等于thenGO(I,X)核中的[A→α·Xρ,a]的搜索符a是自生的;if[A→α·Xρ,]∈JthenGO(I,X)核中的[A→α·Xρ,a]的搜索符a是从K中的B→γ·δ传播过来的EndLALR(1)项目集构造算法LALR(1)项目集构造核算法-造核算法EndofwhileEndofAlgorithmProcedureInsert(I,A→α·ρ,a);ifnotOn[I,A→α·ρ,a]thenBegin把三元式(I,A→α·ρ,a)推进Stack;On[I,A→α·ρ,a]:=True;把a加到I中的项目A→α·ρ的搜索符集中EndofInsert例5.14:有如下文法G[S`]:(0)S`S(1)SL=R(2)SR(3)L*R(4)Li(5)RL构造文法的LALR项目集I0:S`•SS•L=RS•RL•*RL•iR•L能够产生搜索符的项目S`•S和S•L=R分别拥有搜索符‘#’和‘=’将(I0,S→·S,#)推进Stack按Sponsor算法重构I0则‘=’是非核项目L•*R和L•i的搜索符,从而‘=’是I4的核L*•R和I5的核Li•的一个自生搜索符。将(I4,L*•R,=)推进Stack将(I5,Li•,=)推进Stack其中I5是归约项目,不会再传播弹出栈顶(I4,L*•R,=)按Sponsor算法将搜索符‘=’传播到I7的核L*R•I8的核RL•I5的核Li•I4自身但I5、I7和I8都是归约项目,不会再传播弹出栈顶(I0,S→·S,#)按Sponsor算法将搜索符‘#’传播到I2的核SL•=RI3的核SR•I2的核RL•I4的核L*•RI5的核Li•I1的核S→S•进栈后,考虑可以继续传播的项目(I4,L*•R,#)(I2,SL•=R,#)弹出栈顶(I2,SL•=R,#)引起(I6,SL=•R,#)进栈弹出栈顶(I6,SL=•R,#)按Sponsor算法将搜索符‘#’传播到(I9,SL=R•,#)(I8,RL•,#)(I5,Li•,#)(I4,L*•R,#)但均为归约项目,不会再传播或已在栈中弹出栈顶(I4,L*•R,#)按Sponsor算法将搜索符‘#’传播到(I7,L*R•,#),不会再传播栈空算法结束得到LALR(1)集核为:I0:S→·S,#I4:L*•R,=/#I1:S→S•,#I5:Li•,=/#I2:SL•=R,#I6:SL=•R,=/#RL•,#I7:L*R•,=/#I3:SR•,#I8:RL•,=/#I9:SL=R•,#