注意:LR(0)分析表的归约项目,不管当前遇到什么输入符号都做归约动作。也是和SLR(1)分析表的主要区别。
表 7.7 实数说明文法的SLR(1)分析表
状态 ACTION GOTO
r , i # S D
0
1
2
3
4
5
6
S2
.
.
.
r3
.
r2
.
.
.
S5
r3
.
r2
.
.
S4
.
r3
S6
r2
.
acc
.
r1
r3
.
r2
1 .
.
3

  因此假定一个LR(0)规范族中含有如下的项目集(状态)I
  I={X→α·bβ,A→γ·,B→δ·}
  也就是在该项目集中含有移进-归约冲突和归约-归约冲突。其中α,β,γ,δ为文法符号串,b为终结符。那么只要在所有含有A或B的句型中,直接跟在A或B后的可能终结符的集合即FOLLOW(A)和FOLLOW(B)互不相交,且都不包含b,也就是只要满足
  FOLLOW(A)∩FOLLOW(B)=
  FOLLOW(A)∩{b}=
  FOLLOW(B)∩{b}=
  那么,当在状态I时面临某输入符号为a时,则动作可由下规定决策。
  1) 若a=b,则移进。
  2) 若a∈FOLLOW(A),则用产生式A→γ进行归约。
  3) 若a∈FOLLOW(B),则用产生式B→δ进行归约。
  4) 此外,报错。
  通常对于LR(0)规范族的一个项目集I中可能含有多个移进项目和多个归约项目,我们可假设项目集I(状态)中有m个移进项目:A1→α1·a1β1,A1→α2·a2β2,…, Am→αm·amβm; 同时含有n个归约项目为:B1→γ1·,B2→γ2·,…,Bn→γn·只要集合{a1,a2,…, am}和FOLLOW(B1),FOLLOW(B2),…,FOLLOW(Bn)两两交集都为空,那么我们仍可用上述规则解决冲突即考查当前输入符号决定动作。
  1) 若a∈{a1,a2,…, am},则移进。
  2) 若a∈FOLLOW(Bi),i=1,2…n,则用Bi→γi进行归约。
  3) 此外,报错。