36 lines
828 B
Rust
36 lines
828 B
Rust
mod lexer;
|
|
mod ast;
|
|
mod parser;
|
|
mod object;
|
|
mod environment;
|
|
mod evaluator;
|
|
mod inbuilt;
|
|
|
|
use linefeed::{Interface, ReadResult};
|
|
use crate::lexer::Lexer;
|
|
use crate::evaluator::eval_program;
|
|
use std::rc::Rc;
|
|
use std::cell::RefCell;
|
|
use crate::environment::Environment;
|
|
|
|
fn main() {
|
|
|
|
let reader = Interface::new("monkey-rs").unwrap();
|
|
let mut env = Rc::new(RefCell::new(Environment::new()));
|
|
|
|
reader.set_prompt("monkey-rs> ").unwrap();
|
|
|
|
while let ReadResult::Input(input) = reader.read_line().unwrap() {
|
|
if input.eq("exit") {
|
|
break;
|
|
}
|
|
let lexer = Lexer::new(&*input);
|
|
let mut parser = parser::Parser::new(lexer);
|
|
let program = parser.parse_program().unwrap();
|
|
|
|
println!("{}", eval_program(program.as_ref(), &mut env));
|
|
}
|
|
|
|
println!("Good bye");
|
|
}
|