<< 目次を表示 >> ページ位置: ソースコードの生成と読み込み > コード分析 > コード分析 フレームワーク > コード分析のクエリ > コード分析のクエリ言語 (mFQL) > 抽出 |
抽出機能は、離散的・垂直的なインデックスからセットを抽出するために利用します。インデックスは3種類が利用可能です。それぞれ、抽出のための関数が異なります。パラメータとして渡す文字列は、大文字小文字を区別する場合があります。具体的には、データベースの生成元となる対象のソースコードが大文字小文字を区別するかどうかに依存します。C++など大文字小文字を区別する言語の場合には、パラメータとして渡す文字列も大文字小文字を区別します。
type |
type(value: string)
ノード名でセットを抽出します。元のソースを解析する際に利用する文法で定義されたノードが抽出名となります。次の例では、ノード名が"OPERATION"のすべてのノードを返します。
type("OPERATION") |
with |
with(value: string)
属性名でセットを抽出します。指定された名前の属性がすべて返されます。もし、1つのノードが同名の属性を複数持っている場合には、そのうちの1つが返されます。次の例では、属性名が"NAMEPART"のノードを返します。
with("NAMEPART") |
find |
find([+] value: string [+ value: string] [+])
属性の値を元にセットを抽出します。ノードが持つすべての属性が抽出対象です。ワイルドカードを利用して指定できます。
1つの値のみが渡された場合には、その値の属性を持つノードが返されます。もし、そのノード型の属性を持つ場合には、その属性は含まれません。次の例では、属性の値が 'i" の属性のみを返します。
find("i")
+記号を利用し、複数の値を指定できます。複数の値が指定された場合には、その値に一致し、かつ指定された順序も一致した属性のノードが返されます。前後の関係ない属性は返されません。次の例は、3つの属性が、値“com”, “.” および “sun” を持ち、またこの順番で並んでいることが抽出条件となります。
find("com" + "." + "sun")
ワイルドカードは、値の指定の前か後に利用できます。前に指定した場合には、最初に一致する属性の前に任意の数の属性が存在する場合には、抽出対象となります。後ろに指定した場合も同様です。どちらの場合でも、ワイルドカードの指定がない場合でも一致する場合には、ワイルドカードの指定がある場合でも一致と見なします。つまり、ワイルドカードは、属性がゼロの場合も一致と見なします。
次の例では、最後の2つの属性が “.” と “sun”になるノードのセットを抽出します。最初の+マークがワイルドカードを示します。0個以上の属性がこの前にあることが条件ですが、その属性の値は問いません。
find(+ “.” + “sun”)
次の例は末尾にワイルドカードがあります。 “com”, “.”, “sun”の順序で3つの属性があるものが抽出対象となります。この3つの属性の後ろに属性がある場合も、ない場合も対象となります。
find(“com” + “.” + “sun” +)
ワイルドカードは、前後の両方を利用できます。次の例では、該当の3つの属性の値の前後の属性の内容やその有無は問いません。
find(+ “com” + “.” + “sun” +) |