2012-01-30 11 views
7

実際には、Brainfuckのインタプリタまたはコンパイラを書くことを目的とした、ドメイン固有言語(DSL)を作成したいと考えています。 ">""<""+""-""."",""[""]"を: 最初のアイデアは、Brainfuckコマンドとして、彼らは動作しますなどの機能を無効にすることでした。残念ながら、関数のデカールを"."とすることはできません。Brainfuckコンパイラin scala

Scalaに書き込む方が良いソリューションはありますか?

答えて

6

これはあなたの質問では特に言わないが、あなたがDSLと言うとき、それはInternal DSLを意味するのだろうか?

内部DSLは素晴らしいですが、基本的には使用しようとしている言語の構文によって制限されています。 Scalaは、シンプルで柔軟な構文を持つため、内部DSLを記述するのに特に適した言語です。しかし、それは無限に柔軟ではありません。あなたが探検したい場合があります

他の道は次のようになります。

  1. の代わりに別のシンボルを選択してください「」。 ScalaはUnicodeの識別子をサポートすることができるので、もしあなたがその道を下っていくのを恐れたら、おそらく "∙"を使うことができますか?
  2. 代わりにExternal DSLを作成しますか?
5

これはあなたが気づいていると思いますexample

また、このexampleは、Mikaël Mayerによって示唆されています。

+0

もっとエレガントな方法がありますか? –

+0

私は分かりません、私はスカラの公式サイトからその特定の例を思い出しています。 – fiction

1

私は、Scalaパーサーコンビネータを利用するBrainFuckインタプリタを作成しました。役に立つかもしれない場合はソースコードはhereです。