diff options
| -rw-r--r-- | src/main.rs | 29 |
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); + } } |
