feat: add monkey-rs

This commit is contained in:
2022-06-02 00:32:03 +08:00
parent 6a8d8ca043
commit 2330a646b7
13 changed files with 2241 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
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");
}