use std::collections::HashMap;
#[derive(Default)]
pub struct Context {
pub variables: HashMap<String, String>,
pub functions: HashMap<String, (Vec<String>, Vec<Stmt>)>,
}
#[derive(Debug, Clone)]
pub enum Expr {
Int(i64),
Str(String),
Var(String),
Call(String, Vec<Expr>),
Binary(Box<Expr>, Op, Box<Expr>),
}
#[derive(Debug, Clone)]
pub enum Stmt {
Print(Expr),
Let(String, Expr),
If {
condition: Expr,
then_branch: Vec<Stmt>,
else_branch: Option<Vec<Stmt>>,
},
While {
condition: Expr,
body: Vec<Stmt>,
},
Break,
Continue,
Fn {
name: String,
params: Vec<String>,
body: Vec<Stmt>,
},
Call(String, Vec<Expr>),
Return(Expr),
}
#[derive(Debug, Clone)]
pub enum Op {
Add,
Sub,
Mul,
Div,
Greater,
Less,
GreaterEq,
LessEq,
Equal,
NotEqual,
}
pub enum LoopControl {
None,
Break,
Continue,
Return(String),
}