1

Vera ++または静的アナライザーに関する知識がある場合は、スルーしてください。

複雑な C++ ルール検証マシンを静的アナライザーとして実装するにはどうすればよいですか? 基本クラスの仮想関数、クラス、構造体などのユーザー定義変数の識別などの複雑なルールを実装したい.グローバル、ローカル、静的などの変数スコープ.Vera++をよく理解していた.トークンの解析のみを行っている.言語のコンテキストはスクリプトを介して実装する必要があります (言語が C++ の場合、実装されたコンテキストは複雑すぎる可能性があります)。a *b; を区別するためです。(これは、クラス型 a のポインター b である可能性があります) または a *b;(変数内の 2 つの単純な乗算である可能性があります);

複雑なルールの実装には、スクリプトが言語のコンテキストを理解できるように、ステート マシンのようなコンパイラが必要になるかもしれないとさえ感じています。

私の質問はただ尋ねることです:

  1. Static Analyzer Rules の実装に関して、私の理解は正しいですか。

  2. このタスクを達成するためにどのように進めればよいか、少し教えてください。

  3. これらのタスクは、tcl の REGEXP によって簡素化できますか。

  4. Solid C++ Code Analyzer を適切に実装するために提案できる特定の設計アプローチはありますか?

4

1 に答える 1

3

代わりに本格的な C++ パーサーを使用することをお勧めします。

Clangは C++ を完全に理解する一連のライブラリです。これは、分析に使用できるライブラリがコンパイラによって使用されるものであるためです (ドッグ フードについて話します)。いくつかの「レイヤー」にアクセスできます: 抽象構文ツリー、制御フロー グラフ。また、パスを実装できる静的アナライザー フレームワークが既に用意されています。

最後に、おそらく最も興味深いのは、C++ または C から対話することができ、C インターフェイスの上に Python バインディング (特に不完全ではありますが) さえあることです。

正直なところ、C++ 文法の恐るべき複雑さを考えると、マゾヒストが今日の真のセマンティック パーサー以外のものを使用するには、マゾヒストが必要です。

その他のパーサー ( Ira Baxter提供) には次のものがあります。

  • エルサ(オープンソース)
  • DMS(コマーシャル)
  • EDG (コンパイラの実装に使用される商用の C++ フロントエンド)
于 2012-11-21T09:07:27.680 に答える