summaryrefslogtreecommitdiff
path: root/rust/src/parser.rs
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud.bailly@iohk.io>2024-09-25 12:18:02 +0200
committerArnaud Bailly <arnaud.bailly@iohk.io>2024-09-25 12:19:07 +0200
commita99986ec4c903f116a5ed264f5cbbcba954c9338 (patch)
tree4f3449a13877db4aeda1964d930fb8a8186ccfd5 /rust/src/parser.rs
parentb849745636c17a9015198c2a1865b8dbb43ff4a3 (diff)
downloadlambda-nantes-a99986ec4c903f116a5ed264f5cbbcba954c9338.tar.gz
Can parse and evaluate multiple expressions from a single input
Diffstat (limited to 'rust/src/parser.rs')
-rw-r--r--rust/src/parser.rs15
1 files changed, 11 insertions, 4 deletions
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<Value> {
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<Self>;