Shift-Reduce和Reduce-Reduce示例和一个解决的示例?

时间:2016-02-19 14:33:25

标签: parsing compiler-construction programming-languages grammar compiler-optimization

在用于跟随语法的简单优先级解析(Decomposition)中,我们遇到shift-reducereduce-reduce个冲突。 X是开始符号,X'-->$X$是添加规则。此外,+lower symbol是终端。

X'-->$X$
X-->Y | X + a
Y-->b | b + Y

问题:我的TA如何解决此问题,并且涉及shift-reducereduce-reduce冲突?这个问题的任何步骤?它对我来说太模糊了!也许有错误的答案。

1 个答案:

答案 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