Something went wrong. Try again.
Shells in OCaml forked from patrick.sirref.org/merry
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950%{ open Arith%}
%token <int> INT%token <string> VAR%token PLUSEQ MINUSEQ DIVEQ MULEQ MODEQ EQ%token PLUS MINUS MUL DIV%token LT GT EQEQ%token QUESTION COLON%token LPAREN RPAREN%token EOF
%right PLUSEQ MINUSEQ DIVEQ MULEQ MODEQ EQ%right QUESTION COLON%left PLUS MINUS%left MUL DIV%left GT LT%right UMINUS UPLUS
%start <Arith.expr> main
%%
main: | expr EOF { $1 }
expr: | v=VAR PLUSEQ e=expr { Assign (Add, v, e) } | v=VAR MINUSEQ e=expr { Assign (Sub, v, e) } | v=VAR MULEQ e=expr { Assign (Mul, v, e) } | v=VAR DIVEQ e=expr { Assign (Div, v, e) } | expr PLUS expr { Binop (Add, $1, $3) } | expr MINUS expr { Binop (Sub, $1, $3) } | expr MUL expr { Binop (Mul, $1, $3) } | expr DIV expr { Binop (Div, $1, $3) } | expr LT expr { Binop (Lt, $1, $3) } | expr GT expr { Binop (Gt, $1, $3) } | expr EQEQ expr { Binop (Eq, $1, $3) } | expr QUESTION expr COLON expr { Ternary ($1, $3, $5) }
| PLUS expr %prec UPLUS { $2 } | MINUS expr %prec UMINUS { Neg $2 }
| INT { Int $1 } | VAR { Var $1 } | LPAREN expr RPAREN { $2 }