3

私は、音楽の作曲のために内部DSL(つまり、DSLは実際にはScalaです)にScalaを使用することを考えています。シャープな記号、♯(U + 266F)のような文字で識別子を使用したいと思います。これは不可能のようです:

val c♯0 = 13

解析しません。私が得ることができる最も近いものは次のとおりです。

val c0_♯ = 13

私はそれが気に入りません。識別子をこのように強制的に命名する理由は何ですか?

4

1 に答える 1

5

Scalaの文法は、相反する多くの要件に対応しようとします。+「演算子のような」メソッド名( 、、/など::)とその両側の引数の間の空白をオプションにするには、名前に句読点と英数字が混在していることを示す方法が必要です。 。

内部DSLは新しい言語ではないことに注意してください!彼らはせいぜい新しい言語であるという幻想です。彼らはまだScalaです。

ユーザーに提供する言語を完全に自由に制御したい場合は、コンビネーターパーサーを作成するか、外部パーサージェネレーターを使用できます。

Scalaで言語処理に携わっている人は、自分の狭い範囲に焦点を合わせた単一目的の言語処理コードを作成する前に、Kiamaをチェックすることを強くお勧めします。キアマは逸品です!

于 2013-02-08T16:26:09.400 に答える