From 1bd9d5bbd304926f464cf23870b17a46385b9f7a Mon Sep 17 00:00:00 2001 From: Joel Kronqvist Date: Sun, 27 Jul 2025 16:50:48 +0300 Subject: Created parse_token and added tests for it --- src/parse/mod.rs | 3 +++ src/parse/parsetree.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/parse/util.rs | 11 +++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/parse/mod.rs create mode 100644 src/parse/parsetree.rs create mode 100644 src/parse/util.rs (limited to 'src/parse') diff --git a/src/parse/mod.rs b/src/parse/mod.rs new file mode 100644 index 0000000..0da7a30 --- /dev/null +++ b/src/parse/mod.rs @@ -0,0 +1,3 @@ + +pub mod parsetree; +pub mod util; 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")))); + } + +} diff --git a/src/parse/util.rs b/src/parse/util.rs new file mode 100644 index 0000000..864005a --- /dev/null +++ b/src/parse/util.rs @@ -0,0 +1,11 @@ + +use crate::parse::parsetree::Token::*; +use crate::parse::parsetree::Token; + +pub fn sym(s: &str) -> Token { + Sym(s.to_string()) +} + +pub fn whitespace(s: &str) -> Token { + Whitespace(s.to_string()) +} -- cgit v1.2.3