我正在学习ANTLR4,而且我以前没有解析器生成器的经验。
当我定义自己的访问者实现时,我必须覆盖BaseVisitor的方法(我在page 40 of the book的EvalVisitor类中寻找实例)。如果我的方法实现可能抛出异常,我该怎么办?我不能使用已检查的异常,因为原始方法有一个空的throws子句。我希望使用未经检查的例外吗? (这似乎是一个糟糕的Java设计)。例如,假设在EvalVisitor类中我希望方法visitId(第41页)抛出用户定义的异常,比如UndefinedId,而不是返回0.我应该如何编写代码?
答案 0 :(得分:5)
您有两种选择:
将已检查的异常包含在未经检查的异常中。一种可能性是ParseCancellationException
,但您必须自己确定在您的应用程序中是否有意义。
try {
...
} catch (IOException ex) {
throw new ParseCancellationException(ex);
}