From e0941a9db8b3a8a99465bb2c7a7c99f3cf0ccb83 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 1 Sep 2019 20:18:32 +0200 Subject: [PATCH] Handle comments --- src/Parser/Lexer.cpp | 14 +++++++++++++- src/Parser/Lexer.hpp | 1 + src/Parser/TokenKind.hpp | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Parser/Lexer.cpp b/src/Parser/Lexer.cpp index 5f02b3a..6b4badc 100644 --- a/src/Parser/Lexer.cpp +++ b/src/Parser/Lexer.cpp @@ -18,7 +18,7 @@ namespace Porygon::Parser { while (true) { Token *next = this->LexNext(this->Next()); auto nextKind = next->GetKind(); - if (nextKind != TokenKind::WhiteSpace) + if (nextKind != TokenKind::WhiteSpace && nextKind != TokenKind::Comment) tokens.push_back(next); else delete next; @@ -54,6 +54,9 @@ namespace Porygon::Parser { case '+': return new SimpleToken(TokenKind::PlusToken, this->_position - 1, 1); case '-': + if (Lexer::Peek() == '-') { + return LexComment(); + } return new SimpleToken(TokenKind::MinusToken, this->_position - 1, 1); case '/': return new SimpleToken(TokenKind::SlashToken, this->_position - 1, 1); @@ -318,4 +321,13 @@ namespace Porygon::Parser { return new StringToken(stream.str(), start, end - start); } + Token *Lexer::LexComment() { + auto start = Lexer::_position; + while (Lexer::Next() != '\n'){ + continue; + } + auto length = Lexer::_position - start; + return new SimpleToken(TokenKind::Comment, start, length); + } + } \ No newline at end of file diff --git a/src/Parser/Lexer.hpp b/src/Parser/Lexer.hpp index 6224633..9c9254a 100644 --- a/src/Parser/Lexer.hpp +++ b/src/Parser/Lexer.hpp @@ -21,6 +21,7 @@ namespace Porygon::Parser{ Token* LexNumber(char16_t c); Token* LexIdentifierOrKeyword(); Token* LexString(char16_t c); + Token* LexComment(); public: Porygon::Script* ScriptData; diff --git a/src/Parser/TokenKind.hpp b/src/Parser/TokenKind.hpp index dd2e0f2..b90503d 100644 --- a/src/Parser/TokenKind.hpp +++ b/src/Parser/TokenKind.hpp @@ -6,6 +6,7 @@ namespace Porygon::Parser { EndOfFile, BadToken, WhiteSpace, + Comment, PlusToken, MinusToken,