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