7

我正在学习 ANTLR4,但我以前没有使用解析器生成器的经验。

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

4

1 回答 1

5

你有两个选择:

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

    try {
        ...
    } catch (IOException ex) {
        throw new ParseCancellationException(ex);
    }
    
于 2013-09-05T04:25:31.793 回答