检查访客中的例外情况

Ele*_*cca 7 antlr4

我正在学习ANTLR4,而且我以前没有解析器生成器的经验.

当我定义自己的访问者实现时,我必须覆盖BaseVisitor的方法(我正在寻找本书第40页的EvalVisitor类的实例).如果我的方法实现可能抛出异常,我该怎么办?我不能使用已检查的异常,因为原始方法有一个空的throws子句.我希望使用未经检查的例外吗?(这似乎是一个糟糕的Java设计).例如,假设在EvalVisitor类中我希望方法visitId(页面41)抛出用户定义的异常,比如UndefinedId,而不是返回0.我应该如何编写代码?

Sam*_*ell 5

您有两种选择:

  1. 处理访问者方法本身内的异常.
  2. 将已检查的异常包装在未经检查的异常中.一种可能性是ParseCancellationException,但您必须自己确定在您的应用程序中是否有意义.

    try {
        ...
    } catch (IOException ex) {
        throw new ParseCancellationException(ex);
    }
    
    Run Code Online (Sandbox Code Playgroud)