10

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

インタープリターは、基本的なプログラミング言語機能をサポートする必要があります。

  • 実数、変数、多次元配列
  • バイナリ (+、-、​​、/、%) およびブール (==、!=、<、>、<=、>=) 演算
  • ループ(for、while)、条件式(if)
  • 機能

MathWorks の MatLabは、私が目指すところの良い例です。インタープリターは、アルゴリズムを実証するための環境として使用されます。データセット/配列の平均を見つけるなどの単純なアルゴリズム、またはガウス消去法RSAなどの少し複雑なアルゴリズム。

この件に関して私が見つけた最良/最も実用的なリソースは、Ron Ayoub の Code Project に関するエントリ ( Parsing Algebraic Expressions Using the Interpreter Pattern ) です。これは、私の問題の縮小版の完璧な例です。

紫龍の本は多すぎるようですが、もっと実用的なものはありますか?

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

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

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

4

9 に答える 9

10

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

于 2008-11-02T07:47:56.503 に答える
3

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

あなたは本当にそれをチェックアウトする必要があります:

http://www.amazon.com/Scripting-Mastery-Premier-Press-Development/dp/1931841578

于 2008-11-02T07:50:40.850 に答える
2

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

ウォルター・ブライト、デジタル・マーズ

于 2008-11-04T06:24:24.160 に答える
2

これはまさに DLR の設計目的であるため、これを行うには DLR を活用することをお勧めします。

DLR の上に独自の言語を作成する

于 2008-11-04T06:31:47.857 に答える
2

Luaは、非プログラマー向けの拡張可能なインタープリターとして設計されました。(最初のユーザーはブラジルの石油地質学者でしたが、それ以来、ユーザー ベースは大幅に拡大しています。) Lua を使用して、科学的アルゴリズム、視覚化などを簡単に追加できます。それは非常によく設計されており、目の前のタスクに取り掛かることができます.

もちろん、あなたが本当に望んでいるのは、独自のものを構築する楽しさである場合、他のアドバイスは合理的です.

于 2008-12-12T06:39:57.943 に答える
1

IronPython の使用を検討しましたか? .NET から簡単に使用でき、すべての要件を満たしているようです。Python は科学的プログラミングでかなり人気があることを理解しています。そのため、ユーザーはすでに Python に精通している可能性があります。

于 2008-11-04T06:38:25.363 に答える
0

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

私はあなたの質問のこの部分に参加します。単純な言語は、ソフトウェア以外の開発者に提供したいものではありません。簡素化された言語は、プログラマーによるより多くの努力を必要とします。本当に必要なのは、よく設計され、適切に実装されたドメイン固有言語 (DSL) です。

この意味で、Norman Ramsey が Lua で推奨するものを 2 番目に使用します。高品質なDSLの拠点として定評があります。十分に文書化された有用な DSL には時間と労力がかかりますが、ドメインの専門家が迅速に知識を習得し、最小限のサポートしか必要としない場合、長期的には全員の時間を節約できます。

于 2012-05-26T00:11:14.333 に答える
0

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

于 2017-05-18T16:13:51.560 に答える