Add operator<< implementation for Token for debugging purposes
This commit is contained in:
@@ -19,6 +19,7 @@ struct Token {
|
|||||||
enum TokenType type;
|
enum TokenType type;
|
||||||
std::variant<int64_t, std::string> value;
|
std::variant<int64_t, std::string> value;
|
||||||
};
|
};
|
||||||
|
std::ostream &operator<<(std::ostream &os, Token const &t);
|
||||||
|
|
||||||
class Lexer {
|
class Lexer {
|
||||||
private:
|
private:
|
||||||
|
16
src/lex.cpp
16
src/lex.cpp
@@ -8,6 +8,22 @@
|
|||||||
|
|
||||||
using namespace std;
|
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) {
|
bool ispunct(char c) {
|
||||||
for (char i : "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") {
|
for (char i : "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~") {
|
||||||
if (i == c) return true;
|
if (i == c) return true;
|
||||||
|
Reference in New Issue
Block a user