anltr 4获取错误消息

时间:2013-10-29 11:43:34

标签: exception-handling antlr4

我只是试图在异常发生时通过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()); 
  }
}

1 个答案:

答案 0 :(得分:0)

比将其添加到语法中更好的解决方案是基于接口ANTLRErrorListener编写自己的ErrorListener。您可以通过以下代码将其添加到解析器中:

parser.addErrorListener(@NotNull ANTLRErrorListener listener);

请注意,可能需要通过

删除所有其他ErrorListener
parser.removeErrorListeners();

ConsoleErrorListener可能满足您将每个错误发布到控制台的愿望。