F# 中简单解析器规范中的错误
Bug in a simple parser specification in F#
我想知道下面的解析器规范哪里出了问题。解析器旨在解析和评估像 2+3*4 到 14 这样的表达式。它是 运行 with FsLexYacc.
%{
%}
%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 { }
;
Expr:
| CSTINT { }
| MINUS CSTINT { - }
| LPAR Expr RPAR { }
| Expr MUL Expr { * }
| Expr PLUS Expr { + }
| Expr MINUS Expr { - }
;
我收到错误消息
ExprPar.fsy(18,0): error: Unexpected character '%'%
第18行指的是“Main”之前的那一行。错误在哪里?
我认为 %type
指定的类型应该在尖括号中:
%type <int> Main
我想知道下面的解析器规范哪里出了问题。解析器旨在解析和评估像 2+3*4 到 14 这样的表达式。它是 运行 with FsLexYacc.
%{
%}
%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 { }
;
Expr:
| CSTINT { }
| MINUS CSTINT { - }
| LPAR Expr RPAR { }
| Expr MUL Expr { * }
| Expr PLUS Expr { + }
| Expr MINUS Expr { - }
;
我收到错误消息
ExprPar.fsy(18,0): error: Unexpected character '%'%
第18行指的是“Main”之前的那一行。错误在哪里?
我认为 %type
指定的类型应该在尖括号中:
%type <int> Main