我正在考虑将Scala用于内部DSL(即DSL实际上是Scala)用于音乐创作。我想使用标识符,如尖锐的符号,♯(U + 266F)。看起来这是不可能的:
val c♯0 = 13
不解析。我能得到的最接近的是:
val c0_♯ = 13
我不喜欢它。强制标识符这样命名的理由是什么?
答案 0 :(得分:5)
Scala的语法试图迎合许多相互冲突的要求。为了在“类似运算符”的方法名称(例如+
,/
或::
)之间选择任意空格以及它们在任何一方的参数,必须有一个表示给定名称包含标点符号和字母数字字符混合的方式。
请记住,内部DSL不是新语言!他们充其量只是成为新语言的幻想。他们仍然是斯卡拉。
如果您希望完全自由地控制您向用户提供的语言,您可以编写组合子解析器或使用外部解析器生成器。
对于参与Scala语言处理的任何人,我强烈建议您在编写自己的,专注于狭义的单一用途语言处理代码之前查看Kiama。凯马是一颗宝石!