이 문제를 해결하고 향후이 SHIFT/REDUCE CONFLICTS를 처리하는 방법에 대한 설명이 필요합니다.SHIFT/REDUCE 충돌 해결 방법 - 파서 생성기
컵 파일의 몇 가지 상태가 서로 충돌합니다.
문법은 다음과 같이 :
내가 사이에 충돌이 "("[ActPars] ")"상태.
1. Statement = Designator ("=" Expr | "++" | "‐‐" | "(" [ActPars] ")") ";"
2. Factor = number | charConst | Designator [ "(" [ActPars] ")" ].
I 컵 파일의 전체 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.
오류 : * 더 많은 충돌이 있습니다. 토큰
ActParamsOptional
에
SEMI_COMMA
또는 감소 - 예상보다 반박 파서 생성 내가 문제가 토큰으로 이동해야합니다 경우 파서 모를 것입니다 생각
I 생이기 때문에 nk'ActParamsList2'는 불균형 괄호를 가지고 있습니다. 확장 된'ActParamsOptional'에 대한 예제는'(Expr))'처럼 보일 것입니다. – tehlexx
네 말이 맞아 - 나는 그것을 바꿨다 - 그건 실수였다. 나는 새로운 변화 감소가 나타나면서 그것을 변경하고 오류 출력을 업데이트했다. –