我希望创建一个DSL,我正在寻找一种语言,您可以为floor and ceiling functions之类的内容定义自己的括号样式运算符。我宁愿不去定义我自己的Antlr解析器以获得自定义语法。
据我所知,我所知道的唯一允许你定义自定义运算符的语言都是二进制中缀运算符。
tl; dr:哪些语言允许定义的配对符号(如左括号/闭括号)操作符?
另外,如果没有人指定具有此功能的单一语言并且标准非常具体且绝对在编程域中,我不会看到这个问题如何“过于宽泛”。
答案 0 :(得分:3)
由于Fortress死了,我所知道的唯一可以想象的东西是FORTH遗产。
在我所知道的所有其他内容中,大括号,括号和圆括号已经被大量使用,并且无法进一步超载。
我建议放弃对这些东西的追求并轻松写作
floor x
ceiling y
或者功能应用程序以您选择的语言表达。
然而,在你引用的文章中,有人说:Unicode包含这些符号的代码点,位于U + 2308-U + 230B:⌈x⌉,⌊x⌋。
因此,您至少可以在类似Haskell的语言中定义此运算符,并使用:
infix 5 ⌈⌉
(foo ⌈⌉)
我能想出的最好成绩如下:
--- how to make brackets
module Test where
import Prelude.Math
infix 7 `«`
infix 6 `»`
_ « x = Math.ceil x
(») = const
x = () «2.345» ()
main _ = println x
输出为:3.0 (这实际上不是Haskell,而是Frege,一种类似Haskell的JVM语言。)
请注意,我使用«»而不是⌈⌉,因为我在IDE中没有任何字体可以正确显示括号符号。 (这是不这样做的另一个原因。)
它的工作方式是使用infix
指令,我们将其解析为
(») ((«) () 2.345) ()
(可以插入任何表达式代替()
)
也许如果你在Haskell小组中询问,有人会找到更好的解决方案。