練習のためにいくつかのドメイン固有言語 (DSL) を作成したいのですが、最初のアイデアはBrainfuckのインタープリターまたはコンパイラーを作成することです。最初のアイデアは、Brainfuck コマンドとして動作するように関数をオーバーライドすることでした: ">"
, "<"
, "+"
, "-"
, "."
, ","
, . 残念ながら、 として関数をデカールすることはできません。"["
"]"
"."
Scalaで書くためのより良い解決策はありますか?
練習のためにいくつかのドメイン固有言語 (DSL) を作成したいのですが、最初のアイデアはBrainfuckのインタープリターまたはコンパイラーを作成することです。最初のアイデアは、Brainfuck コマンドとして動作するように関数をオーバーライドすることでした: ">"
, "<"
, "+"
, "-"
, "."
, ","
, . 残念ながら、 として関数をデカールすることはできません。"["
"]"
"."
Scalaで書くためのより良い解決策はありますか?
あなたの質問では具体的には言っていませんが、DSL と言うときは、内部 DSLを意味しているようです。
内部 DSL は優れていますが、基本的に、使用しようとしている言語の構文によって常に制限されます。Scala は、シンプルで柔軟な構文を備えているため、内部 DSL を作成するのに特に適した言語です。しかし、それは無限に柔軟ではありません。
あなたが探求したいと思うかもしれない他の手段は次のとおりです。
この例はご存知かと思います。
また、コメントでMikaël Mayerが提案したこの例。
Scala パーサー コンビネーターを利用する BrainFuck インタープリターを作成しました。役立つ場合は、ソースコードがここにあります。