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;