我一直在尝试让 SLF4J 处理所有 ANTLR 错误消息,以便它们在其他消息中以正确的顺序显示,但我没有任何运气。
按照错误报告和恢复的示例,我尝试覆盖emitErrorMessage
、displayRecognitionError
和recoverFromMismatchedToken
:
@members {
private Logger logger = LoggerFactory.getLogger(getClass().getName());
@Override
public void displayRecognitionError(String[] token_names, RecognitionException e) {
logger.error("error at " + TextUtil.join(" ", token_names), e);
}
@Override
public void emitErrorMessage(String msg) {
logger.error(msg);
}
@Override
protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws RecognitionException {
throw new MismatchedTokenException(ttype, input);
}
}
但是,我仍然收到有关 STDERR 的消息:
第 1:10 行在字符 'y' 处没有可行的替代方案 第 1:12 行在字符 'y' 处没有可行的替代方案