diff --git a/Cargo.toml b/Cargo.toml index 6b3d19e..e2f93e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ name = "asciimath-rs" description = "AsciiMath parser" repository = "https://github.com/trivernis/asciimath-rs" -version = "0.6.0" +version = "0.6.1" authors = ["trivernis "] edition = "2018" readme = "README.md" diff --git a/src/lib.rs b/src/lib.rs index a93f644..0280b44 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,10 +22,10 @@ pub(crate) mod utils; /// /// Example: /// -/// ```rust +/// ``` /// let expression = asciimath_rs::parse("sin(2x) + 3".to_string()); /// ``` -pub fn parse(content: String) -> Expression { +pub fn parse>(content: S) -> Expression { let mut tokenizer = Tokenizer::new(content); let tokens = tokenizer.parse(); let mut tree_parser = TreeParser::new(tokens); diff --git a/src/parsing/tokenizer.rs b/src/parsing/tokenizer.rs index 0cfa27c..c4e2e16 100644 --- a/src/parsing/tokenizer.rs +++ b/src/parsing/tokenizer.rs @@ -19,14 +19,24 @@ pub struct Tokenizer { } impl Tokenizer { - pub fn new(text: String) -> Self { - let mut chars = text.chars().collect::>(); + /// Creates a new AsciiMath tokenizer with a given input string. + /// After creation the parse method can be used to parse a list of tokens + /// Example: + /// ``` + /// use asciimath_rs::parsing::tokenizer::Tokenizer; + /// + /// let mut tokenizer = Tokenizer::new("2^(2-i)"); + /// let tokens = tokenizer.parse(); + /// ``` + pub fn new>(text: S) -> Self { + let mut chars = text.as_ref().chars().collect::>(); chars.push('\n'); Self { ctm: CharTapeMachine::new(chars), } } + /// Parses the input string passed on creation of the tokenizer into a list of tokens pub fn parse(&mut self) -> Vec { let mut tokens = Vec::::new(); self.ctm.seek_whitespace(); diff --git a/src/parsing/tree_parser.rs b/src/parsing/tree_parser.rs index 5058ac2..82abc47 100644 --- a/src/parsing/tree_parser.rs +++ b/src/parsing/tree_parser.rs @@ -17,6 +17,21 @@ pub struct TreeParser { } impl TreeParser { + /// Creates a new TreeParser that takes tokens parsed by the Tokenizer. The parse method + /// can be used to create the Expression tree. + /// Example: + /// ``` + /// use asciimath_rs::parsing::tokenizer::Tokenizer; + /// use asciimath_rs::parsing::tree_parser::TreeParser; + /// + /// // use the tokenizer to create a list of tokens + /// let mut tokenizer = Tokenizer::new("2*2"); + /// let tokens = tokenizer.parse(); + /// + /// // use the tree parser to build the expression tree + /// let mut tree_parser = TreeParser::new(tokens); + /// tree_parser.parse(); + /// ``` pub fn new(tokens: Vec) -> Self { Self { tokens, @@ -25,6 +40,7 @@ impl TreeParser { } } + /// Creates an expression tree out of the tokens passed to the TreeParser on creation pub fn parse(&mut self) -> Expression { self.remove_whitespace(); self.parse_expression()