Debugging F中简单解析器规范中的错误#
我想知道下面的解析器规范哪里出错了。解析器旨在解析和计算表达式,如2+3*4到14。它将与FsLexYacc一起运行Debugging F中简单解析器规范中的错误#,debugging,f#,fsyacc,Debugging,F#,Fsyacc,我想知道下面的解析器规范哪里出错了。解析器旨在解析和计算表达式,如2+3*4到14。它将与FsLexYacc一起运行 %{ %} %token <int> CSTINT %token PLUS MINUS MUL %token LPAR RPAR %token EOF %left MINUS PLUS /* lowest precedence */ %left TIMES DIV /* highest precedence */ %start M
%{
%}
%token <int> CSTINT
%token PLUS MINUS MUL
%token LPAR RPAR
%token EOF
%left MINUS PLUS /* lowest precedence */
%left TIMES DIV /* highest precedence */
%start Main
%type int Main
%%
Main:
Expr EOF { $1 }
;
Expr:
| CSTINT { $1 }
| MINUS CSTINT { - $2 }
| LPAR Expr RPAR { $2 }
| Expr MUL Expr { $1 * $3 }
| Expr PLUS Expr { $1+$3 }
| Expr MINUS Expr { $1-$3 }
;
第18行是指“Main”之前的一行。bug在哪里?我认为
%type
指定的类型应该在尖括号中:
%type <int> Main
%type Main
%type <int> Main