Рекомендации по обработке ошибок в посетителе

Новичок в ANTLR4, но чертовски круто. Извините, если на этот вопрос уже был ответ, но я не мог найти ответ.

Мне интересно, есть ли хорошая/стандартная/общая практика для работы с ошибками в пользовательском посетителе.

Например. У меня есть выражение VisitEqualityExpression, которое сравнивает два объекта, что должно привести к сбою, если объекты не одного типа.

Очевидно, я могу бросить/поймать, но я надеялся/искал что-то вроде ErrorListener, который я использую в парсере. Крутая вещь в ErrorListener заключается в том, что он дает действительно подробную информацию о точной ошибке. Можно ли это сделать в гостевое время?

Я предполагаю, что было бы лучше поймать это во время синтаксического анализа. Например. поймать 'abc' == 123 при разборе?


person XBond    schedule 29.07.2014    source источник


Ответы (1)


Я бы добавил посетителю List<MyErrorType> и добавил бы ошибку в этот список, если она произойдет. Вы можете добавить узел или только строку/столбец вместе с сообщением об ошибке.

Это может выглядеть примерно так:

class MyVisitor : MyGrammarNameVisitor<object>
{
    public readonly List<MyErrorType> errors = new List<MyErrorType>();

    override object visitMyRuleName(MyGrammarName.MyRuleNameContext ctx){
        if (erroneous)
        {
            errors.Add(new MyErrorType(linenumber, column, errorMessage, whateverElseMayBeUseful));
            return null;
        }

        //...
    }


}
person Onur    schedule 29.07.2014