aboutsummaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/parsetree.rs17
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() {