From b275e1fbd68dbba66139832ad29ca339b99b8df6 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Wed, 5 Jun 2019 21:01:59 +0200 Subject: [PATCH] Added basics for lexing index expressions --- src/Parser/Lexer.cpp | 6 ++++++ src/Parser/Parser.cpp | 14 +++++++++++--- src/Parser/TokenKind.hpp | 4 ++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/Parser/Lexer.cpp b/src/Parser/Lexer.cpp index ef9823b..0778f6c 100644 --- a/src/Parser/Lexer.cpp +++ b/src/Parser/Lexer.cpp @@ -65,8 +65,14 @@ IToken* Lexer::LexNext(char c){ return new SimpleToken(TokenKind::OpenParenthesis, this -> _position - 1, 1); case ')': return new SimpleToken(TokenKind::CloseParenthesis, this -> _position - 1, 1); + case '[': + return new SimpleToken(TokenKind::OpenSquareBracket, this -> _position - 1, 1); + case ']': + return new SimpleToken(TokenKind::CloseSquareBracket, this -> _position - 1, 1); case ',': return new SimpleToken(TokenKind::CommaToken, this -> _position - 1, 1); + case '.': + return new SimpleToken(TokenKind::PeriodToken, this -> _position - 1, 1); case '=': if (Lexer::Peek() == '='){ Lexer::Next(); diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index d4c813a..d6ca0ed 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -139,9 +139,17 @@ ParsedStatement *Parser::ParseFunctionDeclaration(IToken *current) { ParsedExpression* Parser::ParseExpression(IToken* current){ auto expression = this -> ParseBinaryExpression(current, OperatorPrecedence::No); - while (this -> Peek() -> GetKind() == TokenKind::OpenParenthesis){ - expression = this->ParseFunctionCallExpression(expression); - //TODO: Function Evaluation + auto peekKind = this->Peek()->GetKind(); + while (peekKind == TokenKind::OpenParenthesis || + peekKind == TokenKind::OpenSquareBracket || + peekKind == TokenKind::PeriodToken){ + if (peekKind == TokenKind::OpenParenthesis){ + expression = this->ParseFunctionCallExpression(expression); + } else if (peekKind == TokenKind::OpenSquareBracket){ + //TODO: index expression + } else { + //TODO: index period expression + } } return expression; } diff --git a/src/Parser/TokenKind.hpp b/src/Parser/TokenKind.hpp index 4286370..cedb6de 100644 --- a/src/Parser/TokenKind.hpp +++ b/src/Parser/TokenKind.hpp @@ -15,6 +15,10 @@ enum class TokenKind{ InequalityToken, OpenParenthesis, CloseParenthesis, + OpenSquareBracket, + CloseSquareBracket, + + PeriodToken, CommaToken, Identifier,