1

我一直在尝试让 SLF4J 处理所有 ANTLR 错误消息,以便它们在其他消息中以正确的顺序显示,但我没有任何运气。

按照错误报告和恢复的示例,我尝试覆盖emitErrorMessagedisplayRecognitionErrorrecoverFromMismatchedToken

@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' 处没有可行的替代方案
4

1 回答 1

1

@members是缩写,@parser::members您发布的那些错误消息看起来是词法分析器错误。尝试添加@lexer::members以处理它们。

于 2013-07-31T15:51:58.543 回答