Ошибка в спецификации простого парсера в F # - PullRequest
1 голос
/ 03 августа 2020

Интересно, где приведенная ниже спецификация парсера пошла не так. Синтаксический анализатор стремится анализировать и оценивать выражение типа 2 + 3 * 4 до 14. Он должен запускаться с FsLexYa cc.

%{
%}

%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». Где ошибка?

1 Ответ

1 голос
/ 04 августа 2020

Я считаю, что тип, указанный в %type, должен быть в угловых скобках:

%type <int> Main 
...