使用ANTLR,我解析语法。 ANTLR错误在语法的自定义编辑器中指示。
但是,我想禁用将错误消息打印到Java控制台。
我已经实现了自己的BaseErrorListener并删除了ANTLR书中描述的默认值:
MyErrorListener errList=new MyErrorListener ();
lexer.removeErrorListeners();
lexer.addErrorListener(errList);
parser.removeErrorListeners();
parser.addErrorListener(errList);
我仍然得到打印输出到我的Java控制台(连接到Java输出和错误流)。
如何在ANTLR中禁用打印到控制台?
默认, 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);
)
您可以查看您拥有的听众
for (ANTLRErrorListener listener : parser.getErrorListeners()) {
System.out.println(listener);
}
寻找 ConsoleErrorListener
。
我终于找到了解决方案。我在语法之前有一个过滤器:
Filter filter = new Filter(tokens)
还必须删除过滤器的侦听器(预解析器类):
filter.removeErrorListeners();