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