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
mod constants;
mod lexer;
mod parser;
mod evaluator;
mod utils;
mod builtins;
mod repl;
use utils::args::get_args;
use std::fs;
use repl::repl::repl;
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 {
repl();
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 ast = parser::parser::Parser::new(&tokens);
let ast = ast.parse().unwrap();
println!("{:#?}", ast);
let mut evaluator = evaluator::evaluator::Evaluator::new(&tokens);
evaluator.evaluate().unwrap();
}