aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-10-18 21:55:53 +0200
committerMel <einebeere@gmail.com>2021-10-18 21:55:53 +0200
commitefd7e869f23913e73c38cd00644be38c97cd6635 (patch)
treef1537eebc88d8334d8bf14813efc1c64ed2f7963
parent0881af52f16dc0b6a3900180cce5187d27373901 (diff)
downloadrabbithole-efd7e869f23913e73c38cd00644be38c97cd6635.tar.zst
rabbithole-efd7e869f23913e73c38cd00644be38c97cd6635.zip
Add basic expression repl.
-rw-r--r--src/main.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/main.rs b/src/main.rs
index 1825af5..d433a16 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2,20 +2,35 @@ mod interpret;
mod lex;
mod parse;
+use std::io::{self, Write};
+
use lex::lexer::Lexer;
use interpret::walker::Walker;
use parse::parser::Parser;
+const PROMPT: &'static str = "🐇: ";
+
fn main() {
- let source = "1 * 2 + 3 + (-1)";
+ let walker = Walker::new();
- let lexer = Lexer::new(source);
- let mut parser = Parser::new(lexer);
+ let mut input_buffer;
- let node = parser.parse().expect("Failed parsing.");
+ loop {
+ print!("{}", PROMPT);
+ io::stdout().flush().expect("Failed flushing.");
- let walker = Walker::new();
- let result = walker.walk(&node).expect("Failed interpreting.");
- println!("{}", result);
+ input_buffer = String::new();
+ io::stdin()
+ .read_line(&mut input_buffer)
+ .expect("Failed reading input.");
+
+ let lexer = Lexer::new(input_buffer.trim());
+ let mut parser = Parser::new(lexer);
+
+ let node = parser.parse().expect("Failed parsing.");
+ let result = walker.walk(&node).expect("Failed interpreting.");
+
+ println!("🥕: {}\n", result);
+ }
}