feat: add repl bin

This commit is contained in:
2024-11-10 16:14:37 +01:00
parent b086a89557
commit e79e44c0df
5 changed files with 111 additions and 39 deletions

33
src/repl.rs Normal file
View File

@@ -0,0 +1,33 @@
use lisp::Expression;
use parser::ParserError;
use std::io::Write;
mod parser;
mod lisp;
fn main() {
let env = lisp::Environment::default();
loop {
print!("> ");
std::io::stdout().flush().unwrap();
let mut input = String::new();
if std::io::stdin().read_line(&mut input).unwrap() == 0 {
println!("Exiting REPL...");
break;
}
match parser::ExpressionStream::from_char_stream(input.chars()).collect::<Result<Vec<Expression>, ParserError>>() {
Err(e) => println!("Parser Error: {:?}", e),
Ok(exprs) => {
for expr in exprs {
match lisp::eval(&env, expr) {
Err(e) => println!("Eval Error: {}", e),
Ok(val) => println!("{}", val),
}
}
}
}
}
}