2
(+, -, *,/연산자)를 사용하여 매우 간단한 식 구문 분석기를 생성하기 위해 Menhir을 테스트하고 있지만 스트림 충돌이 끝납니다.ocaml menhir - 간단한 문법에 대한 스트림의 끝 충돌
%token <int> INT
%token ADD
%token SUB
%token MUL
%token DIV
%token EOF
%token LPAREN
%token RPAREN
%start <Expr.ast option> top_expr
%%
top_expr:
| EOF
{ None }
| r = expr
{ Some r }
;
expr:
| r = term
{ r }
| l = expr; ADD; r = term
{ Expr.Add (l,r) }
| l = expr; SUB; r = term
{ Expr.Sub (l,r) }
;
term:
| r = atom
{ r }
| l = term; MUL; r = atom
{ Expr.Mul (l,r) }
| l = term; DIV; r = atom
{ Expr.Div (l,r) }
;
atom:
| LPAREN; r = expr; RPAREN
{ r }
| r = INT
{ Expr.INT r }
내가 얻을 경고는 다음과 같습니다 :
Warning: 9 states have an end-of-stream conflict.
File "expr_parser.mly", line 18, characters 6-19:
Warning: production top_expr -> expr is never reduced.
방법이 경고를 방지하기 위해 여기에 문법이야?
여기 menhir에서 생성 한 .automaton file입니다.
.automaton 파일의 깨진 링크 –