From 56e380b3ed2a0c0854f2efea2d753efb0ff0b2e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Grodzi=C5=84ski?= Date: Wed, 2 Jul 2025 12:03:47 +0900 Subject: [PATCH] Added logger --- src/Logger.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/Logger.h | 18 ++++++++++ src/main.cpp | 11 ++---- 3 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 src/Logger.cpp create mode 100644 src/Logger.h diff --git a/src/Logger.cpp b/src/Logger.cpp new file mode 100644 index 0000000..0210d09 --- /dev/null +++ b/src/Logger.cpp @@ -0,0 +1,93 @@ +#include "Logger.h" + +#include + +#include "Lexer/Token.h" + +string Logger::toString(shared_ptr token) { + switch (token->getKind()) { + case TokenKind::PLUS: + return "+"; + case TokenKind::MINUS: + return "-"; + case TokenKind::STAR: + return "*"; + case TokenKind::SLASH: + return "/"; + case TokenKind::PERCENT: + return "%"; + + case TokenKind::EQUAL: + return "="; + case TokenKind::NOT_EQUAL: + return "≠"; + case TokenKind::LESS: + return "<"; + case TokenKind::LESS_EQUAL: + return "≤"; + case TokenKind::GREATER: + return ">"; + case TokenKind::GREATER_EQUAL: + return "≥"; + + case TokenKind::LEFT_PAREN: + return "("; + case TokenKind::RIGHT_PAREN: + return ")"; + case TokenKind::COMMA: + return ","; + case TokenKind::COLON: + return ":"; + case TokenKind::SEMICOLON: + return ";"; + case TokenKind::LEFT_ARROW: + return "←"; + case TokenKind::RIGHT_ARROW: + return "→"; + + case TokenKind::BOOL: + return "BOOL(" + token->getLexme() + ")"; + case TokenKind::INTEGER_DEC: + return "INT_DEC(" + token->getLexme() + ")"; + case TokenKind::INTEGER_HEX: + return "INT_HEX(" + token->getLexme() + ")"; + case TokenKind::INTEGER_BIN: + return "INT_BIN(" + token->getLexme() + ")"; + case TokenKind::REAL: + return "REAL(" + token->getLexme() + ")"; + case TokenKind::IDENTIFIER: + return "ID(" + token->getLexme() + ")"; + case TokenKind::TYPE: + return "TYPE(" + token->getLexme() + ")"; + + case TokenKind::IF: + return "IF"; + case TokenKind::ELSE: + return "ELSE"; + case TokenKind::FUNCTION: + return "FUN"; + case TokenKind::RETURN: + return "RET"; + case TokenKind::REPEAT: + return "REP"; + + case TokenKind::M_EXTERN: + return "@EXTERN"; + + case TokenKind::NEW_LINE: + return "↲"; + case TokenKind::END: + return "END"; + case TokenKind::INVALID: + return "INVALID"; + } +} + +void Logger::print(vector> tokens) { + for (int i=0; i + +class Token; + +using namespace std; + +class Logger { +private: + static string toString(shared_ptr token); + +public: + static void print(vector> tokens); +}; + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index df6119c..522727c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,6 +13,7 @@ #include "Compiler/ModuleBuilder.h" #include "Compiler/CodeGenerator.h" +#include "Logger.h" using namespace std; @@ -55,14 +56,8 @@ int main(int argc, char **argv) { Lexer lexer(source); vector> tokens = lexer.getTokens(); - if (isVerbose) { - for (int i=0; itoString(); - if (i < tokens.size() - 1) - cout << ", "; - } - cout << endl << endl; - } + if (isVerbose) + Logger::print(tokens); Parser parser(tokens); vector> statements = parser.getStatements();