#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
Number(f64),
String(String),
Bool(bool),
Identifier(String),
Add(Box<Expr>, Box<Expr>),
Subtract(Box<Expr>, Box<Expr>),
Multiply(Box<Expr>, Box<Expr>),
Divide(Box<Expr>, Box<Expr>),
Power(Box<Expr>, Box<Expr>),
Modulo(Box<Expr>, Box<Expr>),
Equal(Box<Expr>, Box<Expr>),
NotEqual(Box<Expr>, Box<Expr>),
LessThan(Box<Expr>, Box<Expr>),
GreaterThan(Box<Expr>, Box<Expr>),
LessThanOrEqual(Box<Expr>, Box<Expr>),
GreaterThanOrEqual(Box<Expr>, Box<Expr>),
And(Box<Expr>, Box<Expr>),
Or(Box<Expr>, Box<Expr>),
Not(Box<Expr>),
UnaryMinus(Box<Expr>),
FunctionCall { name: String, args: Vec<Expr> },
Max(Box<Expr>, Box<Expr>),
Min(Box<Expr>, Box<Expr>),
Rnd(Box<Expr>, Box<Expr>),
Ceil(Box<Expr>),
Floor(Box<Expr>),
Exp(Box<Expr>),
Year(Box<Expr>),
Month(Box<Expr>),
Day(Box<Expr>),
Substr(Box<Expr>, Box<Expr>, Box<Expr>),
AddDays(Box<Expr>, Box<Expr>),
GetDiffDays(Box<Expr>, Box<Expr>),
PaddedString(Box<Expr>, Box<Expr>),
GetDiffMonths(Box<Expr>, Box<Expr>),
GetOutputFrom(Box<Expr>),
}
#[derive(Debug, Clone, PartialEq)]
pub enum Statement {
Return(Expr),
If {
condition: Expr,
then_block: Box<Statement>,
else_ifs: Vec<(Expr, Statement)>,
else_block: Option<Box<Statement>>,
},
Error(Expr),
}
#[derive(Debug, Clone, PartialEq)]
pub struct Program {
pub statement: Statement,
}