LR(0) 分析的局限性:
- 满足要求的文法不多,如文法中含有产生式 通常会遇到问题,对应的项目 是归约项目,容易引起移进-归约冲突
- 只根据栈顶状态确定进行移进还是归约
非 LR(0) 文法举例:


解决冲突的方法:向前查看一个符号
- 根据下一个输入符号是否属于要归约的非终结符的 Follow 集来决定是否进行归约
- 如果 LR(0) 状态中所有归约项中要归约的非终结符的 Follow 集互不相交,则可以解决归约-归约冲突
- 如果 LR(0) 状态中所有归约项中要归约的非终结符的 Follow 集与所有移进项目要移进的符号集互不相交,则可以解决移进-归约冲突
SLR(1) 分析表的构建
只需对 LR(0) 分析表 做一些修改:
- 若项目 且 , 为终结符,则
- ! 若项目 ,则对任何终结符 ,,其中 为第 个产生式
- 若项目 ,则
- 若 , 为非终结符,则
- 其余位置为
SLR(1) 文法
按上述算法构造的分析表,如果各表项均无多重定义,则称该文法为 SLR(1) 文法
SLR(1)文法的 LR(0) FSM 中每个状态满足
- 该状态的任何项目 ,不存在项目 使得
- 对该状态的任何两个项目 和 ,满足
局限性
只考虑所归约的非终结符的 Follow 符号,没有考虑非终结符 Follow 集中的符号是否也是句柄的 Follow 符号(一个输入符号属于所归约非终结符的 Follow 集合,未必是句柄后可以跟的符号),这会导致报错时机向后延迟。
的 Follow 集为 ,但如果分析过程中前文已经有了 ,则 后面只能跟