#[derive(Debug, Copy, Clone, PartialEq)]
pub enum Operator {
Die,
Plus,
Minus,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Expr {
Binary(Box<Expr>, Box<Expr>, Operator),
Unary(Box<Expr>, Operator),
NumericLiteral(usize),
}
pub fn numeric_literal(n: usize) -> Expr {
Expr::NumericLiteral(n)
}
pub fn unary_expr(rhs: Expr, op: Operator) -> Expr {
Expr::Unary(Box::new(rhs), op)
}
pub fn binary_expr(lhs: Expr, rhs: Expr, op: Operator) -> Expr {
Expr::Binary(Box::new(lhs), Box::new(rhs), op)
}
pub fn binary_roll_expr(lhs: usize, rhs: usize) -> Expr {
binary_expr(numeric_literal(lhs), numeric_literal(rhs), Operator::Die)
}
pub fn unary_roll_expr(rhs: usize) -> Expr {
unary_expr(numeric_literal(rhs), Operator::Die)
}