我一直在考虑创建一种非常适合创建 DSL 的语言,方法是允许定义中缀、后缀、前缀甚至由多个单词组成的函数。例如,您可以如下定义中缀乘法运算符(其中 multiply(X,Y) 已定义):
a * b => multiply(a,b)
或后缀“平方”运算符:
a squared => a * a
或者是 C 或 Java 风格的三元运算符,它涉及两个散布在变量中的关键字:
a ? b : c => if a==true then b else c
显然,在这种语言中存在很多歧义,但如果它是静态类型的(使用类型推断),则可以消除大多数歧义,并且可以将剩余的歧义视为语法错误(通过添加括号来纠正合适的)。
是否有一些我看不到的原因会使这变得极其困难、不可能,或者只是一个糟糕的主意?
编辑:许多人向我指出了可能执行此操作或类似操作的语言,但我实际上对如何实现我自己的解析器的指针感兴趣,或者如果这样做我可能会遇到的问题。