SLR(1)分析思想
-
1、SLR(1)能解决LR(0)问题前提:
- a)、若
LR(0)状态自动机
中所有要规约项的左部Follow(左部)
互不相交,则可以解决规约--规约
冲突 - b)、若
LR(0)状态自动机
中所有要规约项的的左部Follow(左部)
与所有要移进项的符号集
互不相交,则可以解决规约--移进
冲突
- a)、若
-
2、向前查看一个字符
- a)、若下一个输入的字符属于
规约式子
的非终结符的Follow集,则规约
- b)、若下一个输入的字符属于
移进式子
的下一字符,则移进
- a)、若下一个输入的字符属于
SLR(1)解决的问题
- 概念
- 当活前缀
自动机存
在规约--移进
冲突时,可以用SLR(1)解决部分规约--移进
冲突问题
- 当活前缀
案例
- 文法如下:
- 活前缀自动机如下:
- 可见,节点1、节点2和节点10存在规约–移进冲突
- 但是,因为节点1存在S→E.属于接受状态,故而不存在规约–移进冲突
- 所以,只有节点2、节点10存在规约–移进冲突
- 存在
规约--移进
冲突的节点如下: - 解决(
SLR(1)分析
): - 1、易于求得Follow(E),如下:
- 2、根据表达式的下一个字符决定是
移进
还是规约
- a)若下一个字符为Follow(E)集合的字符,则执行
规约
- b)若下一字符为*,则执行
移进
操作
- a)若下一个字符为Follow(E)集合的字符,则执行
- 3、根据自动机得到的SLR(1)的分析表为: