Обработка ошибок/исключений Antlr

Проведя некоторое исследование в Интернете, я обнаружил, что это будет способ поймать исключения и вывести мои собственные сообщения об ошибках. По какой-то причине я до сих пор не могу поймать ошибки. Ниже приведен код класса, который переопределяет обработку ошибок antlrs по умолчанию.

Все, что я хочу сделать, это поймать исключение из antlr и вывести на экран, что синтаксис неверен в графическом интерфейсе Java.

public class ExceptionErrorStrategy extends DefaultErrorStrategy {

@Override
public void recover(Parser recognizer, RecognitionException e) {
    throw e;
}

@Override
public void reportInputMismatch(Parser recognizer, InputMismatchException e) throws RecognitionException {
    String msg = "Input is mismatched " + getTokenErrorDisplay(e.getOffendingToken());
    msg += " expecting: "+e.getExpectedTokens().toString(recognizer.getTokenNames());
    RecognitionException ex = new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext());
    ex.initCause(e);
    throw ex;
}

@Override
public void reportMissingToken(Parser recognizer) {
    beginErrorCondition(recognizer);
    Token t = recognizer.getCurrentToken();
    IntervalSet expecting = getExpectedTokens(recognizer);
    String msg = "Missing "+expecting.toString(recognizer.getTokenNames()) + " at " + getTokenErrorDisplay(t);
    throw new RecognitionException(msg, recognizer, recognizer.getInputStream(), recognizer.getContext());
}
}

person stacktraceyo    schedule 16.10.2013    source источник


Ответы (1)


Если все, что вы хотите сделать, это сообщить об ошибках, то вы, вероятно, ищете ANTLRErrorListener , а не интерфейс AntlrErrorStrategy. Последний направлен на фактическое изменение поведения анализатора в ответ на ошибки, например. для попыток автоматического восстановления.

В ANTLRWorks 2 я использую следующие два класса в качестве основных реализаций этого интерфейса:

person Sam Harwell    schedule 16.10.2013
comment
Знаете ли вы, какой метод на самом деле выдает ошибки на мою консоль? - person stacktraceyo; 16.10.2013
comment
Неясный побочный вопрос: насколько болезненно было добавить поддержку нового языка в Netbeans? - person Darien; 16.10.2013
comment
@Sam Harwell Привет, интересно, есть ли у вас синтаксис C # для DescriptiveErrorListener и SyntaxErrorListener выше? У меня возникли проблемы с поиском синтаксиса для части распознавателя public override void syntaxError<T>(Antlr4.Runtime.Recognizer<> recognizer, T offendingSymbol,... или указателя на пример C#, который собирает ошибки в список строк, а не выводит их на консоль во время синтаксического анализа. Спасибо. - person Kevin; 02.08.2020