45 lines
969 B
Rust
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(())
|
|
}
|