#[derive(Clone, Debug)]
pub enum Expression {
Boolean(BoolExpression),
Real(RealExpression),
String(StringExpression),
}
#[derive(Clone, Debug)]
pub enum BoolExpression {
And(Box<BoolExpression>, Box<BoolExpression>),
Or(Box<BoolExpression>, Box<BoolExpression>),
Not(Box<BoolExpression>),
Equal(Box<RealExpression>, Box<RealExpression>),
Greater(Box<RealExpression>, Box<RealExpression>),
GreaterEqual(Box<RealExpression>, Box<RealExpression>),
Less(Box<RealExpression>, Box<RealExpression>),
LessEqual(Box<RealExpression>, Box<RealExpression>),
NotEqual(Box<RealExpression>, Box<RealExpression>),
StrEqual(StringExpression, StringExpression),
StrNotEqual(StringExpression, StringExpression),
}
#[derive(Clone, Debug)]
pub enum RealExpression {
Add(Box<RealExpression>, Box<RealExpression>),
Div(Box<RealExpression>, Box<RealExpression>),
Mul(Box<RealExpression>, Box<RealExpression>),
Pow(Box<RealExpression>, Box<RealExpression>),
Sub(Box<RealExpression>, Box<RealExpression>),
Neg(Box<RealExpression>),
Literal(f64),
Binding(BindingId),
}
#[derive(Clone, Debug)]
pub enum StringExpression {
Literal(String),
Binding(BindingId),
}
pub type BindingId = usize;