すべての ANTLR エラー メッセージを SLF4J で処理して、他のメッセージの中で適切な順序で表示されるようにしようとしていますが、うまくいきません。
エラー報告と回復の例に従って、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' で実行可能な代替手段がありません