From ba44423f77c5446e996429b8bf4945f3630de24c Mon Sep 17 00:00:00 2001 From: trivernis Date: Tue, 4 Aug 2020 17:25:55 +0200 Subject: [PATCH] Add easy to use parse function --- src/lib.rs | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index eb83dd6..6481938 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,16 +7,30 @@ extern crate maplit; #[macro_use] extern crate lazy_static; +use crate::elements::special::Expression; +use crate::parsing::tokenizer::Tokenizer; +use crate::parsing::tree_parser::TreeParser; + pub mod elements; pub mod parsing; -mod tokens; -mod utils; +pub mod tokens; +pub(crate) mod utils; + +/// Parses the contents of a string into an AsciiMath expression +pub fn parse(content: String) -> Expression { + let mut tokenizer = Tokenizer::new(content); + let tokens = tokenizer.parse(); + let mut tree_parser = TreeParser::new(tokens); + + tree_parser.parse() +} #[cfg(test)] mod tests { use crate::elements::literal::{Literal, Number}; use crate::elements::special::{Expression, Special, Sum}; use crate::elements::Element; + use crate::parse; use crate::parsing::tokenizer::Tokenizer; use crate::parsing::tree_parser::TreeParser; use crate::tokens::Function::Exp; @@ -145,25 +159,17 @@ mod tests { assert_eq!(expression, test_expression) } - #[test] + //#[test] fn it_parses_into_a_tree2() { - let str_expression = "bb\"test\" bb"; - let mut tokenizer = Tokenizer::new(str_expression.to_string()); - let tokens = tokenizer.parse(); - let mut tree_parser = TreeParser::new(tokens.clone()); - let expression = tree_parser.parse(); fs::write( "test-files/test.txt", - format!("{}\n\n{:?}\n\n{:#?}", str_expression, tokens, expression), + format!("{:#?}", parse("a * b^4 - c(c-2)".to_string())), ); } #[bench] fn bench_tokenizer(b: &mut Bencher) { let expression = "sum_(iiiiiiiii=1)^n i^3=((n(n+1))/2)^2"; - b.iter(|| { - let mut tokenizer = Tokenizer::new(expression.to_string()); - let _ = tokenizer.parse(); - }); + b.iter(|| parse(expression.to_string())); } }