upd: add except

This commit is contained in:
2023-11-06 22:04:47 +08:00
parent 6a7a957299
commit 86ea1176bf
2 changed files with 51 additions and 1 deletions

View File

@ -4,6 +4,8 @@
#include "Python3ParserBaseVisitor.h" #include "Python3ParserBaseVisitor.h"
#include "int2048/int2048.h" #include "int2048/int2048.h"
#include <exception>
#include <stdexcept>
class EvalVisitor : public Python3ParserBaseVisitor class EvalVisitor : public Python3ParserBaseVisitor
{ {
@ -44,5 +46,34 @@ class EvalVisitor : public Python3ParserBaseVisitor
std::any visitArglist(Python3Parser::ArglistContext *ctx) override; std::any visitArglist(Python3Parser::ArglistContext *ctx) override;
std::any visitArgument(Python3Parser::ArgumentContext *ctx) override; std::any visitArgument(Python3Parser::ArgumentContext *ctx) override;
}; };
class InterpretException : public std::exception
{
public:
InterpretException() {}
InterpretException(const char *message) : m_message(message) {}
const char *what() const noexcept override
{
return m_message;
}
~InterpretException() noexcept override {}
private:
const char *m_message;
};
class FatalError : public std::exception
{
public:
FatalError(const char *message) : m_message(message) {}
const char *what() const noexcept override
{
return m_message;
}
private:
const char *m_message;
};
#endif // PYTHON_INTERPRETER_EVALVISITOR_H #endif // PYTHON_INTERPRETER_EVALVISITOR_H

View File

@ -39,7 +39,26 @@ int main(int argc, char *argv[])
Python3Parser parser(&tokens); Python3Parser parser(&tokens);
tree::ParseTree *tree = parser.file_input(); tree::ParseTree *tree = parser.file_input();
EvalVisitor visitor; EvalVisitor visitor;
try
{
visitor.visit(tree); visitor.visit(tree);
}
catch (const InterpretException &e)
{
std::cerr << "[Interpret Error] " << e.what() << std::endl;
}
catch (const FatalError &e)
{
std::cerr << "\e[7m\e[31m[Fatal Error] " << e.what() << "\e[0m" << std::endl;
}
catch (const std::exception &e)
{
std::cerr << "\e[7m\e[31m[other std::exception] " << e.what() << "\e[0m" << std::endl;
}
catch (...)
{
std::cerr << "\e[7m\e[31m[Unknown Exception]\e[0m" << std::endl;
}
delete input_p; delete input_p;
return 0; return 0;
} }