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