From f95600f0b789725882207d33db8787df7acd6165 Mon Sep 17 00:00:00 2001 From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com> Date: Sun, 20 Jul 2025 18:24:11 +0100 Subject: [PATCH] Defined Lexer::Token::LogStr --- Lexer/src/Token.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/Lexer/src/Token.cpp b/Lexer/src/Token.cpp index 402505e..c817c0b 100644 --- a/Lexer/src/Token.cpp +++ b/Lexer/src/Token.cpp @@ -3,6 +3,8 @@ #include #include +#include + namespace LXC::Lexer { // Constructor to assign the members of the token class // @@ -29,8 +31,60 @@ namespace LXC::Lexer contents = nullptr; } + // Helper macro for converting type to string // + #define TOKEN_TYPE_CASE(type) case type: return #type; + + static constexpr const char* TokenTypeToCStr(Token::TokenType type) + { + switch (type) + { + // All the different types of tokens // + TOKEN_TYPE_CASE(Token::Add); + TOKEN_TYPE_CASE(Token::Sub); + TOKEN_TYPE_CASE(Token::Mul); + TOKEN_TYPE_CASE(Token::Div); + TOKEN_TYPE_CASE(Token::Mod); + + TOKEN_TYPE_CASE(Token::For); + TOKEN_TYPE_CASE(Token::While); + TOKEN_TYPE_CASE(Token::If); + TOKEN_TYPE_CASE(Token::Else_If); + TOKEN_TYPE_CASE(Token::Else); + TOKEN_TYPE_CASE(Token::Return); + + TOKEN_TYPE_CASE(Token::String_Literal); + TOKEN_TYPE_CASE(Token::Num_Literal); + TOKEN_TYPE_CASE(Token::Identifier); + + TOKEN_TYPE_CASE(Token::Assign); + TOKEN_TYPE_CASE(Token::Close_bracket); + TOKEN_TYPE_CASE(Token::Open_bracket); + TOKEN_TYPE_CASE(Token::Close_brace); + TOKEN_TYPE_CASE(Token::Open_brace); + TOKEN_TYPE_CASE(Token::Close_paren); + TOKEN_TYPE_CASE(Token::Open_paren); + TOKEN_TYPE_CASE(Token::Comma); + + TOKEN_TYPE_CASE(Token::End_of_file); + TOKEN_TYPE_CASE(Token::UNDEFINED); + + // When the case has not been defined yet // + default: + return "UNKNOWN"; + } + } + std::string LXC::Lexer::Token::LogStr() const { - return std::string("CALL LogStr() function"); + // Output stream to log to // + std::ostringstream os; + os << std::setw(15) << std::left << TokenTypeToCStr(type) << " | "; + + if (contents != nullptr) + os << '"' << contents << '"'; + else + os << "EMPTY"; + + return os.str(); } }