47 lines
1.0 KiB
C++
47 lines
1.0 KiB
C++
#ifndef ERROR_H
|
|
#define ERROR_H
|
|
|
|
#include <iostream>
|
|
|
|
class Token;
|
|
enum class TokenKind;
|
|
|
|
using namespace std;
|
|
|
|
enum class ErrorKind {
|
|
LEXER_ERROR,
|
|
PARSER_ERROR,
|
|
BUILDER_ERROR
|
|
};
|
|
|
|
class Error {
|
|
private:
|
|
ErrorKind kind;
|
|
|
|
int line;
|
|
int column;
|
|
optional<string> lexme;
|
|
|
|
shared_ptr<Token> actualToken;
|
|
optional<TokenKind> expectedTokenKind;
|
|
optional<string> message;
|
|
|
|
public:
|
|
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();
|
|
|
|
int getLine();
|
|
int getColumn();
|
|
optional<string> getLexme();
|
|
|
|
shared_ptr<Token> getActualToken();
|
|
optional<TokenKind> getExpectedTokenKind();
|
|
optional<string> getMessage();
|
|
};
|
|
|
|
#endif |