Я создаю библиотеку для перевода Конкретного синтаксического дерева (дерево синтаксического анализа, сгенерированного ANTLR 4) в абстрактное синтаксическое дерево, созданное из классов, которые я объявил сам (https://ruslanspivak.com/lsbasi-part7/ - это пример, как объявить такие классы и построить AST в Python). Мой вопрос - каков наилучший способ перевода - следует ли мне начинать перевод с root CST, а затем постепенно добавлять дочерние узлы в AST. Или мне следует go перейти к листам CST и построить AST из листьев.
До сих пор я видел, что классы AST обычно имеют строго типизированные конструкторы и поэтому восходящий путь ( от листьев до root) - единственный способ создания экземпляров узлов AST и их объединения в дерево. Но мне кажется, что проще начать с root, но для этого требуется, чтобы классы AST имели специальные методы, которые подключают дочерние узлы к экземплярам узлов AST, но я пока не видел таких функций в реализациях AST.
Итак - каков предлагаемый путь (сверху вниз, снизу вверх) для построения AST из CST и почему было бы удобно / хорошо построить AST из листьев?