Я размышлял над созданием языка, который очень хорошо подходил бы для создания DSL, позволяя определять функции, которые являются инфиксными, постфиксными, префиксными или даже состоят из нескольких слов. Например, вы можете определить оператор умножения инфиксов следующим образом (где умножение (X, Y) уже определено):
a * b => multiply(a,b)
Или постфиксный оператор "квадрат":
a squared => a * a
Или троичный оператор в стиле C или Java, который включает два ключевых слова с переменными переменными:
a ? b : c => if a==true then b else c
Ясно, что в таком языке есть много возможностей для неоднозначностей, но если он статически типизирован (с выводом типа), то большинство двусмысленностей можно было бы устранить, а те, которые остались, можно было бы считать ошибкой синтаксиса (исправлять добавление скобок в случае необходимости).
Есть ли какая-то причина, по которой я не вижу, которая сделала бы это чрезвычайно трудным, невозможным или просто плохой идеей?
Редактировать: Несколько человек указали мне на языки, которые могут делать это или что-то в этом роде, но на самом деле меня интересуют указатели на то, как я могу реализовать свой собственный синтаксический анализатор, или проблемы Я мог бы столкнуться при этом.