我使用ANTLR4在Java中创建解析器。我的ANTLR4解析器中的每个规则都是Java中的一个函数,并且默认情况下(在其原型中)每个函数都会引发“ RecognitionException”。 例如,我在“ parser.g4”中定义的规则“自动机”在“ parser.java”中创建为名为“自动机”的函数,该函数在其原型中抛出“ RecognitionException”:
public final AutomatonContext automaton() throws RecognitionException
我不仅要抛出“ RecognitionException”,还要在原型中抛出自己的异常,例如:
public final AutomatonContext automaton() throws RecognitionException, ExceptionTypeA, ExceptionTypeB
我知道如何在ANTLR4脚本中进行“尝试捕获”(只需在规则定义后写catch[RecognitionException e] { throw e; }
之类的东西),但是我想在原型中使用“抛出”,并且我不想在当前函数体中使用“ try-catch”(因为我不想在当前函数中处理这些异常)。
目前,我的解决方案是在生成“ parser.java”之后自行添加它。但是我仍然想知道在编写ANTLR4脚本“ parser.g4”时是否有一些方法可以实现。