我需要帮助来解决这个问题并解释如何在将来处理这种SHIFT / REDUCE冲突。
我的杯子文件中的几个州之间存在一些冲突。
Grammer看起来像这样:
我在“(”[ActPars]“)”状态“之间存在冲突。
1. Statement = Designator ("=" Expr | "++" | "‐‐" | "(" [ActPars] ")" ) ";"
2. Factor = number | charConst | Designator [ "(" [ActPars] ")" ].
我不想粘贴整个700行的杯子文件。 我会给你相关的状态和错误输出。
这是第1行的代码。)
Matched ::= Designator LPAREN ActParamsList RPAREN SEMI_COMMA
ActParamsList ::= ActPars
|
/* EPS */
;
ActPars ::= Expr
|
Expr ActPComma
;
ActPComma ::= COMMA ActPars;
这是第2行。)
Factor ::= Designator ActParamsOptional ;
ActParamsOptional ::= LPAREN ActParamsList2 RPAREN
|
/* EPS */
;
ActParamsList2 ::= ActPars
|
/* EPS */
;
Expr ::= SUBSTRACT Term RepOptionalExpression
|
Term RepOptionalExpression
;
ERROR输出如下所示:
Warning : *** Shift/Reduce conflict found in state #182
between ActParamsOptional ::= LPAREN ActParamsList RPAREN (*)
and Matched ::= Designator LPAREN ActParamsList RPAREN (*) SEMI_COMMA
under symbol SEMI_COMMA
Resolved in favor of shifting.
错误: * 遇到比预期更多的冲突 - 解析器生成中止
答案 0 :(得分:1)
我认为问题在于你的解析器不知道它是否应该转移到令牌:
SEMI_COMMA
或缩减为令牌
ActParamsOptional
因为ActParamsOptional
和Matched
中定义的令牌都是
LPAREN ActPars RPAREN