diff --git a/src/Error.cpp b/src/Error.cpp index 3a2f5a5..3078e95 100644 --- a/src/Error.cpp +++ b/src/Error.cpp @@ -1,15 +1,40 @@ #include "Error.h" -shared_ptr Error::builderError(int line, int column, string message) { - Error e = Error(ErrorKind::BUILDER_ERROR, line, column, {}, nullptr, {}, message); - return nullptr; +shared_ptr Error::lexerError(int line, int column, string lexme) { + return make_shared( + ErrorKind::LEXER_ERROR, + line, + column, + lexme, + nullptr, + optional(), + optional() + ); } -Error::Error(int line, int column, string lexme) : -kind(ErrorKind::LEXER_ERROR), line(line), column(column), lexme(lexme) { } +shared_ptr Error::parserError(shared_ptr actualToken, optional expectedTokenKind, optional message) { + return make_shared( + ErrorKind::PARSER_ERROR, + 0, + 0, + optional(), + actualToken, + expectedTokenKind, + message + ); +} -Error::Error(shared_ptr actualToken, optional expectedTokenKind, optional message) : -kind(ErrorKind::PARSER_ERROR), actualToken(actualToken), expectedTokenKind(expectedTokenKind), message(message) { } +shared_ptr Error::builderError(int line, int column, string message) { + return make_shared( + ErrorKind::BUILDER_ERROR, + line, + column, + optional(), + nullptr, + optional(), + message + ); +} Error::Error(ErrorKind kind, int line, int column, optional lexme, shared_ptr actualToken, optional expectedTokenKind, optional message): kind(kind), line(line), column(column), lexme(lexme), actualToken(actualToken), expectedTokenKind(expectedTokenKind), message(message) { } diff --git a/src/Error.h b/src/Error.h index 204562f..4e83c68 100644 --- a/src/Error.h +++ b/src/Error.h @@ -27,10 +27,10 @@ private: optional message; public: + static shared_ptr lexerError(int line, int column, string lexme); + static shared_ptr parserError(shared_ptr actualToken, optional expectedTokenKind, optional message); static shared_ptr builderError(int line, int column, string message); - Error(int line, int column, string lexme); - Error(shared_ptr actualToken, optional expectedTokenKind, optional message); Error(ErrorKind kind, int line, int column, optional lexme, shared_ptr actualToken, optional expectedTokenKind, optional message); ErrorKind getKind(); diff --git a/src/Lexer/Lexer.cpp b/src/Lexer/Lexer.cpp index e90acb5..8d4ec3a 100644 --- a/src/Lexer/Lexer.cpp +++ b/src/Lexer/Lexer.cpp @@ -1,9 +1,10 @@ #include "Lexer.h" -#include "Token.h" #include "Error.h" #include "Logger.h" +#include "Token.h" + Lexer::Lexer(string source): source(source) { } @@ -506,5 +507,5 @@ void Lexer::markError() { } else { lexme = "EOF"; } - errors.push_back(make_shared(currentLine, startColumn, lexme)); + errors.push_back(Error::lexerError(currentLine, startColumn, lexme)); } diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 521ff88..979b15c 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -655,5 +655,5 @@ void Parser::markError(optional expectedTokenKind, optional m while (!tryMatchingTokenKinds(safeKinds, false, true)) currentIndex++; - errors.push_back(make_shared(actualToken, expectedTokenKind, message)); + errors.push_back(Error::parserError(actualToken, expectedTokenKind, message)); }