检查访客中的例外情况

时间:2013-09-04 15:58:29

标签: antlr4

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

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

1 个答案:

答案 0 :(得分:5)

您有两种选择:

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

    try {
        ...
    } catch (IOException ex) {
        throw new ParseCancellationException(ex);
    }