2013-07-31 6 views
1

나는 SLF4J에서 처리 한 모든 ANTLR 오류 메시지를 다른 메시지들 사이에 적절한 순서로 표시하려고 시도했지만 아무런 운이 없었습니다."가능한 대안"메시지를 어떻게 리디렉션 할 수 있습니까?

내가 emitErrorMessage displayRecognitionError을 무시하려고했습니다 Error Reporting and Recovery의 예에 따라

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에 메시지를 받고 있어요 :

 
line 1:10 no viable alternative at character 'y' 
line 1:12 no viable alternative at character 'y' 

답변

1

@members가 짧다 @parser::members 그리고 게시 한 오류 메시지가 렉서 오류로 보입니다. 그들을 처리하기 위해 @lexer::members을 추가하십시오.

+0

렉서에 대한 'emitErrorMessage'가 무시되었습니다. 필자는 렉서 에러가 파서를 통해 거품이 날 것이라고 추측했다. –