From 09ddd7b8e80d6a405d5c2812c834bd7f43e71411 Mon Sep 17 00:00:00 2001 From: Fisher <72705185+fisherjacobc@users.noreply.github.com> Date: Sat, 17 Feb 2024 16:04:50 -0500 Subject: [PATCH] fix(razorback): parser can parse multiple tags + ignore EOI --- packages/razorback/src/interpreter.rs | 1 + packages/razorback/src/parser.rs | 4 +++- packages/razorback/src/types/node.rs | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/razorback/src/interpreter.rs b/packages/razorback/src/interpreter.rs index c9c5efc..0d9c4bd 100644 --- a/packages/razorback/src/interpreter.rs +++ b/packages/razorback/src/interpreter.rs @@ -110,6 +110,7 @@ impl Interpreter { Ok(Some(Value::Object(result))) } + Node::EOI() => Ok(None), value => unimplemented!("{:?}", value), } } diff --git a/packages/razorback/src/parser.rs b/packages/razorback/src/parser.rs index 1779f4e..841a287 100644 --- a/packages/razorback/src/parser.rs +++ b/packages/razorback/src/parser.rs @@ -3,7 +3,7 @@ use pest::error::Error; use pest::{iterators::Pair, Parser}; pub fn parse_to_node(script: &str) -> Result> { - let value = Node::parse(Rule::value, script).unwrap(); + let value = Node::parse(Rule::script, script).unwrap(); let value = Node::Value(value.map(parse_pair).collect()); Ok(value) } @@ -73,6 +73,8 @@ fn parse_pair(pair: Pair) -> Node { Node::Integer(pair.as_str().parse().unwrap()) } } + Rule::script => Node::Value(pair.into_inner().map(parse_pair).collect()), + Rule::EOI => Node::EOI(), _ => unreachable!("Unknown rule {:?}", pair.as_rule()), } } diff --git a/packages/razorback/src/types/node.rs b/packages/razorback/src/types/node.rs index 4227d0b..e946c5e 100644 --- a/packages/razorback/src/types/node.rs +++ b/packages/razorback/src/types/node.rs @@ -21,4 +21,5 @@ pub enum Node<'a> { Reference(&'a str), Array(Vec>), Object(Vec<(&'a str, Node<'a>)>), + EOI(), }