Как получить маркер ошибки для определенного элемента массива

Я написал проверку, которая работает нормально, но я хочу знать, как установить маркер ошибки (красная линия, нарисованная под вводом) в нужное положение.
Проблема в том, что часть моей грамматики выглядит так:

Declaration:
name = ID "=" singleContent=VarContent (OPERATOR nextCon+=VarContent)*
;

Валидатор теперь обнаруживает ошибку в определенном элементе nextCon, поэтому мой вопрос заключается в том, как я могу ссылаться на этот конкретный элемент, чтобы функции ошибок знали, где провести линию.

Ввод, который я проверяю, выглядит так:

var = 3 * 4 + -var2

«-» в var2 неверен, и поэтому я хочу выделить ошибку прямо здесь или выделить полный оператор «-var2».

Привет Крзмбрзл


person Raven    schedule 17.05.2015    source источник


Ответы (1)


В своем правиле проверки вы можете использовать один из перегруженных вариантов error(..) или warning(..), который принимает индекс, если у вас есть функция с несколькими значениями, такая как nextCon.

Фрагмент грамматики, который вы опубликовали, указывает, что вы используете не дерево для разбора выражения, а список значений. Вы можете ознакомиться с документацией, чтобы узнать, как исправить это.

person Sebastian Zarnekow    schedule 18.05.2015
comment
В чем преимущество использования дерева в этом случае? Я имею в виду, что он отлично работает, как есть... - person Raven; 18.05.2015
comment
Дерево гарантирует, что вы получите правильный приоритет в случае + и * - person Sebastian Zarnekow; 19.05.2015
comment
Ах, хорошо, теперь я понимаю... Спасибо за этот совет, но для моей цели мне вообще не нужно заботиться о приоритете, так как я хочу только создать подключаемый модуль для существующего языка (и я не буду реализовывать компилятор ) - person Raven; 20.05.2015