Add operator<< implementation for Token for debugging purposes

This commit is contained in:
2025-09-30 17:41:31 +03:00
committed by Emin Arslan
parent 1fbbff68b9
commit 5eadf0b643
2 changed files with 17 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ struct Token {
enum TokenType type;
std::variant<int64_t, std::string> value;
};
std::ostream &operator<<(std::ostream &os, Token const &t);
class Lexer {
private:

View File

@@ -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<string>(t.value) << ")"; break;
case TokenType::String: os << "String, \"" << get<string>(t.value) << "\")"; break;
case TokenType::Int: os << "Int, " << get<int64_t>(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;