Не используйте visitTerminal
метод посетителя для токенов, для которых вам нужен контекст. Вместо этого используйте методы для посещения содержащих правил. Это зависит от вашей грамматики (на которую вы здесь не ссылались), так что я могу только догадываться. Но у вас, вероятно, есть что-то вроде: SELECT selectItem* fromClause whereClause? ...
. Правило selectItem
может содержать что-то вроде:
selectItem: expr alias?;
с
alias: AS_SYMBOL? identifier;
Теперь вы можете использовать метод посетителя visitSelectItem
, чтобы определить, существует ли псевдоним столбца / подзапроса, изучив переданный в контексте (примерно: context.alias().AS_SYMBOL
).
Это всего лишь один пример того, как можно использовать ключевое слово AS, но принцип тот же для всех других вхождений. Посетите содержащее правило (может быть не непосредственно содержащее правило (здесь, например, alias
), но более высокое правило, которое дает вам достаточно контекста, чтобы определить, какую AS вы смотрите.