8

練習のためにいくつかのドメイン固有言語 (DSL) を作成したいのですが、最初のアイデアはBrainfuckのインタープリターまたはコンパイラーを作成することです。最初のアイデアは、Brainfuck コマンドとして動作するように関数をオーバーライドすることでした: ">", "<", "+", "-", ".", ",", . 残念ながら、 として関数をデカールすることはできません。"[""]""."

Scalaで書くためのより良い解決策はありますか?

4

3 に答える 3

6

あなたの質問では具体的には言っていませんが、DSL と言うときは、内部 DSLを意味しているようです。

内部 DSL は優れていますが、基本的に、使用しようとしている言語の構文によって常に制限されます。Scala は、シンプルで柔軟な構文を備えているため、内部 DSL を作成するのに特に適した言語です。しかし、それは無限に柔軟ではありません。

あなたが探求したいと思うかもしれない他の手段は次のとおりです。

  1. 「.」の代わりに別の記号を選択してください。Scala は Unicode 識別子をサポートできるので、その道を進みたい場合は、おそらく "∙" を使用できますか?
  2. 代わりに外部 DSLを作成しますか?
于 2012-01-30T13:39:45.703 に答える
5

この例はご存知かと思います。

また、コメントでMikaël Mayerが提案したこの例。

于 2012-01-30T13:07:45.473 に答える
1

Scala パーサー コンビネーターを利用する BrainFuck インタープリターを作成しました。役立つ場合は、ソースコードがここにあります。

于 2012-01-30T13:47:13.777 に答える