我只是试图在异常发生时通过antlr发出错误消息。为此,我需要捕获RecognitionException并使用它来获得我需要的东西。
出于某种原因,我已经实施的以下措施无效。
即时使用使用antlr 4.1
语法内部:
@rulecatch
{
catch (RecognitionException e)
{
throw e;
}
}
@parser::members
{
public void reportError(RecognitionException e)
{
throw new RuntimeException(e.getMessage());
}
}
@lexer::members
{
public void reportError(RecognitionException e)
{
throw new RuntimeException(e.getMessage());
}
}
答案 0 :(得分:0)
比将其添加到语法中更好的解决方案是基于接口ANTLRErrorListener编写自己的ErrorListener。您可以通过以下代码将其添加到解析器中:
parser.addErrorListener(@NotNull ANTLRErrorListener listener);
请注意,可能需要通过
删除所有其他ErrorListenerparser.removeErrorListeners();
ConsoleErrorListener可能满足您将每个错误发布到控制台的愿望。