Added grouping

This commit is contained in:
Rafał Grodziński
2025-05-31 20:54:25 +09:00
parent c6f2156e3b
commit 2b78b5bf23
6 changed files with 38 additions and 2 deletions

View File

@@ -33,7 +33,9 @@ shared_ptr<Expression> Parser::primary() {
do {
if((expression = matchInteger()) != Expression::Invalid)
break;
if((expression = matchGrouping()) != Expression::Invalid)
break;
} while(false);
return expression;
@@ -49,6 +51,20 @@ shared_ptr<Expression> Parser::matchInteger() {
return Expression::Invalid;
}
shared_ptr<Expression> Parser::matchGrouping() {
Token token = tokens.at(currentIndex);
if (token.getKind() == Token::Kind::LEFT_PAREN) {
currentIndex++;
shared_ptr<Expression> expression = term();
if (tokens.at(currentIndex).getKind() == Token::Kind::RIGHT_PAREN) {
currentIndex++;
return make_shared<Expression>(Expression::Kind::GROUPING, token, expression, nullptr);
}
}
return Expression::Invalid;
}
shared_ptr<Expression> Parser::matchBinary(shared_ptr<Expression> left) {
Token token = tokens.at(currentIndex);
if (token.isOneOf({Token::Kind::PLUS, Token::Kind::MINUS, Token::Kind::STAR, Token::Kind::SLASH, Token::Kind::PERCENT})) {