use std::{fs::File, io::Read}; mod token; mod expr; mod lexer; mod error; use lexer::Lexer; mod parser; use parser::Parser; mod eval; use eval::Evaluator; fn main() -> std::io::Result<()> { let args = std::env::args().collect::>(); let mut source = String::new(); File::open(&args[1])?.read_to_string(&mut source)?; println!("{:?}", source); let mut lexer = Lexer::new(&source); let mut tokens = Vec::new(); while let Some(tok) = lexer.next() { print!("{tok:?}, "); tokens.push(tok); } println!("\n"); let mut parser = Parser::new(tokens); loop { let parsed = parser.parse().unwrap_or(expr::Expr::EOL); match parsed { expr::Expr::EOL => break, _ => { println!("AST: {:?}", parsed); let eval = Evaluator::new(parsed); println!("Eval: {:?}", eval.eval()); } } } Ok(()) }