1use crate::environment::Environment;
7use crate::evaluator::evaluate;
8use crate::lexer::tokenize;
9use crate::parser::parse;
10use std::io::{self, Write};
11
12pub fn start_repl() {
18 println!("Welcome to R2Rust REPL! 🚀");
19 println!("Type 'exit' to quit or 'help' for instructions.");
20
21 let mut input = String::new();
22 let mut environment = Environment::new(); loop {
25 print!("rustr> ");
27 io::stdout().flush().unwrap();
28
29 input.clear();
31 if io::stdin().read_line(&mut input).is_err() {
32 println!("Error reading input. Try again.");
33 continue;
34 }
35 let trimmed_input = input.trim();
36
37 if trimmed_input == "exit" {
39 println!("Goodbye!");
40 break;
41 } else if trimmed_input == "help" {
42 print_help();
43 continue;
44 }
45
46 let tokens = match tokenize(trimmed_input) {
48 tokens => tokens,
49 };
50
51 let ast = match parse(&tokens) {
53 Ok(ast) => ast,
54 Err(e) => {
55 println!("Parse Error: {}", e);
56 continue;
57 }
58 };
59
60 match evaluate(ast, &mut environment) {
62 Ok(result) => println!("Result: {}", result),
63 Err(e) => println!("Evaluation Error: {}", e),
64 }
65 }
66}
67
68fn print_help() {
72 println!("R2Rust REPL Instructions:");
73 println!(" - Type mathematical expressions like `10 + 20`.");
74 println!(" - Assign variables with `<-`, e.g., `x <- 42`.");
75 println!(" - Use variables in expressions, e.g., `y <- x + 8`.");
76 println!(" - Type 'exit' to quit.");
77}