0

我只是想在发生异常时让 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()); 
  }
}
4

1 回答 1

0

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

parser.addErrorListener(@NotNull ANTLRErrorListener listener);

请注意,可能需要通过以下方式删除所有其他 ErrorListener

parser.removeErrorListeners();

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

于 2013-10-30T15:21:06.443 回答