Jison (자바 스크립트 파서)에서 매우 간단한 언어를 정의하여 구문 분석을 시도하고 있습니다. bison과 동일한/매우 유사한 구문을 허용합니다. 나는 하나의 변화를 얻고있다들소에서이 변화/감소 충돌은 어디에서 오는가?
%token INT TRUE FALSE WHILE DO IF THEN ELSE LOCATION ASSIGN EOF DEREF
%left "+"
%left ">="
/* Define Start Production */
%start Program
/* Define Grammar Productions */
%%
Program
: Statement EOF
;
Statement
: Expression
| WHILE BoolExpression DO Statement
| LOCATION ASSIGN IntExpression
;
Expression
: IntExpression
| BoolExpression
;
IntExpression
: INT IntExpressionRest
| IF BoolExpression THEN Statement ELSE Statement
| DEREF LOCATION
;
IntExpressionRest
: /* epsilon */
| "+" IntExpression
;
BoolExpression
: TRUE
| FALSE
| IntExpression ">=" IntExpression
;
%%
/갈등을 줄일 :
여기 내 문법이다. Jison의 출력은 여기에 있습니다 :
Conflict in grammar: multiple actions possible when lookahead token is >= in state 6
- reduce by rule: Expression -> IntExpression
- shift token (then go to state 17)
States with conflicts:
State 6
Expression -> IntExpression . #lookaheads= EOF >= THEN DO ELSE
BoolExpression -> IntExpression .>= IntExpression #lookaheads= EOF DO THEN ELSE >=
죄송합니다. 이번에는 if/then/else 문제가 없습니다. 그의 'ELSE'는 선택 사항이 아니기 때문에이 표준 함정을 피할 수있는 아주 좋은 방법입니다. –