lispers/src/bin/repl.rs

35 lines
936 B
Rust

use lispers::lisp::Expression;
use lispers::parser::ParserError;
use lispers::{lisp, parser};
use std::io::Write;
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),
}
}
}
}
}
}