pub (crate) enum Expr {
Const (i32),
Var (String),
Add (Box<Expr>, Box<Expr>),
Mul (Box<Expr>, Box<Expr>)
}
impl Expr {
fn eval (self, state: &HashMap<String, i32>) -> i32 {
match self {
Expr::Const (n) => n,
Expr::Var (n) => *state.get(&n).expect("Not a varible"),
Expr::Add (l, r) => l.eval(state) + r.eval(state),
Expr::Mul (l, r) => l.eval(state) * r.eval(state),
}
}
}
можно сделать enum Operator