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

时间:2014-09-23 08:14:06

标签: antlr antlr4

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

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

MyErrorListener errList=new MyErrorListener ();
lexer.removeErrorListeners();
lexer.addErrorListener(errList);
parser.removeErrorListeners();   
parser.addErrorListener(errList);

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

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

3 个答案:

答案 0 :(得分:10)

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

您可以在代码中将其删除:

lexer.removeErrorListener(ConsoleErrorListener.INSTANCE);

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

答案 1 :(得分:3)

您可以查看您拥有的听众

for (ANTLRErrorListener listener : parser.getErrorListeners()) {
        System.out.println(listener);
}

寻找ConsoleErrorListener

答案 2 :(得分:1)

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

Filter filter = new Filter(tokens)

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

filter.removeErrorListeners();