ANTLR 4: избегайте ошибок печати на консоль
С ANTLR я разбираю грамматику. Ошибки ANTLR указываются в пользовательском редакторе грамматики. Однако я хотел бы отключить печать сообщений об ошибках на консоль Java.
я реализовал свой собственный BaseErrorListener и удалил значение по умолчанию, как описано в книге ANTLR:
MyErrorListener errList=new MyErrorListener ();
lexer.removeErrorListeners();
lexer.addErrorListener(errList);
parser.removeErrorListeners();
parser.addErrorListener(errList);
все еще я получаю печатные выходы на свою консоль Java (подключенную к выходу Java и потоку ошибок).
Как отключить печать на консоль в ANTLR?
3 ответов
по умолчанию 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();