9


5

軽量のインタプリタを実装する必要があるプロジェクトを始めています。 インタプリタは単純な科学的アルゴリズムを実行するために使用されます。 このインタプリタが使用するプログラミング言語は、ソフトウェア以外の開発者(数学者など)を対象としているため、単純である必要があります。

インタプリタは基本的なプログラミング言語機能をサポートするべきです:

  • 実数、変数、多次元配列

  • 二項(、 - 、*、/、%)およびブール(==、!=、<、>、⇐、> =)操作

  • ループ(for、while)、条件式(if)

  • 関数

    http://www.mathworks.com/[MathWorks MatLab]は、私が向かっている場所の好例です。 インタプリタは、アルゴリズムを実証するための環境として使用されます。データセット/配列の平均を見つけるなどの単純なアルゴリズム、または http://en.wikipedia.org/wiki/Gaussian_elimination[Gaussian elimination]または http://en.wikipedia.org/wiki/Gaussian_elimination[RSA]

この問題について私が見つけた最も良い/最も実用的なリソースは、Ron AyoubのCode Project( インタープリタパターンを使用した代数式の解析)のエントリです。私の問題の縮小版です。

パープルドラゴンブックは多すぎるようですが、もっと実用的なものはありますか。

インタプリタは、C#を使用して.NETライブラリとして実装されます。 ただし、この問題の設計アーキテクチャの部分は最も困難なので、あらゆるプラットフォームのリソースは大歓迎です。

実用的なリソースはありますか?

(「これは些細なことではない」または「なぜ車輪を作り直すのか」という回答は避けてください)

8 Answer


10


私はそれを ANTLRに書きます。 文法を書き、ANTLRにC#パーサーを生成させます。 あなたはANTLRがパースツリーを要求することができ、そしておそらくインタプリタはすでにパースツリーを操作することができます。 おそらく、構文解析ツリーをもっと抽象的な内部表現に変換する必要があるでしょう(ただし、ANTLRは既にツリーの生成時に無関係な句読点を除外することを許可しています)。


2


奇妙に聞こえるかもしれませんが、Game Scripting Masteryはコードの解析、コンパイル、および解釈について学ぶための優れたリソースです。

あなたは本当にそれをチェックアウトするべきです:


2


その方法の1つは、既存のインタプリタのソースコードを調べることです。 私はDプログラミング言語でJavaScriptインタプリタを書きました、あなたはhttp://ftp.digitalmars.com/dmdscript.zipからソースコードをダウンロードすることができます

Walter Bright、デジタルマーズ


2


これはまさにそれが設計されているものであるので、私はこれをするためにDLRを活用することをお勧めします。

http://www.dotnetguru.org/us/dlrus/DLR2.htm[DLRの上に自分の言語を作成する]


2


http://www.lua.org/[Luua]は、プログラマー以外の人が使用するための拡張可能なインタプリタとして設計されました。 (それ以来、最初のユーザーはブラジルの石油地質学者でしたが、 http://www.wowprogramming.com/[ユーザー数は大幅に拡大しました]。)Luaを使えば、科学的なアルゴリズムや視覚化、簡単に追加できます。 それは素晴らしくうまく設計されていて、あなたは目前の仕事を続けることができます。

もちろん、あなたが本当に欲しいのがあなた自身のものを作ることの楽しさであれば、他のアドバイスは妥当です。


1


 http://www.codeplex.com/IronPython[IronPython]の使用を検討しましたか? から使いやすいです
.NET and it seems to meet all your requirements. I understand that
pythonは科学的プログラミングではかなり人気があるので、ユーザーはすでにそれに精通している可能性があります。


0


_ このインタプリタが使用するプログラミング言語は、ソフトウェア以外の開発者を対象にしているため、単純でなければなりません。 _

私はあなたの質問のこの部分を詳しく説明します。 単純な言語は、あなたがソフトウェア以外の開発者に本当に伝えたいものではありません。 切り取られた言語はプログラマーによる努力をもっと必要とします。 あなたが本当に欲しいものはうまく設計され、うまく実行されたドメイン特定言語(DSL)です。

この意味で、私はNorman RamseyがLuaに推薦するものの2番目にします。 高品質のDSLの基盤として優れた評価を得ています。 十分に文書化された有用なDSLは時間と労力がかかりますが、ドメインエキスパートが迅速に立ち上がって最小限のサポートしか必要としない場合、長期的にみれば誰もが時間を節約できます。


0


私は誰もまだ xtextについて言及していないのに驚いています。 Eclipse pluginおよび IntelliJ pluginとして入手できます。 ANTLRのようなパーサーだけでなく、DSLに必要なパイプライン全体(パーサー、リンカー、タイプチェッカー、コンパイラーを含む)を提供します。 インタプリタ/コンパイラがどのように動作するかを理解するためにGithubでそのソースコードをチェックすることができます。