From 4625b3b7a521ca33ae6d6264840c1ac8d61db2b3 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sat, 1 Jun 2024 13:51:10 +0100 Subject: [PATCH] (Lexer)+to_string functions for Token, Token::Type --- src/lexer.cpp | 32 ++++++++++++++++++++------------ src/lexer.hpp | 9 ++++----- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/lexer.cpp b/src/lexer.cpp index 4f07afa..15d1f46 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -16,6 +16,7 @@ extern "C" } #include +#include #include "./lexer.hpp" @@ -417,12 +418,6 @@ namespace Lexer return Err{}; } - std::ostream &operator<<(std::ostream &os, Token &t) - { - return os << token_type_as_cstr(t.type) << "(`" << t.content << "`)@" - << t.line << ", " << t.column; - } - Token::Token() {} @@ -430,7 +425,11 @@ namespace Lexer : type{type}, column{col}, line{line}, content{content} {} - const char *token_type_as_cstr(Token::Type type) + Err::Err(Err::Type type, size_t col, size_t line) + : col{col}, line{line}, type{type} + {} + + std::string to_string(const Token::Type &type) { switch (type) { @@ -526,7 +525,20 @@ namespace Lexer return ""; } - std::ostream &operator<<(std::ostream &os, Err &lerr) + std::string to_string(const Token &t) + { + std::stringstream stream; + stream << to_string(t.type) << "(`" << t.content << "`)@" << t.line << ", " + << t.column; + return stream.str(); + } + + std::ostream &operator<<(std::ostream &os, const Token &t) + { + return os << to_string(t); + } + + std::ostream &operator<<(std::ostream &os, const Err &lerr) { os << lerr.line << ":" << lerr.col << ": "; switch (lerr.type) @@ -557,8 +569,4 @@ namespace Lexer } return os; } - - Err::Err(Err::Type type, size_t col, size_t line) - : col{col}, line{line}, type{type} - {} } // namespace Lexer diff --git a/src/lexer.hpp b/src/lexer.hpp index 396aac2..ae87347 100644 --- a/src/lexer.hpp +++ b/src/lexer.hpp @@ -15,7 +15,6 @@ #include #include -#include #include namespace Lexer @@ -76,9 +75,9 @@ namespace Lexer Token(Token::Type, std::string, size_t col = 0, size_t line = 0); }; - const char *token_type_as_cstr(Token::Type type); - - std::ostream &operator<<(std::ostream &, Token &); + std::ostream &operator<<(std::ostream &, const Token &); + std::string to_string(const Token::Type &); + std::string to_string(const Token &); struct Err { @@ -97,7 +96,7 @@ namespace Lexer Err(Type type = Type::OK, size_t col = 0, size_t line = 0); }; - std::ostream &operator<<(std::ostream &, Err &); + std::ostream &operator<<(std::ostream &, const Err &); Err tokenise_buffer(std::string_view, std::vector &); } // namespace Lexer