我需要幫助來解決這個問題,並解釋如何在未來處理這個SHIFT/REDUCE CONFLICTS。如何解決SHIFT/REDUCE衝突 - 解析器生成器
我在我的杯子文件中的幾個州之間有一些衝突。
格拉默是這樣的:
我之間的衝突 「(」[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.
錯誤:*更多衝突en反駁高於預期 - 解析器代中止
我THI nk'ActParamsList2'具有不平衡的括號。擴展的'ActParamsOptional'的例子看起來像這樣:'(Expr)''。 – tehlexx
是的你是對的 - 我改變了 - 那是錯誤的。我改變了這一點,並更新錯誤輸出,因爲出現了新的換檔減少。 –