From 61b985db80a15e230476af54b0ef8783fd8cbf63 Mon Sep 17 00:00:00 2001 From: Joel Kronqvist Date: Thu, 31 Jul 2025 20:27:46 +0300 Subject: Added parse_to_ast for public use from other modules --- src/parse/parsetree.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/parse/parsetree.rs b/src/parse/parsetree.rs index 46317a4..7e1c80d 100644 --- a/src/parse/parsetree.rs +++ b/src/parse/parsetree.rs @@ -151,6 +151,15 @@ fn tokens_to_ast_inner( Ok((input.into(), res)) } +pub fn parse_to_ast(s: &str) -> Result { + let tokens = match tokenize(s) { + Ok(t) => Ok(t), + Err(e) => Err(format!("error in tokenization: {}", e)), + }?; + + tokens_to_ast(tokens.into()) +} + #[cfg(test)] mod private_parsing_tests { @@ -318,4 +327,18 @@ mod private_parsing_tests { ); } + #[test] + fn test_parse_to_ast() { + assert_eq!( + parse_to_ast("(* 2 (+ 3 4))"), + Ok(scons(scons( + Mul, + scons( + 2, + scons(scons(Add, scons(3, scons(4, Nil))), Nil) + ) + ), Nil)) + ); + } + } -- cgit v1.2.3