EN JP CN

構文

構文

各 KAST 式は、ダブルスラッシュ (//) で始まり、スラッシュ記号で区切られたステップのシーケンスが続きます。各ステップは、特定の AST ノードに適用するサブパターンを指定します。

タイプ名の代わりに '*' を使用することができます。

チェッカーと一致すると、記述された順序の最後のノードと一致したノードでメッセージが報告されます。

たとえば、次のようになります。

//IfStat

この KAST 式には タイプ IfStat の任意の AST ノードと一致する 1 つのステップ IfStat が含まれます。完全な KAST 式は、「(else ブロックなしの) すべての if ステートメントを検索する」と解釈できます。

//IfStat/ThenStat::ExprStat

上述の KAST 式は、2 つのステップ IfStat とThenStat::ExprStat に分解することができます。2 番目のステップは子の名前 (ThenStat) および子ノードのタイプ (ExprStat) を指定します。上述の KAST 式は、「'then' ブランチとして expression ステートメントを持ち、'else' ブランチを持っていないすべての 'if' ステートメントを検索する」と解釈できます。'if-else' ステートメントは、異なる AST タイプの IfElseStat に対応することに注意してください。

KAST 式に複数の式が含まれる場合、後続の各ステップでは子の名前を指定する必要があります。子の名前の指定が必要なのは、単一の AST ノードに同じタイプの複数の子がある場合があるためです。この例としては、両方のブランチが複合ステートメントである 'if-else' ステートメントがあります。その場合、子ノードのタイプを使用してパスを一意的に識別することができません。子の名前は一意であるため、トラバーサルの方向を明白に指定します。

不在、別個、またはリストの子を表すためには、次のように 'Null' キーワードを使用します。

//ReturnStat/Expr::Null

この KAST 式には、IfStmt と Else::Null の 2 つのステップがあります。ReturnStat and Expr::Null.ReturnStat and Expr::Null.この式は、「式なしのすべての return ステートメントを検索する」として解釈できます。

条件

KAST 式内のステップは、単なるノードのタイプの制限にとどまらず、より複雑になる場合があります。タイプの名前の後には、現在の AST ノードに対してチェックする必要のある条件である一連の述語のシーケンスが続く場合があります。条件は、角括弧内に入れ、ブール式または KAST 部分式のいずれかです。

//ExprBinary[@Op=OP_PLUS]

この KAST 式は「演算が + であるすべてのバイナリ式を検索する」と解釈されます。

この式の唯一のステップでは、以下が指定されます。

  • 予期されるノードのタイプ (BinaryExpr)
  • 条件 ([@Op=OP_PLUS])。

アット記号 (@) は、現在のノードの属性を示すために使用されます。

//ExprCall/Expr::ExprName[Name::Name[@Name='nice_method']]

この式には、メソッド 'nice_method' のすべての呼び出しを検索するための 4 つのステップがあります。2 番目のステップには、追加の 1 つのステップを条件として持つ入れ子の KAST 式が含まれます。

条件も参照してください。