Установить узлы AST как временные (эффективно удалить их из AST)?

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

Взгляните на этот лес AST:

введите описание изображения здесь

Сгенерированный мной синтаксический анализатор ANTLR предназначен для статического анализа языка программирования. Следовательно, дерево variable -> base_variable_with_function_calls -> base_variable ... не представляет интереса.

Достаточно того факта, что $ d является составной_переменной.

Поэтому: могу ли я каким-то образом установить правила создания tar ANTLR как временные, чтобы ANTLR автоматически анализировал правило грамматики, но не создавал промежуточные узлы AST?

Очевидно, такой тег можно применять только к продуктам, у которых есть единственный дочерний узел.


person SteAp    schedule 19.09.2013    source источник


Ответы (1)


Нет, ANTLR 4 не поддерживает это. Сгенерированное дерево синтаксического анализа будет содержать каждый токен, соответствующий грамматике, и будет содержать RuleNode для каждого правила, вызванного грамматикой.

person Sam Harwell    schedule 20.09.2013