1

我想知道下面的解析器规范哪里出错了。解析器旨在解析和评估像 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 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 } 
;

我得到了错误

ExprPar.fsy(18,0): error: Unexpected character '%'%

第 18 行是指“Main”之前的行。错误在哪里?

4

1 回答 1

1

我相信由指定的类型%type应该在尖括号中:

%type <int> Main 
于 2020-08-03T23:25:46.033 回答