diff options
-rw-r--r-- | src/parse/parsetree.rs | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/parse/parsetree.rs b/src/parse/parsetree.rs index 8887200..e243d56 100644 --- a/src/parse/parsetree.rs +++ b/src/parse/parsetree.rs @@ -2,6 +2,9 @@ use nom::{ IResult, Parser, + branch::alt, + bytes::complete::{tag, take_while}, + character::complete::multispace1, }; @@ -14,14 +17,22 @@ pub enum Token { Whitespace(String), } +use Token::*; +use crate::parse::util::*; + fn parse_token(s: &str) -> IResult<&str, Token> { - todo!() + alt(( + tag("(").map(|_| ParOpen), + tag(")").map(|_| ParClose), + multispace1.map(whitespace), + nom::character::complete::i32.map(Num), + take_while(|c| !(" \n\t()".contains(c))).map(sym), + )).parse(s) } #[cfg(test)] mod private_parsing_tests { - use super::{*, Token::*}; - use crate::parse::util::*; + use super::{*, parse_token}; #[test] fn test_parse_token() { |