pub struct TokenError { pub msg: String, } pub struct ParseError { pub msg: String, } pub trait ProgrammingLanguage { type Token; type AST; fn tokenize(input: &str) -> Result, TokenError>; fn parse(input: Vec) -> Result; fn evaluate(input: &Self::AST); fn compile(input: &Self::AST); }