Antlr4 正在从语法操作引发RecognitionException
我有一个“自定义”要求,即在解析时(即在成功匹配函数调用之后)验证语言中的函数调用。我知道这通常是语义相关的,因此通常稍后执行,但再一次,一个“自定义”需求 目前,我使用一个操作,在成功匹配后添加函数验证代码。当验证失败时,我尝试抛出一个全新的RecognitionException实例,但显然DefaultErrorStrategy类硬编码了它处理的错误类型,并将其自身限制为RecognitionException子类 问题是我想重新使用整个默认的错误处理机制,同时使用我自己的异常类型(或者至少是消息)Antlr4 正在从语法操作引发RecognitionException,antlr4,Antlr4,我有一个“自定义”要求,即在解析时(即在成功匹配函数调用之后)验证语言中的函数调用。我知道这通常是语义相关的,因此通常稍后执行,但再一次,一个“自定义”需求 目前,我使用一个操作,在成功匹配后添加函数验证代码。当验证失败时,我尝试抛出一个全新的RecognitionException实例,但显然DefaultErrorStrategy类硬编码了它处理的错误类型,并将其自身限制为RecognitionException子类 问题是我想重新使用整个默认的错误处理机制,同时使用我自己的异常类型(或者至
问题:我如何抛出一个普通的RecognitionException实例或它的一个子类型(与现有的子类型不同),并重新使用默认的错误处理机制?在研究了一点之后,我回答了我自己的问题
DefaultErrorStrategy
只需通知解析器注册的错误侦听器,就可以处理任何其他RecognitionException
子类型。它在reportError()
的javadoc:All-other-type:调用{@link Parser#notifyErrorListeners}报告异常中有明确的说明,更不用说在代码itsef:中非常清楚
一开始误导我的是,在任何其他RecognitionException
子类型的情况下,一条消息(我宁愿不要!)也打印到了stderr