Учитывая ANTLR ParserRuleContext, как мне найти первого родителя данного типа? - PullRequest
0 голосов
/ 31 марта 2020

Я использую ANTLR XPath, чтобы получить зависимости таблиц представлений базы данных:

//create_view//from_clause//tableview_name

Теперь мне нужно получить имя представления, которому принадлежит каждое имя таблицы. Например, если бы существовал метод FirstParentOfType, код мог бы выглядеть так:

context.FirstParentOfType<Create_viewContext>().tableview_name().GetText();

Но этот метод, насколько я могу судить, не существует. Как это сделать?

1 Ответ

0 голосов
/ 31 марта 2020

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

public static class RuleContextExtensions
{
    public static T FirstParentOfType<T>(this RuleContext context) where T : RuleContext => context as T ?? (context.Parent != null ? FirstParentOfType<T>(context.Parent) : null);
}
...