#[derive(Debug, Clone, PartialEq)]
pub enum Token {
Identifier(String),
Number(f64),
String(String),
Boolean(bool),
Equal,
NotEqual,
LessThan,
LessThanOrEqual,
GreaterThan,
GreaterThanOrEqual,
And,
Or,
Not,
Plus,
Minus,
Multiply,
Divide,
Modulo,
Power,
LeftParen,
RightParen,
Function(String),
Comma,
Eof,
}
#[derive(Debug, Clone)]
pub enum Expr {
Column(String),
Literal(LiteralValue),
Binary {
left: Box<Expr>,
op: BinaryOp,
right: Box<Expr>,
},
Unary { op: UnaryOp, operand: Box<Expr> },
Function { name: String, args: Vec<Expr> },
}
#[derive(Debug, Clone)]
pub enum LiteralValue {
Number(f64),
String(String),
Boolean(bool),
}
#[derive(Debug, Clone)]
pub enum BinaryOp {
Equal,
NotEqual,
LessThan,
LessThanOrEqual,
GreaterThan,
GreaterThanOrEqual,
And,
Or,
Add,
Subtract,
Multiply,
Divide,
Modulo,
Power,
}
#[derive(Debug, Clone)]
pub enum UnaryOp {
Not,
Negate,
}