抽出

<< 目次を表示 >>

ページ位置:  ソースコードの生成と読み込み > コード分析 > コード分析 フレームワーク > コード分析のクエリ > コード分析のクエリ言語 (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” +)