1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
mod constants;
mod lexer;
mod parser;
mod evaluator;
mod utils;
use utils::args::get_args;
use std::fs;
fn main() {
// Example usage of the lexer
// let input = "let x = 5 + 5; let y = x * 2;";
// let tokens = lexer::tokenizer::tokenize(input);
// for token in &tokens {
// println!("{:#?}", token);
// }
// // Example usage of the parser
// let mut ast = parser::parser::Parser::new(&tokens);
// let ast = ast.parse().unwrap();
// println!("{:#?}", ast);
// // Example usage of the evaluator
// let mut evaluator = evaluator::evaluator::Evaluator::new(&tokens);
// let result = evaluator.evaluate().unwrap();
// println!("Result: {:?}", result);
let args = get_args();
if args.len() < 2 {
eprintln!("Usage: {} <filename>", args[0]);
return;
}
let filename = &args[1];
let contents = fs::read_to_string(filename).expect("Something went wrong reading the file");
let tokens = lexer::tokenizer::tokenize(&contents);
// for token in &tokens {
// println!("{:?}", token);
// }
// let mut parser = parser::parser::Parser::new(&tokens);
// let ast = parser.parse().unwrap();
// println!("{:#?}", ast);
let mut evaluator = evaluator::evaluator::Evaluator::new(&tokens);
match evaluator.evaluate() {
Ok(result) => {
// Optionally print the result
// println!("Result: {:?}", result);
}
Err(e) => {
eprintln!("Runtime error: {}", e);
}
}
}