Несколько лет назад я сделал нечто очень похожее - я не строил структуру DLR, но я построил собственную структуру дерева выражений, которая также нуждалась в аргументах во время построения (для достижения неизменности).
Тогда я работал с ANTLR v2 - и должен признать, что я не знаком с новым синтаксисом v3, плюс я не помню всех подробностей о том, как я это делал тогда - поэтому вместо того, чтобы предоставить вам на полностью проработанном примере я просто попытаюсь рассказать вам свою историю (не уверен, относится ли она и к вашей проблеме!):
Прежде всего, не нужно было строить мою структуру из AST. Я использовал только построитель AST ANLTR в качестве транспортного средства: каждое правило построения AST может возвращать объект в дополнение к самому узлу AST. Затем возвращаемое значение можно использовать во внешнем правиле в качестве аргумента для конструктора и т. Д. Так что эта структура автоматически построена для вас снизу вверх!
Итак, вы строите окончательную структуру в то же время, когда создается AST (AST создается только для обеспечения правил синтаксиса, и его можно отбросить.) Этот подход очень надежен и даже быстрее первого построение AST, а затем преобразование этого! Но он по-прежнему использует возможности синтаксического анализатора AST (в отличие от простого использования обычного анализатора / Lexer). И если вам тоже нужен AST - просто сохраните его где-нибудь.
Если, однако, вы хотите пройти готовый AST - я думаю, вы можете использовать любую программную процедуру для этого - просто убедитесь, что она работает снизу вверх для построения вашего результата!
Надеюсь, это поможет каким-то образом!