問題タブ [static-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
compiler-construction - セマンティック分析のための言語?
背景:-プログラミング言語の有効なレキシコンと構文を表現するための正式な言語があります-そのような表現(正規表現やコンテキストフリーの文法など)は、一部のツール(LEXやYACCなど)を使用して、一部のプログラミング言語のレキシコン/構文アナライザーに自動的にコンパイルできます
質問:-プログラミング言語のセマンティクスを定義するためのそのような形式言語はありますか?-これらの形式言語に基づいてセマンティックアナライザーのコードの生成を自動化するコンパイラーはありますか?-ソースコードのセマンティック分析に関して読むべきリソースはありますか?
注:-私の質問は非現実的だと思うかもしれませんが、大丈夫です…私はコンパイラの初心者ですか?-セマンティック分析とは、コードの最適化と生成の次のステップのためにソースコードから必要な情報を収集することを意味します...これにはタイプ/境界チェックが含まれる必要があります...など
事前に感謝の気持ちを伝えたいと思います
perl - Perl でコピー/貼り付け (複製、クローン) コードを見つけるにはどうすればよいですか?
しばらくインターネットを検索しましたが、一連の Perl ファイル (モジュールまたはスクリプト) を分析し、重複または複製またはコピー/貼り付けたコード。
今は良くなりましたが、以前はコードのセクションをあちこちにコピー アンド ペーストしていました。それをクリーンアップして古いコードの重複を修正したいのですが、ツールの助けが少しあればありがたいので、細かい櫛で古いコードをすべて調べる必要はありません。さらに、この種の違反を手動で認識すると、エラーが発生しやすくなります。
compiler-construction - ループ内のコンテナへの同じオブジェクトインスタンスの追加の自動コンパイラ検出
これはばかげた間違いです:
もちろん、ループ内で新しいFooをインスタンス化する必要があります。
コンパイラはコンパイル時にこの種の間違いを検出できますか?
素朴な目には、この動作を検出できるはずです(ループ内の同じオブジェクトのインスタンスでリストを埋める)。次に、「同じインスタンスでコンテナを複数回満たしています。」などの警告を発行する必要があります。
それで、私はどれほど素朴ですか?このようなものが存在する言語を知っていますか?
c - C での仮定義とリンク
2 つのファイルで構成される C プログラムを考えてみましょう。
f1.c:
f2.c:
C99 標準のパラグラフ 6.9.2 を読んだところでは、このプログラムは拒否されるべきだということです。6.9.2 の私の解釈では、 variablex
は で暫定的に定義されていますが、この暫定的な定義は翻訳単位の最後で実際の定義になるため、(私の意見では)定義が含まf1.c
れているかのように動作するはずです。f1.c
int x=0;
私が試すことができたすべてのコンパイラ(そして重要なことに、リンカー)で、これは起こりません。私が試したすべてのコンパイル プラットフォームは上記の 2 つのファイルをリンクしておりx
、両方のファイルで の値は 2 です。
これが偶然に起こったのか、それとも標準が要求するものに加えて提供する「簡単な」機能として起こったのかは疑わしい. 考えてみれば、明示的にゼロに初期化されたものとは対照的に、イニシャライザを持たないグローバル変数に対するリンカーでの特別なサポートがあることを意味します。いずれにせよ、Fortran をコンパイルするにはリンカ機能が必要かもしれないと誰かが私に言いました。それは合理的な説明でしょう。
これについて何か考えはありますか?標準の他の解釈?f1.c
ファイルとf2.c
リンクを拒否するプラットフォームの名前は?
注: 質問は静的分析のコンテキストで発生するため、これは重要です。2 つのファイルが何らかのプラットフォームでリンクされることを拒否する可能性がある場合、アナライザーはエラーを表示する必要がありますが、すべてのコンパイル プラットフォームがそれを受け入れる場合、それについて警告する理由はありません。
java - Findbugs + JSR305: デフォルトの動作を指定する可能性は?
注: 私が話しているこれらの注釈は、JSR305 で指定されています。
私は最新の Findbugs (1.3.9) を使用しており、@ Nonnull で注釈が付けられたフィールドが null に割り当てられている場合、エラーを正しく検出します。
しかし、私のプロジェクトでは、「null 以外のロジック」がデフォルトのケースです。null は 5% のケースでのみ明示的に許可されていると言え ます。
そのため、フィールドの 95% に @Nonnull のアノテーションを付けるのは非常に不便です。これらの 5% のフィールドに @Nullable で注釈を付けたいと思います。
パッケージ全体に @Nonnull のアノテーションを付けようとしましたが、何も変わりません。
では、どういうわけかデフォルトのロジックを指定することは可能ですか?
regex - 正規表現の静的分析を提供するライブラリはありますか?
具体的には、2 つ (またはそれ以上) の正規表現が与えられたときに、両方が一致する入力が存在するかどうかを判断できるライブラリはありますか? Java または .NET 経由で簡単にアクセスできる場合はボーナス ポイントですが、コマンドラインでも問題ありません。
アスカーのログ、補足:
このアルゴリズムに供給される正規表現はかなり単純です。先読みのあるものもいくつかあると思いますが、それらはすべて、最小長と最大長が固定されたリテラルまたは文字クラスの非常に単純な組み合わせです。
vba - オブジェクトのクリア/アレイの割り当て解除は、VB6 / VBAで本当に必要ですか(長所/短所?)
静的コード分析(特にAivostoのProject Analyzer)を使用して学んだVBについて学んだことの多く。そして、それがチェックすることの1つは、すべてのオブジェクトと配列をクリアしたかどうかです。PAがそう言ったので、私はこれを盲目的に行っていました。しかし、VBがリソースを解放する方法についてもう少し知ったので、これらのことは自動的に行われるはずだと私には思えます。これはVB6より前のレガシー機能ですか、それともオブジェクトを明示的にゼロに戻し、アレイで消去を使用する必要がある理由がありますか?
database-design - データベース用の便利な静的分析ツールはありますか?
lint のような静的分析ツールが疑わしいコード行にフラグを立てるのと同様に、疑わしいフィールド、関係、および構成についてデータベースの構成とスキーマを調べるためのツールはありますか?
必ずしも正規化を求めているわけではありませんが、Hard AI や Halting Problem を解決しなくても検出できるばかげたものは確かにあります。
java - PMD-パブリックメソッドが多すぎるかどうかを確認します(ただし、コンストラクターとゲッター/セッターは除外します)
クラスにパブリックメソッドが多すぎないことを確認するためにPMDチェックを追加したいのですが、コンストラクターとゲッター/セッターをチェックに含めたくありません。
ExcessivePublicCountチェックには、コンストラクター、ゲッター/セッター、およびパブリック変数が含まれていますが、カスタマイズする方法がわかりません。
TooManyMethodsチェックは、ゲッター/セッターを除外しますが、他のすべて(プライベートメソッドを含む)を含みます。チェックのXPathコードは次のとおりです。
誰かが私が望むものを達成するためにこれを変更するのを手伝ってくれるか、PMDでこれを行う別の方法を提案できますか?
c - わかりやすくするために、戻り値の型に役に立たない型修飾子を使用する必要がありますか?
私たちの静的分析ツールは、次のようなヘッダー ファイルにプロトタイプがある場合、「戻り値の型の型修飾子が役に立たない」と文句を言います。
このように定義したのは、関数が決して変わらない定数を返しているためです。API をconst
配置した方が明確に見えると考えたからです。
C標準では、明示的に初期化されていない場合、すべてのグローバルがゼロに初期化されるとすでに述べられていますが、これは明確にするためにグローバル変数を明示的にゼロに初期化することに似ているように感じます。結局のところ、それは本当に問題ではありません。(しかし、静的分析ツールはそれについて不平を言うことはありません。)
私の質問は、これが問題を引き起こす可能性がある理由はありますか? ツールによって生成されたエラーを無視する必要がありますか?それとも、明確で一貫性のない API の可能性を犠牲にしてツールをなだめる必要がありますか? const char*
(ツールが問題を抱えていない他の定数を返します。)