fix(parser): fix many bugs in parser

fixed bugs relating to parsing order and unreliable token advancement for parenthesis
This commit is contained in:
ozzy committed 2026-09-25 21:20:08 -05:00
1 parent 64d6f8f095
commit 1488a51081
2 files changed
+7 -6

No files matched your search

+6 -6
View File
@@ -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(),
}