summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorItamar <itamar8910@gmail.com>2021-08-13 12:11:26 +0300
committerAndreas Kling <kling@serenityos.org>2021-08-14 12:40:55 +0200
commitc7d3a7789c6a14100ff0b4c8eaf2b0d7d111347c (patch)
treede3ddc915d94d7ebf9a775faa890f3694cd7b3fa
parent06e47ce7aa365dec0a6cc82cdb3560cbd5527fad (diff)
downloadserenity-c7d3a7789c6a14100ff0b4c8eaf2b0d7d111347c.zip
LibCpp: Add lexer option to ignore whitespace tokens
-rw-r--r--Userland/Libraries/LibCpp/Lexer.cpp2
-rw-r--r--Userland/Libraries/LibCpp/Lexer.h6
2 files changed, 8 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCpp/Lexer.cpp b/Userland/Libraries/LibCpp/Lexer.cpp
index 56ab1afd6c..2edb5b4863 100644
--- a/Userland/Libraries/LibCpp/Lexer.cpp
+++ b/Userland/Libraries/LibCpp/Lexer.cpp
@@ -222,6 +222,8 @@ Vector<Token> Lexer::lex()
token_start_position = m_position;
};
auto commit_token = [&](auto type) {
+ if (m_options.ignore_whitespace && type == Token::Type::Whitespace)
+ return;
tokens.empend(type, token_start_position, m_previous_position, m_input.substring_view(token_start_index, m_index - token_start_index));
};
diff --git a/Userland/Libraries/LibCpp/Lexer.h b/Userland/Libraries/LibCpp/Lexer.h
index bbee2bbf9f..88cd64d4a8 100644
--- a/Userland/Libraries/LibCpp/Lexer.h
+++ b/Userland/Libraries/LibCpp/Lexer.h
@@ -18,6 +18,8 @@ public:
Vector<Token> lex();
+ void set_ignore_whitespace(bool value) { m_options.ignore_whitespace = value; }
+
private:
char peek(size_t offset = 0) const;
char consume();
@@ -26,6 +28,10 @@ private:
size_t m_index { 0 };
Position m_previous_position { 0, 0 };
Position m_position { 0, 0 };
+
+ struct Options {
+ bool ignore_whitespace { false };
+ } m_options;
};
}