From 5eadf0b643182491d7459ef7ec899eb3bd2f71f0 Mon Sep 17 00:00:00 2001 From: haxala1r Date: Tue, 30 Sep 2025 17:41:31 +0300 Subject: [PATCH] Add operator<< implementation for Token for debugging purposes --- src/include/lex.hpp | 1 + src/lex.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/include/lex.hpp b/src/include/lex.hpp index 777418c..7914cdc 100644 --- a/src/include/lex.hpp +++ b/src/include/lex.hpp @@ -19,6 +19,7 @@ struct Token { enum TokenType type; std::variant value; }; +std::ostream &operator<<(std::ostream &os, Token const &t); class Lexer { private: diff --git a/src/lex.cpp b/src/lex.cpp index 2f825ae..fd47c8a 100644 --- a/src/lex.cpp +++ b/src/lex.cpp @@ -8,6 +8,22 @@ using namespace std; +std::ostream &operator<<(std::ostream &os, Token const &t) { + os << "Token("; + switch (t.type) { + case TokenType::OpenParen: os << "OpenParen)"; break; + case TokenType::CloseParen: os << "CloseParen)"; break; + case TokenType::Dollar: os << "Dollar)"; break; + case TokenType::Symbol: os << "Symbol, " << get(t.value) << ")"; break; + case TokenType::String: os << "String, \"" << get(t.value) << "\")"; break; + case TokenType::Int: os << "Int, " << get(t.value) << ")"; break; + case TokenType::End: os << "END)"; break; + default: + os << ")"; + } + return os; +} + bool ispunct(char c) { for (char i : "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") { if (i == c) return true;