2016-07-19 2 views
0

У меня есть пользовательские ParsingException (String сообщение, внутр местоположение, String offendingText)Правильный способ добавления пользовательских исключений в Лексер/Parser файлы в 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

Вы должны переопределить syntaxError метод BaseErrorListener вместо notifyErrorListeners и recover, как это здесь: проделать описанное Handling errors in ANTLR4.

+0

нормально, но если я делаю lexer.addErrorListener (ThrowingParsingExceptionErrorListener.INSTANCE); как я могу получить оскорбительный текст, так как оскорбительный символ имеет значение NULL? благодаря –

Смежные вопросы