xiiregexbuilder

FPGA-Accelerated Regular Expression Matching Engine
commit cb0d9aba0f8b2d5d8f2a43d17c2eb32c51ef9fa3
parent bf711fbd4dcf55b2101e316cafd3ef55f89adfb2
Author: Pranav Prabhu Kumble <kumblepranavprabhu@gmail.com>
Date:   Mon, 30 Mar 2026 06:18:27 +0530

Week 2: Implement Lexer (Part 3: Finalizing)

Diffstat:
Msrc/lexer.cpp | 19+++++++++++++++++++
Msrc/lexer.h | 12++++++++++++
2 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/lexer.cpp b/src/lexer.cpp @@ -58,3 +58,22 @@ std::vector<Token> Lexer::tokenize() { tokens.emplace_back(TokenType::PIPE, advance(), line, currentCharCol); break; case '(': + tokens.emplace_back(TokenType::LPAREN, advance(), line, currentCharCol); + break; + case ')': + tokens.emplace_back(TokenType::RPAREN, advance(), line, currentCharCol); + break; + default: + if (c >= 32 && c <= 126) { + tokens.emplace_back(TokenType::LITERAL, advance(), line, currentCharCol); + } else { + throw std::runtime_error("Invalid character at line " + std::to_string(line) + + ", column " + std::to_string(currentCharCol) + ": code " + std::to_string(static_cast<unsigned char>(c))); + } + break; + } + } + + tokens.emplace_back(TokenType::END_OF_INPUT, '\0', line, col); + return tokens; +} diff --git a/src/lexer.h b/src/lexer.h @@ -34,3 +34,15 @@ public: explicit Lexer(const std::string& input, int lineNum = 0); std::vector<Token> tokenize(); +private: + std::string input; + size_t pos; + int line; + int col; + + char peek() const; + char advance(); + bool isAtEnd() const; +}; + +#endif // LEXER_H