#pragma once #include "3rdparty/easylogging++.h" #include #include #include #include #include #define panic(message) \ do { \ throw GrammarException(__FILE__, __LINE__, message); \ } while (0) #define sysy_assert(cond) \ do { \ if (!(cond)) \ GrammarException(__FILE__, __LINE__, #cond); \ } while (0) namespace antlrSysY { class GrammarException : public std::exception { public: GrammarException() : message("Unknown Grammar Exception") {} GrammarException(const std::string &what_arg) : message(what_arg){}; GrammarException(const char *what_arg) : message(what_arg){}; GrammarException(const char *filename, int line, const std::string &what_arg) { std::stringstream ss; ss << filename << ":" << line << ": " << what_arg; ss >> message; }; virtual const char *what() const noexcept { return message.c_str(); } private: std::string message; }; } // namespace antlrSysY