#[derive(Debug, Clone)]
pub enum Expr {
Number(i64),
Var(usize),
Add(Box<Expr>, Box<Expr>),
Sub(Box<Expr>, Box<Expr>),
Mul(Box<Expr>, Box<Expr>),
}
#[derive(Debug, Clone)]
pub enum Statement {
Assign { var_index: usize, value: Expr },
Input { var_index: usize },
PrintNum(Expr),
PrintChar(Expr),
PrintNewline,
Conditional { condition: Expr, body: Vec<Statement> },
Goto(usize),
Return(Expr),
}
#[derive(Debug)]
pub struct Program {
pub statements: Vec<Statement>,
}