2016-07-19 53 views
0

我有一個自定義 ParsingException(字符串消息,INT位置,字符串offendingText)正確的方式自定義異常增加詞法分析器/分析器文件antlr4

我希望我的解析器拋出此異常時解析/詞法錯誤遇到。

這是正確的嗎?

@parser::members 
{ 
    @Override 
    public void notifyErrorListeners(Token offendingToken, String msg, RecognitionException ex) 
    { 
    throw new ParsingException(msg,offendingToken.getStartIndex(),offendingToken.getText()); 
    } 
} 
@lexer::members { 
    @Override 
    public void recover(RecognitionException ex) 
    { 
throw new ParsingException(ex.getMessage(),getCharPositionInLine(),ex.getOffendingToken().getText()); 
     } 
      } 

我得到了一個UnhandledException錯誤。

回答

1

,你應該重寫的BaseErrorListener,而不是notifyErrorListenersrecover,因爲它描述下這裏syntaxError方法:Handling errors in ANTLR4

+0

好的,但如果我做了lexer.addErrorListener(ThrowingParsingExceptionErrorListener.INSTANCE);由於違規的符號爲空,我怎樣才能得到違規的文字?謝謝 –