Наилучшая практика обработки ошибок в Visitor

StackOverflow https://stackoverflow.com//questions/25006874

  •  20-12-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Я бы добавил 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;
        }

        //...
    }


}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top