antlr4错误处理甚至没有编译

时间:2017-07-04 06:42:02

标签: antlr4

我按照antlr网站http://www.antlr2.org/doc/err.html上的错误处理说明(它说antlr2但我找不到antlr4的替代方法)并为我的规则编写了异常处理,如下所示。

subStmt : 
(visibility WS)? (STATIC WS)? SUB WS? ambiguousIdentifier (WS? argList)? endOfStatement
block? 
END_SUB
;
exception
catch [RecognitionException ex] {

}

但是当我尝试为语法生成Parser时,它失败如下: java -jar ../Downloads/antlr-4.7-complete.jar vba.g4 -package vba -o out 错误(50):vba.g4:500:4:语法错误:匹配规则前导码时,'catch'对我来说是一个完全的惊喜

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

Antlr4与Antlr2完全不同。首先看看这个问题(和答案):

How to implement error handling in ANTLR4

用简单的方法更新:

对于错误报告,基本方法是创建一个实现ANTLRErrorListener接口的类。 BaseErrorListener具有所有方法的空实现,因此您只需要实现您关心的方法。您可能最关心syntaxError()

在解析器对象上,调用removeErrorListeners()以清除内部错误侦听器,然后使用要处理错误的类的实例调用addErrorListener()

在解析过程中遇到错误时,您将在该类上获得syntaxError()次调用。

其他方法可能(或可能不)让你做你想做的事;我没有使用此接口从解析错误中恢复。

要从特定错误中恢复,可以使用ANTLRErrorStrategy接口实现一个类。那变得复杂了;有关默认实现,请参阅DefaultErrorStrategy

一种非常简单的方法是处理语法中可能存在的错误。不知道你能走多远,但这可能是最简单的方法。