Fixed up errors

This commit is contained in:
Rafał Grodziński
2025-07-05 22:50:16 +09:00
parent 48f27169d0
commit d927540b5f
4 changed files with 38 additions and 12 deletions

View File

@@ -1,15 +1,40 @@
#include "Error.h"
shared_ptr<Error> Error::builderError(int line, int column, string message) {
Error e = Error(ErrorKind::BUILDER_ERROR, line, column, {}, nullptr, {}, message);
return nullptr;
shared_ptr<Error> Error::lexerError(int line, int column, string lexme) {
return make_shared<Error>(
ErrorKind::LEXER_ERROR,
line,
column,
lexme,
nullptr,
optional<TokenKind>(),
optional<string>()
);
}
Error::Error(int line, int column, string lexme) :
kind(ErrorKind::LEXER_ERROR), line(line), column(column), lexme(lexme) { }
shared_ptr<Error> Error::parserError(shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message) {
return make_shared<Error>(
ErrorKind::PARSER_ERROR,
0,
0,
optional<string>(),
actualToken,
expectedTokenKind,
message
);
}
Error::Error(shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message) :
kind(ErrorKind::PARSER_ERROR), actualToken(actualToken), expectedTokenKind(expectedTokenKind), message(message) { }
shared_ptr<Error> Error::builderError(int line, int column, string message) {
return make_shared<Error>(
ErrorKind::BUILDER_ERROR,
line,
column,
optional<string>(),
nullptr,
optional<TokenKind>(),
message
);
}
Error::Error(ErrorKind kind, int line, int column, optional<string> lexme, shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message):
kind(kind), line(line), column(column), lexme(lexme), actualToken(actualToken), expectedTokenKind(expectedTokenKind), message(message) { }

View File

@@ -27,10 +27,10 @@ private:
optional<string> message;
public:
static shared_ptr<Error> lexerError(int line, int column, string lexme);
static shared_ptr<Error> parserError(shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message);
static shared_ptr<Error> builderError(int line, int column, string message);
Error(int line, int column, string lexme);
Error(shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message);
Error(ErrorKind kind, int line, int column, optional<string> lexme, shared_ptr<Token> actualToken, optional<TokenKind> expectedTokenKind, optional<string> message);
ErrorKind getKind();

View File

@@ -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<Error>(currentLine, startColumn, lexme));
errors.push_back(Error::lexerError(currentLine, startColumn, lexme));
}

View File

@@ -655,5 +655,5 @@ void Parser::markError(optional<TokenKind> expectedTokenKind, optional<string> m
while (!tryMatchingTokenKinds(safeKinds, false, true))
currentIndex++;
errors.push_back(make_shared<Error>(actualToken, expectedTokenKind, message));
errors.push_back(Error::parserError(actualToken, expectedTokenKind, message));
}