Язык, подобный SML, предложит особенно общее решение для анализа произвольных операторов с произвольными операторами с аббревиатурой. Например, в оболочке SML введите
datatype ty = + of ty * ty | * of ty * ty | <& of ty * ty | I of int;
infix <& 9; (*Gives our new crazy op a high priority*)
Если вам нужен вывод текста, то примерно так это и будет делать:
fun pr (a*b) =(print"(";pr a;print"*";pr b;print")")
| pr (a<&b)=(print"(";pr a;print"+";pr b;print")")
| pr (I a) =print (Int.toString a);
Затем он будет анализировать все, что вы вводите в дерево, которое вы хотите. Существует не так много языков со встроенной поддержкой для добавления новых инфиксных операторов. В противном случае вам придется использовать библиотеки или парсеры строк.
Мне это не поможет, но это самое крутое решение (как и почти все, что использует классные языки, такие как SML).