我对“真正的解析器”,如F#或Haskell,解析自定义运算符的方式有点纠结。对于“普通”语言,我们只需定义一个可以预定义运算符的AST节点,例如:+,-,*,==,>=,+=,...等。但我想知道如何在函数式语言中创建自定义运算符,让我们以OCaml为例,非常接近F# (我的实现语言),并且非常著名。因此,每个运算符都是一个函数,具有类型和定义,我们可以创建自己的运算符:
val (+) :
我一直在考虑创建一种非常适合创建DSL的语言,方法是允许定义包含infix、后缀、前缀甚至由多个单词组成的函数。例如,您可以定义一个infix乘法运算符如下(其中乘法(X,Y)已经定义):或后缀“平方”运算符:或者一个C或Javab : c => if a==true then b else c
显然,在这种语言中有很大的歧义空间,但是如果它是静态