我正在考虑将Scala用于音乐创作的内部DSL (即DSL实际上是Scala)。我希望使用像锐号♯(U+266F)这样的字符的标识符。看起来这是不可能的:
val c♯0 = 13不解析。我能得到的最接近的是:
val c0_♯ = 13我不喜欢这个。强制标识符这样命名的理由是什么?
发布于 2013-02-09 00:26:09
Scala的语法试图迎合许多相互冲突的需求。为了使“类似运算符”的方法名称(如+、/或::)和两边的参数之间的空格成为可选的,有必要提供一种方法来表示给定名称包含标点符号和字母数字字符的混合。
请记住,内部DSL不是新语言!它们充其量只是一种新语言的幻想。它们仍然是Scala。
如果您想要完全自由地控制您提供给用户的语言,您可以编写一个组合子解析器或使用外部解析器生成器。
对于在Scala中从事语言处理的任何人,我强烈建议您在编写自己的专注于单一用途的语言处理代码之前,先检查一下Kiama。Kiama是一颗宝石!
https://stackoverflow.com/questions/14776875
复制相似问题