转移/减少与SableCC的冲突

时间:2010-07-06 20:48:24

标签: shift-reduce-conflict sablecc

我是第一次使用SableCC和语法定义。 我有以下语法(其中一部分):

query =
           {atop} attroperator |
           {query_par} l_par query r_par |
           {query_and} [q1]:query logic_and [q2]:query  |
           {query_or} [q1]:query logic_or [q2]:query |
           {query_not} logic_not query ;

我有以下错误:

shift/reduce conflict in state [stack: PCommand TLogicNot PQuery *] on
TRPar in {
       [ PQuery = PQuery * TRPar ] (shift),
       [ PQuery = TLogicNot PQuery * ] followed by TRPar (reduce)
}

shift/reduce conflict in state [stack: PCommand TLogicNot PQuery *] on
TLogicAnd in {
       [ PQuery = PQuery * TLogicAnd PQuery ] (shift),
       [ PQuery = TLogicNot PQuery * ] followed by TLogicAnd (reduce)
}

shift/reduce conflict in state [stack: PCommand TLogicNot PQuery *] on
TLogicOr in {
       [ PQuery = PQuery * TLogicOr PQuery ] (shift),
       [ PQuery = TLogicNot PQuery * ] followed by TLogicOr (reduce)
}

我通过将l_par和r_par添加到所有替代方案来解决它们 方式,应该提高可读性,但有没有办法做到这一点 优雅的方式?

感谢。

1 个答案:

答案 0 :(得分:3)