diff options
Diffstat (limited to 'src/parse/parsetree.rs')
-rw-r--r-- | src/parse/parsetree.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/parse/parsetree.rs b/src/parse/parsetree.rs new file mode 100644 index 0000000..8887200 --- /dev/null +++ b/src/parse/parsetree.rs @@ -0,0 +1,40 @@ + +use nom::{ + IResult, + Parser, +}; + + +#[derive(Debug,PartialEq)] +pub enum Token { + ParOpen, + ParClose, + Num(i32), + Sym(String), + Whitespace(String), +} + +fn parse_token(s: &str) -> IResult<&str, Token> { + todo!() +} + +#[cfg(test)] +mod private_parsing_tests { + use super::{*, Token::*}; + use crate::parse::util::*; + + #[test] + fn test_parse_token() { + assert_eq!(parse_token("()"), Ok((")", ParOpen))); + assert_eq!(parse_token(")"), Ok(("", ParClose))); + + assert_eq!(parse_token(" \t\n"), Ok(("", whitespace(" \t\n")))); + + assert_eq!(parse_token("1 23"), Ok((" 23", Num(1)))); + assert_eq!(parse_token("23"), Ok(("", Num(23)))); + + assert_eq!(parse_token("Nil a"), Ok((" a", sym("Nil")))); + assert_eq!(parse_token("a"), Ok(("", sym("a")))); + } + +} |