1

現在、古い VBA (アプリケーション用ビジュアル ベーシック) アプリケーションのサービスを提供しています。そのアプリケーションを分析し、無効な変数を出力する従来のツールを持っています。それらの数は 2000 以上あるので、これを手作業で行いたくありません。

したがって、前述のツールに従ってデッド変数を含む個別のコードファイルを AST に変換し、その方法で削除するというアイデアがありました。

私の質問:これを行うための推奨される方法はありますか? StringTemplate を使用したくありません。すべてのルールのテンプレートを作成する必要があり、非表示のチャネルにコメントがあった場合、それは失われますよね? 必要なのは、そのコードの一部を削除し、残りを読み取ったとおりに出力することだけです。

おすすめはありますか?

4

1 に答える 1

0

いくつかの理論

正規表現だけではタスクを解決できないと思います。つまり、デッドコードセクションの概念を正規言語で定義して、いくつかのantlr文法で記述された文脈自由言語で表現することを期待することはできません。

アルゴリズム

次のアルゴリズムを提案できます。

  1. レクサーを使用してソースコードをトークン化します。 すべての正しいコードを保持したいので、トークンをスキップしたり非表示にしたりしないでください。削除される可能性のあるパーツ、またはデッドコードを判別するために使用されるパーツに対して、必ず個別のトークンを定義してください。他のすべての文字は、単一のトークンタイプで収集できます。ここでは、述語で補助ツールの出力を使用して、生成されるトークンの数を減らすことができます。antlrのトークン化(他のトークン化と同様)は正規言語で表現されているため、このステップですべてのデッドコードを削除することはできません。

  2. パーサーを使用してASTを構築します。 ここでは、文脈自由言語のすべての機能を適用できます。パーサーのルールでデッドコードセクションを定義し、構築中のASTから削除します。

  3. ASTをソースコードに変換します。toStringここでいくつかのツリーパーサーを使用できますが、パーサーによって返されるツリータイプの観察および同様のメソッドを見つけることができるより簡単な方法があると思います。

于 2011-05-20T01:41:25.797 に答える