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