From 76bb5ec7d94efdeb26dfb3d5f87c46efda1d4435 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sat, 1 Jun 2024 13:53:54 +0100 Subject: [PATCH] (Lexer)+to_string functions for Err, Err::Type --- src/lexer.cpp | 62 +++++++++++++++++++++++++++------------------------ src/lexer.hpp | 2 ++ 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/lexer.cpp b/src/lexer.cpp index 15d1f46..f085c19 100644 --- a/src/lexer.cpp +++ b/src/lexer.cpp @@ -533,40 +533,44 @@ namespace Lexer return stream.str(); } + std::string to_string(const Err::Type &type) + { + switch (type) + { + case Err::Type::OK: + return "OK"; + case Err::Type::INVALID_CHAR_LITERAL: + return "INVALID_CHAR_LITERAL"; + case Err::Type::INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE: + return "INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE"; + case Err::Type::INVALID_STRING_LITERAL: + return "INVALID_STRING_LITERAL"; + case Err::Type::INVALID_NUMBER_LITERAL: + return "INVALID_NUMBER_LITERAL"; + case Err::Type::INVALID_PREPROCESSOR_DIRECTIVE: + return "INVALID_PREPROCESSOR_DIRECTIVE"; + case Err::Type::UNKNOWN_LEXEME: + return "UNKNOWN_LEXEME"; + default: + return ""; + } + } + + std::string to_string(const Err &err) + { + std::stringstream stream; + stream << err.line << ":" << err.col << ": "; + stream << to_string(err.type); + 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) + std::ostream &operator<<(std::ostream &os, const Err &err) { - os << lerr.line << ":" << lerr.col << ": "; - switch (lerr.type) - { - case Err::Type::OK: - os << "OK"; - break; - case Err::Type::INVALID_CHAR_LITERAL: - os << "INVALID_CHAR_LITERAL"; - break; - case Err::Type::INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE: - os << "INVALID_CHAR_LITERAL_ESCAPE_SEQUENCE"; - break; - case Err::Type::INVALID_STRING_LITERAL: - os << "INVALID_STRING_LITERAL"; - break; - case Err::Type::INVALID_NUMBER_LITERAL: - os << "INVALID_NUMBER_LITERAL"; - break; - case Err::Type::INVALID_PREPROCESSOR_DIRECTIVE: - os << "INVALID_PREPROCESSOR_DIRECTIVE"; - break; - case Err::Type::UNKNOWN_LEXEME: - os << "UNKNOWN_LEXEME"; - break; - default: - break; - } - return os; + return os << to_string(err); } } // namespace Lexer diff --git a/src/lexer.hpp b/src/lexer.hpp index ae87347..43050fb 100644 --- a/src/lexer.hpp +++ b/src/lexer.hpp @@ -97,6 +97,8 @@ namespace Lexer }; std::ostream &operator<<(std::ostream &, const Err &); + std::string to_string(const Err::Type &); + std::string to_string(const Err &); Err tokenise_buffer(std::string_view, std::vector &); } // namespace Lexer