2023-01-05 20:12:15 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <BaseErrorListener.h>
|
|
|
|
#include <string_view>
|
2023-01-07 07:54:53 +00:00
|
|
|
#include <typecheck.hh>
|
2023-01-05 20:12:15 +00:00
|
|
|
|
|
|
|
namespace xlang {
|
|
|
|
|
|
|
|
class ErrorListener : public antlr4::BaseErrorListener {
|
|
|
|
std::string_view file;
|
|
|
|
bool has_error;
|
|
|
|
|
2023-01-07 07:54:53 +00:00
|
|
|
void printError(size_t line, size_t charPositionInLine, std::string_view msg);
|
|
|
|
|
2023-01-05 20:12:15 +00:00
|
|
|
public:
|
|
|
|
ErrorListener(std::string_view inputfile);
|
2023-01-06 02:56:33 +00:00
|
|
|
|
2023-01-05 20:12:15 +00:00
|
|
|
bool hasError();
|
2023-01-07 07:54:53 +00:00
|
|
|
|
2023-01-07 16:43:25 +00:00
|
|
|
void breakTooMany(antlr4::Token *token, size_t num, size_t max);
|
|
|
|
void breakZero(antlr4::Token *token);
|
2023-01-07 08:12:47 +00:00
|
|
|
[[noreturn]] void compilerError(const std::string &file, size_t line);
|
2023-01-07 16:43:25 +00:00
|
|
|
void continueTooMany(antlr4::Token *token, size_t num, size_t max);
|
|
|
|
void continueZero(antlr4::Token *token);
|
2023-01-07 07:54:53 +00:00
|
|
|
void duplicateFunction(antlr4::Token *token, const std::string &name);
|
2023-01-07 08:56:27 +00:00
|
|
|
void loopControlWithoutLoop(antlr4::Token *token);
|
2023-01-07 07:54:53 +00:00
|
|
|
void shadowedVariable(antlr4::Token *token, const std::string &name);
|
2023-01-05 20:12:15 +00:00
|
|
|
void syntaxError(antlr4::Recognizer *recognizer,
|
|
|
|
antlr4::Token *offendingSymbol, size_t line,
|
|
|
|
size_t charPositionInLine, const std::string &msg,
|
|
|
|
std::exception_ptr e) override;
|
2023-01-07 07:54:53 +00:00
|
|
|
void typeMismatch(antlr4::Token *token, Type expected, Type actual);
|
|
|
|
void unknownFunction(antlr4::Token *token, const std::string &name);
|
|
|
|
void unknownVariable(antlr4::Token *token, const std::string &name);
|
|
|
|
void wrongArgumentNumber(antlr4::Token *token, const std::string &name,
|
|
|
|
size_t expected, size_t actual);
|
2023-01-05 20:12:15 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace xlang
|