diff options
| author | Mel <einebeere@gmail.com> | 2021-10-18 21:55:53 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2021-10-18 21:55:53 +0200 |
| commit | efd7e869f23913e73c38cd00644be38c97cd6635 (patch) | |
| tree | f1537eebc88d8334d8bf14813efc1c64ed2f7963 /src | |
| parent | 0881af52f16dc0b6a3900180cce5187d27373901 (diff) | |
| download | rabbithole-efd7e869f23913e73c38cd00644be38c97cd6635.tar.zst rabbithole-efd7e869f23913e73c38cd00644be38c97cd6635.zip | |
Add basic expression repl.
Diffstat (limited to 'src')
| -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); + } } |
