Added logger
This commit is contained in:
93
src/Logger.cpp
Normal file
93
src/Logger.cpp
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#include "Logger.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "Lexer/Token.h"
|
||||||
|
|
||||||
|
string Logger::toString(shared_ptr<Token> 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<shared_ptr<Token>> tokens) {
|
||||||
|
for (int i=0; i<tokens.size(); i++) {
|
||||||
|
cout << i << "|" << toString(tokens.at(i));
|
||||||
|
if (i < tokens.size() - 1)
|
||||||
|
cout << " ";
|
||||||
|
}
|
||||||
|
cout << endl << endl;
|
||||||
|
}
|
||||||
18
src/Logger.h
Normal file
18
src/Logger.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef LOGGER_H
|
||||||
|
#define LOGGER_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Token;
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class Logger {
|
||||||
|
private:
|
||||||
|
static string toString(shared_ptr<Token> token);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static void print(vector<shared_ptr<Token>> tokens);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
11
src/main.cpp
11
src/main.cpp
@@ -13,6 +13,7 @@
|
|||||||
#include "Compiler/ModuleBuilder.h"
|
#include "Compiler/ModuleBuilder.h"
|
||||||
#include "Compiler/CodeGenerator.h"
|
#include "Compiler/CodeGenerator.h"
|
||||||
|
|
||||||
|
#include "Logger.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -55,14 +56,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
Lexer lexer(source);
|
Lexer lexer(source);
|
||||||
vector<shared_ptr<Token>> tokens = lexer.getTokens();
|
vector<shared_ptr<Token>> tokens = lexer.getTokens();
|
||||||
if (isVerbose) {
|
if (isVerbose)
|
||||||
for (int i=0; i<tokens.size(); i++) {
|
Logger::print(tokens);
|
||||||
cout << i << "|" << tokens.at(i)->toString();
|
|
||||||
if (i < tokens.size() - 1)
|
|
||||||
cout << ", ";
|
|
||||||
}
|
|
||||||
cout << endl << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
Parser parser(tokens);
|
Parser parser(tokens);
|
||||||
vector<shared_ptr<Statement>> statements = parser.getStatements();
|
vector<shared_ptr<Statement>> statements = parser.getStatements();
|
||||||
|
|||||||
Reference in New Issue
Block a user