antlr4错误处理不';我甚至都不会编译
我按照antlr网站上的错误处理说明(上面说的是antlr2,但我找不到antlr4的替代品)编写了规则的异常处理,如下所示antlr4错误处理不';我甚至都不会编译,antlr4,Antlr4,我按照antlr网站上的错误处理说明(上面说的是antlr2,但我找不到antlr4的替代品)编写了规则的异常处理,如下所示 subStmt : (visibility WS)? (STATIC WS)? SUB WS? ambiguousIdentifier (WS? argList)? endOfStatement block? END_SUB ; exception catch [RecognitionException ex] { } 但当我尝试为语法生成解析器时,失败如下: j
subStmt :
(visibility WS)? (STATIC WS)? SUB WS? ambiguousIdentifier (WS? argList)? endOfStatement
block?
END_SUB
;
exception
catch [RecognitionException ex] {
}
但当我尝试为语法生成解析器时,失败如下:
java-jar../Downloads/antlr-4.7-complete.jar vba.g4-package vba-o out
错误(50):vba.g4:500:4:语法错误:“catch”在匹配规则序言时让我大吃一惊
非常感谢您的帮助。Antlr4与Antlr2完全不同。首先看一下这个问题(以及答案): 使用简单的方法更新: 对于错误报告,基本方法是创建一个实现
antlErrorListener
接口的类BaseErrorListener
对所有方法都有空实现,因此您只需要实现您关心的方法。您可能最关心的是syntaxError()
在解析器对象上,调用removeErrorListeners()
清除内部错误侦听器,然后使用要处理错误的类的实例调用addErrorListener()
然后,当解析过程中遇到错误时,您将获得对该类的syntaxError()
调用
其他方法可能(也可能不)让你做你想做的事情;我没有使用此接口从解析错误中恢复
为了从特定错误中恢复,可以使用antlErrorStrategy
接口实现一个类。这变得复杂;有关默认实现,请参见DefaultErrorStrategy
一个非常简单的方法是处理语法中可能出现的错误。不确定你能做多少,但这可能是最简单的方法。这个例子看起来很复杂。我的情况可能是忽略某些规则中的错误(我需要接受有错误的输入)。难道没有一个antlr4错误处理文档吗?@HughDarling很公平——我稍微扩展了我的答案。