3

私は本LanguageImplementationPatternshttp://pragprog.com/book/tpdsl/language-implementation-patterns)を読んでいますが、概念を明確にするために他のいくつかの本や時折のWebサイトを混ぜ合わせています。私は、些細なプログラミング言語を読み取り、それに対していくつかの基本的な分析を実行するツールを作成しようとしています。

このツールの設計段階で行き詰まっています。ソースファイルを適切に検証する、単純な手書きの再帰下降パーサーを作成しました。ただし、CodeDomツリーを使用してソース操作を実行すると便利です。

質問:

1)このようなツールがとる論理的な手順は次のとおりです。テキストツリーと一致するシンボルテーブルを解析して構築し、これをCodeDomに変換しますか?

2)テキストツリーを構築する場合、最も便利なのはASTであり、CodeDomへの変換が簡単です。ただし、リファクタリングツールは、インラインコメントを保持するために、ステートメントに埋め込まれたすべてのトークンのリストを維持し、これをどのように追跡しますか彼らの木に?

4

1 に答える 1

0

独自のパーサー、独自のツリービルダー、独自のツリーウォーカー、独自のアナライザー、独自のプリティプリンターを構築できます...しかし、それは多くの作業です。

このすべての機械を提供するツールを検討するかもしれません。

そのようなツールの1つが、DMS SoftwareReengineeringToolkitです。

文法が与えられると、DMSはツリーを解析して自動的に構築します。はい、コメントなどの「マイクロトークン」を自動的にキャプチャし、適切なツリーノードにアタッチします。変換の前または後に、ツリーをきれいに印刷して戻すことができます。シンボルテーブルは構文構造ではなくセマンティックであるため、サポートを提供する必要がありますが、DMSは、構築するライブラリとして汎用シンボルテーブルとスコープ管理ツールを提供します。DMSは、制御およびデータフロー分析用の完全なライブラリも提供します。これは、深刻なコード変換またはリファクタリングを実行する場合に必要です。

DMSの最も優れたプロパティの1つは、文法の構文を使用して記述された変換を適用する機能です。たとえば、「これが(私の言語で)表示された場合は、それで置き換えてください」。

9年生の代数と微積分を定義するレクサー、パーサー、プリティプリンター、および変換ルールを定義する例を見ることができます。 書き換えルールは、代数式の簡略化とシンボリック導関数の計算を実行するために使用されます。

于 2010-06-03T10:12:40.763 に答える