2016-07-19 13 views
0

ich eine benutzerdefinierte ParsingException (String Nachricht, int Lage, String offendingText)korrekte Art und Weise individuelle Ausnahme von Lexer/Parser-Dateien in antlr4

Ich möchte meinen Parser muss hinzufügen, diese Ausnahme werfen, wenn eine Analyse/lexing Fehler ist angetroffen.

Ist das korrekt?

@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()); 
     } 
      } 

Ich bekomme einen UnhandledException Fehler mit diesem.

Antwort

1

Sie sollten syntaxError Methode von BaseErrorListener außer Kraft setzen statt notifyErrorListeners und recover wie es hier decribed: Handling errors in ANTLR4.

+0

ok, aber wenn ich lexer.addErrorListener (ThrowingParsingExceptionErrorListener.INSTANCE); Wie kann ich den fehlerhaften Text erhalten, da das betreffende Symbol null ist? Vielen Dank –