【发布时间】:2023-03-20 23:30:01
【问题描述】:
我需要帮助来解决这个问题并解释将来如何处理这种 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.
错误:* 遇到的冲突比预期的要多——解析器生成中止
【问题讨论】:
-
我认为
ActParamsList2有不平衡的括号。扩展ActParamsOptional的示例如下所示:(Expr))。 -
是的,你是对的——我已经改变了——那是错误的。随着新的班次减少出现,我已经改变了它并更新了错误输出。
标签: parsing shift-reduce-conflict cup