メインコンテンツ

前処理済みファイルに適用するコマンド/スクリプト (-post-preprocessing-command)

解析の前処理段階の後で、ソース ファイルに対して実行するコマンドまたはスクリプトを指定

説明

前処理の後で、各ソース ファイルに対して実行するコマンドまたはスクリプトを指定します。

オプションの設定

以下のいずれかの方法を使用してオプションを設定します。

  • Polyspace® ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成で [環境設定] ノードを選択してから、このオプションのコマンドまたはスクリプトを入力します。

  • Polyspace Platform ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成の [静的解析] タブで [環境設定] ノードを選択してから、このオプションのコマンドまたはスクリプトを入力します。

  • コマンド ラインとオプション ファイル: オプション -post-preprocessing-command を使用します。コマンド ライン情報を参照してください。

このオプションを使用する理由

コンパイル エラーや不正確な解析を避けるため、オリジナルのソース ファイルには触れないで、前処理後のファイルでスクリプトを実行することができます。たとえば、Polyspace でコンパイラ固有のキーワードが認識されないとします。そのキーワードが解析に関連しないことが明らかな場合、そのキーワードのすべてのインスタンスを削除する Perl スクリプトを実行できます。このオプションを使用すると、本ソフトウェアは前処理後のコードからそのキーワードを削除しますが、オリジナルのコードには触れません。

既存の解析オプションが要件を満たさない場合にのみスクリプトを使用します。次に例を示します。

  • あるキーワードを別のキーワードに直接置き換える場合は、オプション [プリプロセッサ定義] (-D) を使用します。

    ただし、このオプションでは、regex を含む検索や置き換えは許可されません。regex の場合は、スクリプトを使用します。

  • ライブラリ関数を標準ライブラリ関数にマッピングする場合は、オプション -code-behavior-specifications を使用します。

    ただし、このオプションは標準ライブラリ関数のサブセットのみへのマッピングをサポートします。サポートされていない関数へのマッピングには、スクリプトを使用します。

サポートされていない構成要素の削除や置き換えについて確信がない場合は、このオプションを使用しないでください。MathWorks® サポートにお問い合わせください。

設定

既定値なし

コマンドまたはスクリプトへの絶対パスを入力するか、 をクリックしてコマンドまたはスクリプトの場所に移動します。このスクリプトは検証前に実行されます。

ヒント

  • このスクリプトは、前処理からの標準出力を処理し、その標準出力に従って結果を生成するよう設計されていなければなりません。

  • スクリプトでは、前処理後のファイルの行数を保持しなければなりません。言い換えれば、ファイルに行全体を追加したり、ファイルから行全体を削除してはなりません。

    行を追加または削除すると、Polyspace ユーザー インターフェイスにおけるチェックおよびマクロの場所で一部の動作が予測不能になる可能性があります。

  • Perl スクリプトでは、Windows® の場合、Perl 実行可能ファイルへの絶対パスに続いてスクリプトへの絶対パスを指定します。

    以下に例を示します。

    • far キーワードのすべてのインスタンスを置き換える Perl コマンドを指定するには、「polyspaceroot\sys\perl\win32\bin\perl.exe -p -e "s/far//g"」と入力します。

    • キーワードのすべてのインスタンスを置き換える Perl スクリプト replace_keyword.pl を指定するには、「polyspaceroot\sys\perl\win32\bin\perl.exe absolute_path\replace_keyword.pl」と入力します。

    ここで、polyspaceroot は現在の Polyspace インストールの場所 (C:\Program Files\Polyspace\R2019a\ など) であり、absolute_path は Perl スクリプトの場所です。パスにスペースが含まれる場合、引用符を使用して絶対パス名を囲みます。

  • この Perl スクリプトをテンプレートとして使用します。スクリプトは far キーワードのすべてのインスタンスを削除します。

    #!/usr/bin/perl
    
    binmode STDOUT;
    
    # Process every line from STDIN until EOF
    while ($line = <STDIN>) 
    {
      if ($line =~ /^#/) { # lines starting with # should not be modified
        print $line;
        next;
      }
      
      # Remove far keyword
      $line =~ s/far//g;
      
      # Print the current processed line to STDOUT
      print $line;
    }

    代入は Perl regex を使用して実行できます。たとえば、以下の式を使用できます。

    意味
    .改行以外の任意の単一の文字と一致
    [a-z0-9] a-z のセットにある任意の単一の文字か 0-9 のセットにある任意の単一の数字と一致
    [^a-e]a-e のセットにない任意の単一の文字と一致
    \d任意の単一の数字と一致
    \w任意の単一の英数字か _ と一致
    x?x の 0 回または 1 回の出現と一致
    x*x の 0 回以上の出現と一致
    x+x の 1 回以上の出現と一致

    regex の完全なリストは、Perl のドキュメンテーションを参照してください。

  • このコマンドを使用して指定するスクリプトは、解析の前処理段階の後でソース ファイルに対して実行されます。前処理段階で報告されたコーディング ルール違反や Bug Finder 欠陥は、このスクリプトの影響を受けません。

  • 解析の前処理段階の前にプリプロセッサ命令を置き換える必要がある場合は、オプション -regex-replace-rgx -regex-replace-fmt を使用します。

コマンド ライン情報

パラメーター: -post-preprocessing-command
値: 実行可能ファイルまたは引用符で囲まれたスクリプトへのパス
既定値なし
Linux® での例 (Bug Finder): polyspace-bug-finder -sources file_name -post-preprocessing-command `pwd`/replace_keyword.pl
Linux での例 (Code Prover): polyspace-code-prover -sources file_name -post-preprocessing-command `pwd`/replace_keyword.pl
Linux での例 (Bug Finder Server): polyspace-bug-finder-server -sources file_name -post-preprocessing-command `pwd`/replace_keyword.pl
Linux での例 (Code Prover Server): polyspace-code-prover-server -sources file_name -post-preprocessing-command `pwd`/replace_keyword.pl
Windows での例: polyspace-bug-finder -sources file_name -post-preprocessing-command "C:\Program Files\MATLAB\R2015b\sys\perl\win32\bin\perl.exe" "C:\My_Scripts\replace_keyword.pl"

ファイルの絶対パス、または polyspace-bug-finder コマンドまたは polyspace-code-prover コマンドを実行する場所からの相対パスを指定できます。Perl スクリプトを実行する場合、Windows では Perl 実行可能ファイルの絶対パスを入力します。