pluto-lang 0.3.9

A interpreted programming language made in Rust
use crate::lexer::tokenizer::tokenize;
use crate::parser::parser::Parser;
use crate::evaluator::evaluator::Evaluator;
use std::io::{self, Write};

pub fn repl() {
    println!("Welcome to the Pluto REPL!");
    println!("Type 'exit' to quit.");

    let base_env = Vec::new();
    let mut env = Evaluator::new(&base_env);

    loop {
        print!("> ");
        std::io::stdout().flush().unwrap();

        let mut input = String::new();
        if io::stdin().read_line(&mut input).is_err() {
            println!("Failed to read line");
            continue;
        }
        let input = input.trim();

        if input == "exit" {
            break;
        }
        if input.is_empty() {
            continue;
        }

        let tokens = tokenize(input);
        let mut parser = Parser::new(&tokens);

        match parser.parse() {
            Ok(ast) => match env.evaluate_ast(ast) {
                Ok(val) => {
                    let s = val.to_string();
                    if s != "0" && !s.is_empty() {
                        println!("{}", s);
                    }
                }
                Err(e) => println!("Runtime error: {}", e),
            },
            Err(e) => println!("Parse error: {}", e),
        }
    }
}