%{ (* Exprpar.grm: parser specification for the simple expression language *) open Absyn; %} %token INT %token VAR %token PLUS MINUS TIMES EQ %token END IN LET %token LPAR RPAR %token EOF %left MINUS PLUS /* middle precedence */ %left TIMES /* highest precedence */ %start Main %type Main Expr %% Main: Expr EOF { $1 } ; Expr: VAR { Var $1 } | INT { Int $1 } | MINUS Expr { Mminus $2 } | LPAR Expr RPAR { $2 } | LET VAR EQ Expr IN Expr END { Let($2, $4, $6) } | Expr TIMES Expr { Times($1, $3) } | Expr PLUS Expr { Plus($1, $3) } | Expr MINUS Expr { Minus($1, $3) } ;