Add easy to use parse function

pull/1/head
trivernis 4 years ago
parent ce19e13e45
commit ba44423f77

@ -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()));
}
}

Loading…
Cancel
Save