Наилучшая практика обработки ошибок в Visitor
Вопрос
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;
}
//...
}
}