fix(parser): fix many bugs in parser
fixed bugs relating to parsing order and unreliable token advancement for parenthesis
This commit is contained in:
2 files changed
+7
-6
No files matched your search
+6
-6
@@ -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(),
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user