При обработке моего дерева синтаксического анализа ANTLR4 посетителем иногда мне нужно знать узлы родительских правил, под которыми находится мой узел правил. В онлайн-документации API для ParserRuleContext
я не нахожу метода/поля, которое может возвращать имя правила, которое представляет объект. Я знаю, что имя правила является частью имени подкласса ParserRuleContext
, например. function_definition
узел правила относится к классу Function_definitionContext
. Но чтобы узнать имя класса, мне нужно использовать отражение Java и вручную разбить строку Context
в конце.
Есть ли более простой способ получить имя правила, которое представляет объект ParserRuleContext
?
Обычно требуется запросить имя узла родительского правила. Например, при обработке грамматики C++ объявление класса C++ может находиться в глобальной области видимости, определении функции или другом объявлении класса, что означает, что узел правила class_declaration
может быть вложен в узел правила global_scope
, function_definition
или class_declaration
. Если я хочу изолировать только те узлы class_declaration
под global_scope
, мне нужно найти родительские узлы и убедиться, что они не function_definition
или class_declaration
.