#[derive(Debug, PartialEq)]
pub enum NodeType {
Add,
Subtract,
Multiply,
Divide,
IntLit,
}
#[derive(Debug)]
pub struct ASTNode {
pub op: NodeType,
pub left: Option<Box<ASTNode>>,
pub right: Option<Box<ASTNode>>,
pub int_value: Option<i32>,
}
impl ASTNode {
pub fn new_int_lit(value: i32) -> Self {
ASTNode {
op: NodeType::IntLit,
left: None,
right: None,
int_value: Some(value),
}
}
pub fn new_binary_op(
op: NodeType,
left: Box<ASTNode>,
right: Box<ASTNode>,
) -> Self {
ASTNode {
op,
left: Some(left),
right: Some(right),
int_value: None,
}
}
}