From 1488a5108122977764c89871b7ee8af7992ffdb3 Mon Sep 17 00:00:00 2001 From: ozzy <2+ozzy@noreply.localhost> Date: Fri, 25 Sep 2026 21:20:08 -0500 Subject: [PATCH] fix(parser): fix many bugs in parser fixed bugs relating to parsing order and unreliable token advancement for parenthesis --- just | 1 + src/math/parser.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 just diff --git a/just b/just new file mode 100644 index 0000000..1d4a811 --- /dev/null +++ b/just @@ -0,0 +1 @@ +(5) run diff --git a/src/math/parser.rs b/src/math/parser.rs index e08948f..a3124aa 100644 --- a/src/math/parser.rs +++ b/src/math/parser.rs @@ -48,7 +48,7 @@ impl Parser { } fn parse_multiplicative(&mut self) -> Expression { - let mut left = self.parse_primary(); + let mut left = self.parse_exponential(); while let Some(token) = self.tokens.get(self.position) { match token { @@ -73,7 +73,6 @@ impl Parser { let right = self.parse_group(); left = Expression::Operation(Operator::Multiply, Box::new(left), Box::new(right)); - self.position += 1; } Token::Identifier(_) => { let right = self.parse_primary(); @@ -88,15 +87,14 @@ impl Parser { } fn parse_exponential(&mut self) -> Expression { - let mut left = self.parse_primary(); + let mut left = self.parse_group(); while let Some(token) = self.tokens.get(self.position) { match token { Token::Operator(Operator::Power) => { self.position += 1; let right = self.parse_group(); - left = - Expression::Operation(Operator::Multiply, Box::new(left), Box::new(right)); + left = Expression::Operation(Operator::Power, Box::new(left), Box::new(right)); } _ => break, } @@ -109,7 +107,9 @@ impl Parser { match self.tokens.get(self.position).expect("expected token!") { Token::OpenParen => { self.position += 1; - self.parse_additive() + let expression = self.parse_additive(); + self.position += 1; + expression } _ => self.parse_primary(), }