diff --git a/src/lib.rs b/src/lib.rs index 88d2720..e87a07f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,9 @@ -pub mod lexer; -pub mod errors; +mod lexer; mod parser; +pub use lexer::errors as lexer_errors; +pub use parser::errors as parser_errors; + pub fn calculate(expression: &str) -> Result { Ok(parser::parse(lexer::Lexer::new(expression))?) } diff --git a/src/main.rs b/src/main.rs index a49b4bc..6047c9a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,21 @@ -use s5_cb_calculator::lexer::Lexer; +use std::io; +use std::io::Write; +use s5_cb_calculator::calculate; fn main() { println!("Hi there! Welcome to OverComplicatedCalculator v1.0!"); println!("To have OCC calculate something, just type it in!"); + loop { + print!(" |> "); + io::stdout().flush().expect("Couldn't flush output!"); + let mut expression = String::new(); + io::stdin() + .read_line(&mut expression) + .expect("Couldn't read line, please try again later!"); + match calculate(&expression.trim()) { + Ok(res) => println!("ans: {}", res), + Err(err) => println!("Expression couldn't be parsed: {:?}", err) + } + } }