From 8d8cf342343f2a27a4ed565646339010a2c9e6d9 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 25 Aug 2018 20:38:54 -0700 Subject: [PATCH] [parser] Simple REPL that parses input and prints output --- parser/src/main.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/parser/src/main.rs b/parser/src/main.rs index a1c160a..52b164f 100644 --- a/parser/src/main.rs +++ b/parser/src/main.rs @@ -5,13 +5,32 @@ extern crate sibillexer; extern crate sibilparser; +use std::io::prelude::*; +use std::io; use sibillexer::Lexer; use sibilparser::Parser; fn main() { - let lexer = Lexer::new("(ab)".chars()); - let parser = Parser::new(lexer); - for thing in parser { - println!("main: token -> {:?}", thing); + loop { + // Print a prompt. + print!("> "); + io::stdout().flush().ok().expect("couldn't flush"); + + // Read a line from stdin. + let mut input = String::new(); + io::stdin().read_line(&mut input).unwrap(); + + // Remove the trailing newline. + input.pop(); + + // Create a lexer and parser and process the input. + let lexer = Lexer::new(input.chars()); + let parser = Parser::new(lexer); + + // Print the parser's output. + for thing in parser { + println!("{:?}", thing); + } + println!(); } }