Смотрите на ваши пользовательские недвоичные функции так же, как вы смотрите на двоичные выражения.
Например, 2 + 3 * 4 переводится в + (* (3,4), 2) // +и * здесь только имена функций
Вы можете смешивать в пользовательской функции:
Например, ^ 3 + Макс (a, b, c) * 2 переводится в: + (^ (a, 3), * (2, Max (a, b, c))
В вашем интерпретаторе определите, что означают + (), ^ (), Max (), your_custom_function () и какие параметры (т. Е. Childузлы в дереве), чтобы ожидать. Дерево не будет двоичным, но это не меняет способ его создания и обхода.