#[derive(Debug, Clone)]
pub enum Expr {
Number(f64),
Variable(String),
Assign {
name: String,
expr: Box<Expr>,
},
Unary {
op: UnaryOp,
expr: Box<Expr>,
},
Binary {
left: Box<Expr>,
op: BinaryOp,
right: Box<Expr>,
},
Call {
name: String,
args: Vec<Expr>,
},
}
#[derive(Debug, Clone)]
pub enum UnaryOp {
Neg,
}
#[derive(Debug, Clone)]
pub enum BinaryOp {
Add,
Sub,
Mul,
Div,
Pow,
And,
Or,
Shl,
Shr,
}