#ifndef ERROR_H #define ERROR_H #include 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 lexme; shared_ptr actualToken; optional expectedTokenKind; optional message; public: 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(); int getLine(); int getColumn(); optional getLexme(); shared_ptr getActualToken(); optional getExpectedTokenKind(); optional getMessage(); }; #endif