【发布时间】:2010-09-30 10:25:12
【问题描述】:
我一直在考虑创建一种非常适合创建 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
显然,这种语言有很多歧义,但如果它是静态类型的(使用类型推断),则可以消除大多数歧义,而剩下的可能被视为语法错误(由在适当的地方添加括号)。
是否有一些我看不到的原因会使这变得极其困难、不可能,或者只是一个糟糕的主意?
编辑: 很多人向我指出了可能执行此操作或类似操作的语言,但我实际上对如何实现我自己的解析器的指针感兴趣,或者如果这样做我可能会遇到的问题。
【问题讨论】:
标签: parsing syntax programming-languages infix-notation postfix-notation