カスタム注釈形式の定義
この例では、XML ファイルを作成および編集して注釈形式を定義し、それを Polyspace® 注釈構文にマッピングする方法を示します。XML ファイルを作成して編集したら、オプション -xml-annotations-description
を使用して、このファイルを Polyspace に渡します。
複数のカスタム注釈形式を定義するには、複数のカスタム注釈構文の定義を参照してください。
はじめに、次のコードをテキスト エディターにコピーして、annotations_description.xml
という名前でマシンに保存します。
<?xml version="1.0" encoding="UTF-8"?>
<Annotations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="annotations_xml_schema.xsd"
Group="example XML">
<Expressions Search_For_Keywords="myKeyword"
Separator_Result_Name="," >
<!-- Define annotation format in this
section by adding <Expression/> elements -->
<Expression Mode="SAME_LINE"
Regex="myKeyword\s+(\w+(\s*,\s*\w+)*)"
Rule_Identifier_Position="1"
/>
<Expression Mode="GOTO_INCREMENT"
Regex="myKeyword\s+(\+\d+\s)(\w+(\s*,\s*\w+)*)"
Increment_Position="1"
Rule_Identifier_Position="2"
/>
<Expression Mode="BEGIN"
Regex="myKeyword\s*(\w+(\s*,\s*\w+)*)\s*Block_on"
Rule_Identifier_Position="1"
Case_Insensitive="true"
/>
<Expression Mode="END"
Regex="myKeyword\s*(\w+(\s*,\s*\w+)*)\s*Block_off"
Rule_Identifier_Position="1"
/>
<Expression Mode="END_ALL"
Regex="myKeyword\sBlock_off_all"
/>
<Expression Mode="SAME_LINE"
Regex="myKeywords\s+(\w+(\s*,\s*\w+)*)(\s*\[(\w+\s*)*([:]\s*(\w+\s*)+)*\])*(\s*-*\s*)*([^-]*)(\s*-*)*"
Rule_Identifier_Position="1"
Status_Position="4"
Severity_Position="6"
Comment_Position="8"
/>
<!-- SAME_LINE example with more complex regular expression.
Matches the following annotations:
//myKeywords 50 [my_status:my_severity] -Additional comment-
//myKeywords 50 [my_status]
//myKeywords 50 [:my_severity]
//myKeywords 50 -Additional comment-
-->
</Expressions>
<Mapping>
<!-- Map your annotation syntax to the Polyspace annotation
syntax by adding <Result_Name_Mapping /> elements in this section -->
<Result_Name_Mapping Rule_Identifier="100" Family="RTE" Result_Name="ZDV"/>
<Result_Name_Mapping Rule_Identifier="50" Family="MISRA-C3" Result_Name="8.4"/>
<Result_Name_Mapping Rule_Identifier="51" Family="MISRA-C3" Result_Name="8.7"/>
<Result_Name_Mapping Rule_Identifier="ALL_MISRA" Family="MISRA-C3" Result_Name="*"/>
</Mapping>
</Annotations>
XML ファイルは次の 2 つの部分で構成されています。
<Expressions>...</Expressions>
。ここで、注釈構文の形式を定義します。<Mapping>...</Mapping>
。ここで、構文を Polyspace 注釈構文にマッピングします。
このファイルを編集すると、オプション -xml-annotations-description
を呼び出す場合に、Polyspace でカスタム コード注釈を解釈できるようになります。
注釈構文形式の定義
Polyspace の注釈構文を定義するには、構文は regex で表すことのできるパターンに従わなければなりません。正規表現を参照してください。注釈構文のパターンにキーワードを含めて、注釈構文を識別しやすくすることをお勧めします。この例では、キーワードは myKeyword
です。属性 Search_For_Keywords
をこのキーワードに設定します。
注釈のパターンを把握したら、<Expression/>
要素を追加して、少なくとも Mode
、Regex
、および Rule_Identifier_Position
属性を指定することで XML で注釈を定義できます。たとえば、annotations_description.xml
の最初の <Expression/>
要素は、次の属性を使用して注釈を定義しています。
Mode="SAME_LINE"
.この注釈は同じ行のコードに適用されます。Regex="myKeyword\s+(\w+(\s*,\s*\w+)*)"
.Polyspace では正規表現を使用して、myKeyword
で始まり、スペース\s+
が続く文字列を検索します。Polyspace ではその後、英数字のルール識別子\w+
およびオプションとして追加のコンマ区切りのルール識別子(\s*,\s*\w+)*
を含むキャプチャ対象グループ(\w+(\s*,\s*\w+)*)
を検索します。Rule_Identifier_Position="1"
.この属性の整数値は、正規表現内の関連するキャプチャ対象グループに先行する左かっこの数に対応します。myKeyword\s+(\w+(\s*,\s*\w+)*)
の場合、ルール識別子のキャプチャ対象グループ(\w+(\s*,\s*\w+)*)
に 1 つの左かっこが先行します。(\s*,\s*\w+)
でキャプチャされるルール識別子を照合する場合は、このキャプチャ対象グループに 2 つの左かっこが先行するため、Rule_Identifier_Position="2"
に設定します。
属性と値のリストを次の表に示します。例列は、annotations_description.xml
で定義されている形式を表します。
属性 | 使用 | 値 | 例 |
---|---|---|---|
Mode | 必要 | SAME_LINE | 注釈と同じ行にのみ適用されます。
|
GOTO_INCREMENT | 注釈と同じ行とそれに続く n 行に適用されます。
前記の注釈は行 3 ~ 6 にのみ適用されます。 | ||
BEGIN | 同じ行と属性
| ||
END | 属性
ルール識別子 50 のみが無効になります。ルール識別子 51 は引き続き適用されます。 | ||
END_ALL | 属性
ルール識別子 50 と 51 が無効になります。 | ||
Regex | 必要 | regex 検索文字列 | 正規表現を参照してください。
|
Rule_Identifier_Position | 必要 (Mode="END_ALL" を設定している場合を除く) | 整数 | この属性の整数値は、関連する検索式の前の正規表現に含まれる左かっこの数に対応します。
ルール識別子 |
Increment_Position | 必要 (Mode="GOTO_INCREMENT" を設定している場合のみ) | 整数 | この属性の整数値は、関連する検索式の前の正規表現に含まれる左かっこの数に対応します。
インクリメント |
Status_Position | オプション | 整数 | Increment_Position の例を参照してください。この属性を使用する場合、注釈のエントリは、ユーザー インターフェイスの [結果のリスト] ペインの [ステータス] 列に表示されます。 |
Severity_Position | オプション | 整数 | Increment_Position の例を参照してください。この属性を使用する場合、注釈のエントリは、ユーザー インターフェイスの [結果のリスト] ペインの [重大度] 列に表示されます。 |
Comment_Position | オプション | 整数 | Increment_Position の例を参照してください。この属性を使用する場合、注釈のエントリは、ユーザー インターフェイスの [結果のリスト] ペインの [コメント] 列に表示されます。コメントは文字列 Justified by annotation in source: に追加されます。 |
Case_Insensitive | オプション | true または false | この属性を "true" に設定すると、regex では大文字と小文字が区別されません。設定しない場合、大文字と小文字が区別されます。表現の中でこの属性を宣言しない場合、regex では大文字と小文字が区別されます。
|
Polyspace 注釈構文への注釈のマッピング
注釈形式を定義したら、使用しているルール識別子を、対応する Polyspace 注釈構文にマッピングできます。このマッピングは、<Result_Name_Mapping/>
要素を追加して、属性 Rule_Identifier
、Family
、および Result_Name
を指定して行うことができます。たとえば、ルール識別子 50 が MISRA C™:2012 Rule 8.4 に対応する場合、次の要素を使用して Polyspace 構文 MISRA-C3:8.4
にマッピングします。
<Result_Name_Mapping Rule_Identifier="50" Family="MISRA-C3" Result_Name="8.4"/>
属性と値のリストを次の表に示します。例列は、annotations_description.xml
で定義されている形式を表します。
属性 | 使用 | 値 | 例 |
---|---|---|---|
Rule_Identifier | 必要 | ユーザー定義。各値は一意でなければなりません。 | annotations_description.xml のマッピング セクションを参照してください。 |
Family | 必要 | Polyspace の結果ファミリに対応します。指定可能な値の一覧は、指定可能な値を参照してください。 | annotations_description.xml のマッピング セクションを参照してください。 |
Result_Name | 必要 | Polyspace の結果名に対応します。指定可能な値の一覧は、指定可能な値を参照してください。 | annotations_description.xml のマッピング セクションを参照してください。 |
複数のカスタム注釈構文の定義
複数の注釈構文を定義するには、XML ファイルで Search_For_Keywords
属性の各構文と関連付けられているキーワードのコンマ区切りリストを指定します。
たとえば、MISRA C:2012 ルールの違反に注釈を付けるために以下のパターンに従うカスタム注釈を使用する場合を考えます。
int func(int p) //customSyntax M123 $ customSyntax M124
{
int i;
int j = 1;
i = 1024 / (j - p);
return i;
}
int func2(void){ //otherCustomSyntax 50
int x=func(2);
return x;
}
<?xml version="1.0" encoding="UTF-8"?>
<Annotations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="annotations_xml_schema.xsd"
Group="multipleCustomSyntax">
<!-- Enter comma separated list of keywords -->
<Expressions Search_For_Keywords="customSyntax,otherCustomSyntax"
Separator_Result_Name="$" >
<!-- This section defines the annotation syntax format -->
<Expression Mode="SAME_LINE"
Regex="customSyntax\s(\w+(\s*,\s*\w+)*)"
Rule_Identifier_Position="1"
/>
<Expression Mode="SAME_LINE"
Regex="otherCustomSyntax\s(\w+(\s*,\s*\w+)*)"
Rule_Identifier_Position="1"
/>
</Expressions>
<!-- This section maps the user annotation to the Polyspace
annotation syntax -->
<Mapping>
<!-- Mapping for customSyntax rules -->
<Result_Name_Mapping Rule_Identifier="M123" Family="MISRA-C3" Result_Name="8.7"/>
<Result_Name_Mapping Rule_Identifier="M124" Family="MISRA-C3" Result_Name="D4.6"/>
<!-- Mapping for otherCustomSyntax rules -->
<Result_Name_Mapping Rule_Identifier="50" Family="MISRA-C3" Result_Name="8.4"/>
</Mapping>
</Annotations>
M123
を otherCustomSyntax
で再利用することはできません。