antlr4错误处理甚至没有编译
我按照antlr网站上的错误处理说明http://www.antlr2.org/doc/err.html(它说antlr2,但我找不到antlr4的替代方法)并为我的规则编写了异常处理,如下所示。antlr4错误处理甚至没有编译
subStmt :
(visibility WS)? (STATIC WS)? SUB WS? ambiguousIdentifier (WS? argList)? endOfStatement
block?
END_SUB
;
exception
catch [RecognitionException ex] {
}
但是,当我试图生成语法解析器是如下失败: Java的罐子../Downloads/antlr-4.7-complete.jar vba.g4 -package VBA -o出来 错误(50):vba.g4:500:4:语法错误:'catch'对我来说是一个完整的惊喜,同时匹配规则前导码
任何帮助,非常感谢。
Antlr4与Antlr2完全不同。
How to implement error handling in ANTLR4
更新有一个简单的方法:通过在看看这个问题(和答案)启动
错误报告,基本的方法是使实现ANTLRErrorListener
接口的类。 BaseErrorListener
对所有方法都有空的实现,所以你只需要实现你关心的那些。你可能最关心的是syntaxError()
。
在您的解析器对象上,调用removeErrorListeners()
来清除内部错误侦听器,然后用要处理错误的类的实例调用addErrorListener()
。
在解析期间遇到错误时,您将获得该类的syntaxError()
调用。
其他方法可能(或可能不)让你做你想做的事情;我没有使用这个接口从解析错误中恢复。
为了从特定错误中恢复,您可以使用ANTLRErrorStrategy
接口实现一个类。这变得复杂;默认实现请参见DefaultErrorStrategy
。
一个非常简单的方法是处理语法中可能出现的错误。不知道你能走多远,但这可能是最简单的方法。
这个例子看起来很复杂。我的情况可能是简单地忽略某些规则中的错误(我需要接受有错误的输入)。是否没有antlr4错误处理文档? –
@HughDarling不够公平 - 我的答案稍微延长了一点。 – janm