从语法操作中抛出RecognitionException

时间:2014-10-21 15:47:29

标签: antlr4

我有一个" custom"要求在分析时验证语言中的函数调用(即在成功匹配函数调用之后)。我知道这通常是与语义相关的,因此通常会在稍后执行,但再一次," custom"要求...

目前,我使用的操作是在成功匹配时添加功能验证代码。我在验证失败时尝试抛出一个普通的新的RecognitionException实例,但显然DefaultErrorStrategy类对它处理的错误类型进行硬编码,并将自己限制为RecognitionException子类。

问题是我想重新使用整个默认错误处理机制,但是使用我自己的异常类型(或至少是消息)。

问题:如何使用自定义消息抛出一个普通的RecognitionException实例或它的子类型,不同的现有子类型,YET重新使用默认的错误处理机制?

1 个答案:

答案 0 :(得分:1)

我在调查了一下之后回答了我自己的问题......

DefaultErrorStrategy DOES 已经处理了任何其他RecognitionException子类型,只需通知解析器的已注册错误侦听器即可。它在reportError()的javadoc中清楚地说明了:所有其他类型:调用{@link Parser#notifyErrorListeners}来报告异常,更不用说在代码itsef中很清楚:{{3 }}

一开始误导我的是,在任何其他RecognitionException子类型的情况下,还会向stderr打印一条消息(我不想拥有!)。