我需要帮助来解决这个问题并解释将来如何处理这种 SHIFT/REDUCE CONFLICTS。
我的杯子文件中的几个州之间存在一些冲突。
语法看起来像这样:
我在“(”[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
;
错误输出如下所示:
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.
错误:*遇到的冲突比预期的多——解析器生成中止