在用于跟随语法的简单优先级解析(Decomposition)中,我们遇到shift-reduce
和reduce-reduce
个冲突。 X
是开始符号,X'-->$X$
是添加规则。此外,+
和lower symbol
是终端。
X'-->$X$
X-->Y | X + a
Y-->b | b + Y
问题:我的TA如何解决此问题,并且涉及shift-reduce
和reduce-reduce
冲突?这个问题的任何步骤?它对我来说太模糊了!也许有错误的答案。
答案 0 :(得分:4)
我尝试使用SLR算法创建自动机。如下所示,状态1和前瞻符号+
存在移位减少冲突。您可以看到状态1和4的项目集。
在状态1中,有项r3: Y -> b .
,因此正确的操作是减少使用第三条规则。
但是,状态1还包含项目
r4: Y -> b . + Y
,而州4包含项目r4: Y -> b + . Y
,因此另一个正确的行动是转移到州4。这会导致自动机中同一个单元格的一个正确移位和一个正确的缩小操作,从而产生移位减少冲突。
我看不到减少 - 减少冲突。
r0: root -> . X EOF
r0: root -> X . EOF
r0: root -> X EOF .
r1: X -> . Y
r1: X -> Y .
r2: X -> . X + a
r2: X -> X . + a
r2: X -> X + . a
r2: X -> X + a .
r3: Y -> . b
r3: Y -> b .
r4: Y -> . b + Y
r4: Y -> b . + Y
r4: Y -> b + . Y
r4: Y -> b + Y .
+ a b EOF X Y
0: s1 2 3
1: inv r3
2: s5 acc
3: r1 r1
4: s1 6
5: s7
6: r4 r4
7: r2 r2
shift/reduce conflict for state 1 and symbol +: s4 r3
s1
r4: Y -> b . + Y
r3: Y -> b .
s4
r4: Y -> b + . Y
r3: Y -> . b
r4: Y -> . b + Y