rat/src/main.rs
2026-06-16 23:37:18 +02:00

45 lines
969 B
Rust

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::<Vec<String>>();
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(())
}