Cleaned up structure

This commit is contained in:
Rafał Grodziński
2025-06-21 13:33:50 +09:00
parent a1bb97a597
commit 7a76bb7e33
16 changed files with 29 additions and 27 deletions

148
src/Lexer/Token.cpp Normal file
View File

@@ -0,0 +1,148 @@
#include "Token.h"
vector<TokenKind> Token::tokensEquality = {
TokenKind::EQUAL,
TokenKind::NOT_EQUAL
};
vector<TokenKind> Token::tokensComparison = {
TokenKind::LESS,
TokenKind::LESS_EQUAL,
TokenKind::GREATER,
TokenKind::GREATER_EQUAL
};
vector<TokenKind> Token::tokensTerm = {
TokenKind::PLUS,
TokenKind::MINUS
};
vector<TokenKind> Token::tokensFactor = {
TokenKind::STAR,
TokenKind::SLASH,
TokenKind::PERCENT
};
vector<TokenKind> Token::tokensBinary = {
TokenKind::EQUAL,
TokenKind::NOT_EQUAL,
TokenKind::LESS,
TokenKind::LESS_EQUAL,
TokenKind::GREATER,
TokenKind::GREATER_EQUAL,
TokenKind::PLUS,
TokenKind::MINUS,
TokenKind::STAR,
TokenKind::SLASH,
TokenKind::PERCENT
};
vector<TokenKind> Token::tokensLiteral = {
TokenKind::BOOL,
TokenKind::INTEGER,
TokenKind::REAL
};
Token::Token(TokenKind kind, string lexme, int line, int column):
kind(kind), lexme(lexme), line(line), column(column) {
}
TokenKind Token::getKind() {
return kind;
}
string Token::getLexme() {
return lexme;
}
int Token::getLine() {
return line;
}
int Token::getColumn() {
return column;
}
bool Token::isValid() {
return kind != TokenKind::INVALID;
}
bool Token::isOfKind(vector<TokenKind> kinds) {
for (TokenKind &kind : kinds) {
if (kind == this->kind)
return true;
}
return false;
}
string Token::toString() {
switch (kind) {
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::QUESTION_QUESTION:
return "??";
case TokenKind::QUESTION:
return "?";
case TokenKind::LEFT_ARROW:
return "";
case TokenKind::RIGHT_ARROW:
return "";
case TokenKind::BOOL:
return "BOOL(" + lexme + ")";
case TokenKind::INTEGER:
return "INTEGER(" + lexme + ")";
case TokenKind::REAL:
return "REAL(" + lexme + ")";
case TokenKind::IDENTIFIER:
return "IDENTIFIER(" + lexme + ")";
case TokenKind::TYPE:
return "TYPE(" + lexme + ")";
case TokenKind::FUNCTION:
return "FUNCTION";
case TokenKind::RETURN:
return "RETURN";
case TokenKind::M_EXTERN:
return "@EXTERN";
case TokenKind::NEW_LINE:
return "";
case TokenKind::END:
return "END";
case TokenKind::INVALID:
return "INVALID";
}
}