4

あまり一般的ではないプログラミング言語 (C のような構文) で記述された一連のスクリプトで静的コード分析を行いたいと考えています。よくある問題は次のとおりです。

  • 定義されていない/宣言されていないシンボルの使用
  • 関数呼び出し時の引数の数または型が間違っている

言語インタープリター/コンパイラー自体は、これらの問題に対する支援を提供しません。

新しいプログラミング言語に簡単に適応できるほど柔軟な lint のようなツールはありますか? または、誰かが別の良い出発点を知っていますか? (レックス/ヤク???)

前もって感謝します

4

4 に答える 4

2

万能ツールが見つかるとは思えません。

静的分析の多くは、語彙や文法の準拠以上のものに依存しています。

優れた静的アナライザーは、言語とその実装に関する特別な文脈知識を持っています。また、状態と複数の実行パスを追跡するシミュレーターが含まれる場合もあります。さらに、特定のライブラリや呼び出しだけでなく、パターンや慣行も認識している場合があります。

たとえば、C では、このコードif ( x = 3 ) { /*Do something*/ }は完全に合法ですが、プログラマーが意図した可能性があります==。または、printf("%s", longVal);任意の値をスタックに押し込むことができますが、その特定の呼び出しには、渡された初期値に基づいて他の期待がある場合があります。

要するに、一般的な lint アプリケーションが知っておくべきことは非常に多く、言語とライブラリが移動するターゲットであることは言うまでもありません。そのような野獣が存在するとしたら、複雑すぎたり、実用的でなかったりすることになります。言語固有の仕事をよりよく行う安価なツールよりもアプリケーション。

于 2010-10-04T17:31:40.997 に答える
2

市販のDMS Software Reengineering Toolkitを使用すると、このような整合性チェックを記述でき、多くの言語に適応できる柔軟性があります。

于 2010-10-04T23:59:51.833 に答える
0

カスタマイズ可能なコードを提供するVera Community Editionまたは Google のcpplintを検討してください。

于 2011-03-01T02:28:39.493 に答える
0

PHP_CodeSniffer で数時間遊んだ後、ここの別のスレッドで提案された他の人もいます... 私はPHPlintが私に合う方法であると結論付けました。他の理由がなければ、間違った数の引数で関数を呼び出すコードを正しく検出できます。

于 2012-11-08T14:20:15.017 に答える