From a99986ec4c903f116a5ed264f5cbbcba954c9338 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Wed, 25 Sep 2024 12:18:02 +0200 Subject: Can parse and evaluate multiple expressions from a single input --- rust/src/parser.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'rust/src/parser.rs') diff --git a/rust/src/parser.rs b/rust/src/parser.rs index c54386c..48ef2e0 100644 --- a/rust/src/parser.rs +++ b/rust/src/parser.rs @@ -54,10 +54,12 @@ pub fn parse(arg: &str) -> Vec { let tokens = tokenize(arg); let mut parser = Parser { tokens, index: 0 }; let mut result = Vec::new(); - let expr = parse_expression(&mut parser) - .map_err(|e| panic!("Syntax error: {}", e)) - .unwrap(); - result.push(expr); + while parser.index < parser.tokens.len() { + let expr = parse_expression(&mut parser) + .map_err(|e| panic!("Syntax error: {}", e)) + .unwrap(); + result.push(expr); + } result } @@ -248,6 +250,11 @@ mod tests { ); } + #[test] + fn parse_multiple_values() { + assert_eq!(vec![Sym("foo".to_string()), Num(42)], parse("foo 42")); + } + impl Arbitrary for Value { type Parameters = (); type Strategy = BoxedStrategy; -- cgit v1.2.3