This is a rather bad hack, but it makes parsing a lot easier, so i'll allow it for now.
36 lines
1 KiB
Rust
36 lines
1 KiB
Rust
mod ast;
|
|
mod error;
|
|
mod lex;
|
|
mod rt;
|
|
|
|
use std::time::Instant;
|
|
|
|
use ast::parse;
|
|
use rt::exec;
|
|
|
|
fn main() {
|
|
let start_time = Instant::now();
|
|
let result = parse(String::from("test.gaybuild")).unwrap();
|
|
let duration = start_time.elapsed();
|
|
match result {
|
|
Ok(tree) => {
|
|
println!("=== begin tree ===");
|
|
tree.walk(|n, d| println!("{}{}", " ".repeat(d as usize), n));
|
|
println!("=== end tree ===");
|
|
println!("parsing took {:?}\n", duration);
|
|
println!("=== begin eval ===");
|
|
let start_time = Instant::now();
|
|
let result = exec(&tree);
|
|
let duration = start_time.elapsed();
|
|
match result {
|
|
Ok(val) => {
|
|
println!("=== end eval ===");
|
|
println!("evaluation took {:?}", duration);
|
|
println!("evaluation returned {}", val)
|
|
}
|
|
Err(e) => println!("{:?}", e),
|
|
}
|
|
}
|
|
Err(e) => println!("{:?}", e),
|
|
}
|
|
}
|