使用ANTLR我解析语法。 ANTLR错误在语法的自定义编辑器中指示。 但是,我想禁用将错误消息打印到Java控制台。
我已经实现了自己的BaseErrorListener并删除了ANTLR书中描述的默认值:
MyErrorListener errList=new MyErrorListener ();
lexer.removeErrorListeners();
lexer.addErrorListener(errList);
parser.removeErrorListeners();
parser.addErrorListener(errList);
我仍然将打印输出打印到我的Java控制台(连接到Java输出和错误流)。
如何在ANTLR中禁用打印到控制台?
答案 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();