#[derive(Debug)] pub struct Program { pub func: Vec, pub globals: Vec, } #[derive(Debug)] pub struct Function { pub name: String, pub arguments: Vec, pub statements: Vec, } #[derive(Debug, Eq, PartialEq)] pub struct Variable { pub name: String, } #[derive(Debug, Eq, PartialEq)] pub enum Statement { Declare(Variable, Option), Return(Expression), If(Expression, Box, Option>), While(Expression, Box), Exp(Expression), Compound(Vec), } #[derive(Debug, Eq, PartialEq)] pub enum Expression { Int(u32), Char(u8), FunctionCall(String, Vec), Variable(String), VariableRef(String), Assign(String, Box), AssignPostfix(String, Box), Ternary(Box, Box, Box), }