ANTLR 4:避免错误打印到控制台

Mar*_*cel 14 antlr antlr4

使用ANTLR,我解析语法.ANTLR错误在语法的自定义编辑器中指示.但是,我想禁用将错误消息打印到Java控制台.

我已经实现了自己的BaseErrorListener并删除了ANTLR书中描述的默认值:

MyErrorListener errList=new MyErrorListener ();
lexer.removeErrorListeners();
lexer.addErrorListener(errList);
parser.removeErrorListeners();   
parser.addErrorListener(errList);
Run Code Online (Sandbox Code Playgroud)

我仍然得到打印输出到我的Java控制台(连接到Java输出和错误流).

如何在ANTLR中禁用打印到控制台?

uwo*_*fer 13

默认情况下,ConsoleListener激活[1].

您可以在代码中删除它:

lexer.removeErrorListener(ConsoleErrorListener.INSTANCE);
Run Code Online (Sandbox Code Playgroud)

[1] https://github.com/antlr/antlr4/blob/master/runtime/Java/src/org/antlr/v4/runtime/Recognizer.java#L56 (参见add(ConsoleErrorListener.INSTANCE);)

  • 或者只是 `parser.removeErrorListeners();` (5认同)

Mar*_*cel 1

我终于找到了解决方案。我在语法之前有一个过滤器:

Filter filter = new Filter(tokens)
Run Code Online (Sandbox Code Playgroud)

其中过滤器的侦听器(预解析器类)也必须删除:

filter.removeErrorListeners();
Run Code Online (Sandbox Code Playgroud)