# ambiguous grammar for online calculator, enum Expr defined in exprtrees.rs
!use crate::exprtrees::*;
!use crate::exprtrees::Expr::*;
!use rustlr::{LBox};
absyntype Expr
nonterminal E
nonterminal ES
terminal + - * ( ) ;
terminal int
topsym ES
left * 500
left + 400
left - 400
E --> int:n { n }
E --> E:e1 + E:e2 { Plus(parser.lb(e1),parser.lb(e2)) }
E --> E:e1 - E:e2 { Minus(parser.lb(e1),parser.lb(e2)) }
E ==> E:e1 * E:e2
{ Times(parser.lb(e1),parser.lb(e2)) }
<==
E --> - E:e { Negative(parser.lb(e)) }
E --> ( E:e ) { e }
ES --> E:n ; { Seq(vec![parser.lb(n)]) }
ES ==> ES:'Seq(mut v)' E:e ; {
v.push(parser.lb(e)); return Seq(v);
} <==
EOF