fix(parser): allow negative numbers
made adding a minus sign before a group/primary expression implicitly multiply by -1
This commit is contained in:
1 file changed
+11
@@ -1,3 +1,5 @@
|
|||||||
|
use rust_decimal::dec;
|
||||||
|
|
||||||
use crate::math::{
|
use crate::math::{
|
||||||
lexer::Token,
|
lexer::Token,
|
||||||
types::{Expression, Operator},
|
types::{Expression, Operator},
|
||||||
@@ -126,6 +128,15 @@ impl Parser {
|
|||||||
self.position += 1;
|
self.position += 1;
|
||||||
Expression::Number(num)
|
Expression::Number(num)
|
||||||
}
|
}
|
||||||
|
Token::Operator(Operator::Subtract) => {
|
||||||
|
self.position += 1;
|
||||||
|
let right = self.parse_group();
|
||||||
|
Expression::Operation(
|
||||||
|
Operator::Multiply,
|
||||||
|
Box::new(Expression::Number(dec!(-1))),
|
||||||
|
Box::new(right),
|
||||||
|
)
|
||||||
|
}
|
||||||
Token::Identifier(identifier) => {
|
Token::Identifier(identifier) => {
|
||||||
let is_function =
|
let is_function =
|
||||||
matches!(self.tokens.get(self.position + 1), Some(Token::OpenParen));
|
matches!(self.tokens.get(self.position + 1), Some(Token::OpenParen));
|
||||||
|
|||||||
Reference in new issue
Block a user