2

OCamlプログラムを解析して実行するVBAために、コンパイラ (パーサーを含む) を作成する予定ですVBVBA単純な命令型言語でこれを実行しましたが、 or/andの「オブジェクト」機能を処理する方法がわかりませんVB...

私がインスピレーションを与えることができる既存の作品があるかどうか誰か知っていますか?

4

2 に答える 2

5

OCamlソリューションではありません(ただし、OPは尋ねました):

当社のDMS Software Reengineering Toolkitは、汎用プログラム分析および変換機構です。これは、コンピューター言語用のカスタム ソフトウェア エンジニアリング ツールの便利な基盤となることを目的としており、ツール エンジニアが車輪の再発明に時間を費やすのではなく、仕事をやり遂げるのを支援することを目的としています。特に、パーサーを取得することが仕事の大きな部分であると多くの人が考えています。これは単に誤りです。解析後の生活を参照してください。

DMS には、さまざまな言語 (VB6、VBA [基本的に VB6 と同じ]) および VB.net のVisual Basicを含む、最新および従来の両方の多くの言語の運用フロント エンドがあります。

プロダクションとは、かなりのサイズの実際のコード システムに適用され、対応するすべての解析の問題を処理することを意味します。VB などのレガシー言語、特に古い方言の場合、これは非常に困難です。そのような言語は一般に文書化されていないためです (VB6 と VBA は特にそうです)。これを正しく行う唯一の方法は、ドラフト パーサーを作成し、実際に実行して、多くのコードが適切に処理されるまで修正することです。これは、エラーを理解するのが容易ではない (文書化されていない!) ため、ドラフト パーサーを実行するよりも時間がかかることがよくあります。エラーが本物なのか、それともコード ベースにジャンクがあるだけなのかを判断する必要があります (思ったよりも頻繁に)。 )、それが文法にとって何を意味するかを推測し、もう一度試してみてください。

これらのフロント エンドは、最小限のソース コードを解析し、AST を構築します。また、このプロセスを逆にして、コメントをソース テキスト ファイルとして戻して、合法的なコンパイル可能なコードを再生成することもできます。VisualBasic フロント エンドがこれを行います。他のフロント エンド (C、C++、Java、COBOL) の一部は、名前/型の解決、フロー分析など、さらに進んでいます。言語固有の AST から主要なプログラム ファクトを収集し、DMS が提供する機械を適用して結果を計算することで、これを行います。そのような事実が有用な場合、これは VisualBasic でも可能です。

于 2012-07-20T17:31:14.367 に答える
1

OCaml で書かれた小さな OO 言語の例については、http: //andrej.com/plzoo/で boa のソース コードをチェックしてください。

ただし、オブジェクト指向のフレーバーはクラスベースではないため、それがどれほど役立つかはわかりません。

于 2012-07-22T04:37:49.503 に答える