赞
踩
无效归约问题:
在SLR(1)分析中,我们考虑了所归约非终结符的 Follow 符号,这可以分析出怎么选择归约或移进,但是在选择归约的情况中里,我们只是确认了移进符号是属于非终结符的Follow集的,而没有确认移进后是否是表达式文法规范句型的活前缀,也就是未考虑非终结符 Follow 集中的符号是否也是句柄的 Follow 符号;这样虽然不会影响判断结果,但产生了无效归约,减低了效率。
例:现在符号栈中的元素是
βα
,移进符号是a
,已知有归约项目A->α
,并且a
属于follow(A)
而a
不属于follow(βα)
;此时我们的做法是归约然后移进,之后的符号栈中的元素是βAa
,而βAa
不是文法规范句型的活前缀。如果我们能判断出
a!∈follow(βA)
,就可以判断出出错了。
局限性问题:
SLR(1)分析的要求是:Ii ={A1->α1•b1γ1 ,… , Am->m•bm γm, B1->β 1 • ,…, Bn-> β n • }
,若集合{b1 ,b2,… ,bm }
、FOLLOW(B1)
、 FOLLOW(B2)
,…,FOLLOW(Bn)
均两两不相交。和上面的道理相似,没有考虑非终结符 Follow 集中的符号是否也是句柄的 Follow 符号,导致虽然follow集出现了相交,但是事实上正确的符号串是不会出现某些 follow集中的符号的,从而不能判断。
已知:增广文法 G’ [ S ]:
(0) S -> E
(1) E -> (L , E )
(2) E -> F
(3) L -> L , E
(4) L -> E
(5) F -> ( F )
(6) F -> d有G’ [S] 的 LR(0)FSM:
在I7中出现了
{)}∩follow(E)={)}
的情况,所以不能进行SLR(1)分析;但是I7中的情况是(·F,E)
,此时的follow(E)
中没有)
而应该是,
。
我们在求项目集的时候,每个项目的末尾添加一个非终结符并以,
分隔开来,来表示在当前情况下用该产生式进行规约时所期望的下一个字符,称之为向前搜索符,来替代follew集。
在检查是否可用.LR(1)分析法的时候,要求是Ii
={A1->α1•b1 γ1,a1
,… , Am->m•bm γm,am
, B1->β 1 •,c1
,…,Bn-> β n •,cn
},若集合{b1}
,{b2}
,… ,{bm}
、{c1}
,{c2}
,… ,{cm}
均两两不相交。满足这样要求的文法称之为LR(1)文法:。
通过比较``{b1},
{b2},… ,
{bm}、
{c1},
{c2},… ,
{cm}`和待移进字符就能分析出当前应该进行的操作。
例:增广文法 G’ [ S ]:
(0) S -> E
(1) E -> (L , E )
(2) E -> F
(3) L -> L , E
(4) L -> E
(5) F -> ( F )
(6) F -> d构造增广文法G’ [S] 的 LR(1)FSM:
同理可推广到LR(k)分析:
形如: [A ->α . β , a1a2…ak ]
,其中a1a2…ak 为向前搜索符号串。
移进项目形如:[ A ->α . aβ, a1 a2 … ak]
;待约项目形如:[A ->α . Bβ, a1 a2 … ak]
; 归约项目形如:[A ->α . ,a1 a2 … ak]
。
但LR(k)分析只有理论意义,因为LR(1)FSM 的状态数已经很大,k>1 的情形难以想象。
LR(1)项目的“心”(core):
LR(1)项目 [A -> α . β , a]
中的A -> α . β
部分称为该项目的“心“ 。
同心集:
对于LR(1)FSM 的两个状态,如果只考虑每个项目的 “心”,它们是完全相同的项目集合,那么这两个状态互为同心集。
我们可以发现LR(1)分析的有限状态机中,项目集的数量十分的多。这是因为许多在LR(0)分析中循环的项目集在LR(1)分析中由于·
的位置变化导致向前搜索集也产生了变化,从而产生了许多同心集。而LALR(1)分析法正是对这些同心集进行了合并。
暴风(Brute Force)算法:
注意:
合并同心状态后,不会产生新的移进-归约冲突,但可能产生新的归约-归约冲突。
一个LR(1)文法,如果将其LR(1)FSM的 同心状态合并后所得到的新状态无归约-归约 冲突,则该文法是一个 LALR(1)文法 。
例:增广文法 G’ [ S ]:
(0) S -> E
(1) E -> (L , E )
(2) E -> F
(3) L -> L , E
(4) L -> E
(5) F -> ( F )
(6) F -> d构造增广文法G’ [S] 的 LALR(1) FSM
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。