и в ast есть несколько, так сказать, ортогональных характеристик элементов для этого дерева.
Типо есть выражения (+, -, !)
И объявления всякие.
И каждое выражение может быть инфиксным, префиксный и т.п.
и Объявлления так же могут быть такими.
Но по сути тебе приходит некоторый интерфейс Node{} и ты просто смотришь каким типам он соответствует, приводишь их к нужному типу и работаешь с ним