6.3. ANTLR的异常处理

ANTLR中,对于异常处理,支持的很好,功能很丰富了。

对此,我们可以利用ANTLR的异常方面的信息,去实现一些自己所需要的功能,比如:

【记录】antlr异常处理:在ParseTree去getTree之后,判断某个树节点是否出现异常

其中,关于异常处理的方面的经验和心得,可以先去参考:

【记录】Antlr中的异常处理学习笔记

【整理】antlr的Exception Handling异常处理中的异常Exception的类型

其他的一些,关于异常处理方面的折腾,供参考:

【记录】尝试折腾antlr v3的异常处理和错误恢复:VARIABLE的CLASS的值INPUT故意写错为INPUT1

对于ANTLR的异常处理方面,有更多可以扩展和利用的空间:

6.3.1. ANTLR出错异常时就退出(不继续恢复错误和继续运行)

ANTLR遇到错误,出现异常时,其默认的机制中,就已经支持:自动尝试恢复错误,然后回退到前一步,继续选择别的分支路径,继续执行下去

而希望实现:当ANTLR解析出错时,就退出,则也是支持的。

详见:

【记录】antlr的异常处理:遇到第一个错误就停止和退出

【已解决】在用antlr预处理一个新的hart的eddl文件时希望第一次出错就退出

[注意] ANTLR的API变化导致部分函数失效

之前遇到的,由于ANTLR的API的变化,导致函数接口变化

导致参考别人的ANTLR的示例代码时,会出错。需要去找到最新的API,才能继续使用的。

详见:

【已解决】antlr中尝试出错就退出,结果编译parser出错:error: recoverFromMismatchedSet(IntStream,RecognitionException,BitSet) in xxxParser cannot override recoverFromMismatchedSet(IntStream,RecognitionException,BitSet) in BaseRecognizer,return type void is not compatible with Object

6.3.2. ANTLR出错异常时显示更多详细信息

ANTLR解析期间,遇到错误,会自动抛出异常,会打印出一些错误信息。

其默认的异常出错信息,已经相对比较全面了。

但是如果想要输出更多的,其他方面的,详细出错信息,则可以参考:

【记录】用antlr预处理异常MismatchedTokenException时能输出更详细的信息

【记录】尝试antlr的paraphrase去提供对于用户更好友好的错误信息

【记录】折腾antlr的异常处理:使得当初错时,输出更详细的错误信息,包含堆栈信息