実施の形態1.
図1は本発明の実施の形態1の構成を示すブロック図である。図1を参照すると、本実施の形態1は、キーボード等の入力装置11と、プログラム制御に基づいて動作するデータ処理装置12と、情報を記憶する記憶装置140と、ディスプレイ装置や印刷装置等の出力装置13と、を含む。
記憶装置140は、繰り返し正規表現リスト記憶部141と、1-char NFA記憶部142と、1-char NFA記述行列記憶部143と、NFA記述行列演算情報記憶部144と、multi-char NFA記述行列記憶部145と、multi-char NFA記憶部146と、を含む。
データ処理装置12は、1-char NFA生成手段121と、1-char NFA記述行列生成手段122と、multi-char NFA記述行列生成手段123と、multi-char NFA生成手段124と、HDL変換手段125と、を含む。尚、本実施の形態1では、固定文字数の遷移条件から成る固定文字数単位の有限オートマトンが、1文字単位の有限オートマトン(1-char NFA)である場合を例に説明する。このため、固定文字数単位有限オートマトン生成手段が、1-char NFA生成手段121に対応する。また、固定文字数単位行列形式表現生成手段が、1-char NFA記述行列生成手段122に対応する。
1-char NFA生成手段121は、入力装置11から1つ以上の正規表現を読み込む。1-char NFA生成手段121は、読み込んだ正規表現をε遷移の無い1-char NFAに変換する。1-char NFA生成手段121は、変換した1-char NFAを1-char NFA記憶部142に記憶する。1-char NFA記憶部142への記憶後、1-char NFA生成手段121は、次の正規表現をNFAへ変換する処理を開始する。
また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段121は、繰り返し正規表現リストを作成する。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。1-char NFA生成手段121は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
さらに、入力装置11から読み込んだ全ての正規表現を1-char NFAへと変換する処理を完了する際には、1-char NFA生成手段121は、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段122に通知する。
1-char NFA記述行列生成手段122は、非特許文献3に開示される手法に基づいて、1-char NFA記憶部142に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char
NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。尚、以下では、1-char NFA記述行列記憶部143に記憶した1-char NFA記述行列を、オリジナル版1-char NFA記述行列と称する。
また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部143に記憶する際に、1-char NFA生成手段121から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段122は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段123に通知する。
multi-char NFA記述行列生成手段123は、入力装置11から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字(列)の長さであり、以下の説明においては動作文字数をMを使用して表す。
multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する。multi-char NFA記述行列生成手段123は、作成した行列変換情報リストをNFA記述行列演算情報記憶部144に記憶する。尚、multi-char NFA記述行列生成手段123は、作成した行列変換情報リストと、後述する縮小版NFA記述行列(縮小版1-char NFA記述行列と、縮小版multi-char NFA記述行列)とをNFA記述行列演算情報記憶部144に記憶する。
multi-char NFA記述行列生成手段123は、1-char NFA記述行列記憶部143に記憶した1-char NFA記述行列から、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、1-char NFA記述行列の行列サイズの縮小を行う。multi-char NFA記述行列生成手段123は、行列サイズを縮小した1-char NFA記述行列をNFA記述行列演算情報記憶部144に記憶する。以下では、行列サイズを縮小したNFA記述行列を、「縮小版NFA記述行列」と称する。また、行列サイズを縮小する前のサイズのNFA記述行列を、「オリジナル版NFA記述行列」と称する。
multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した縮小版1-char NFA記述行列を用いて、動作文字数がMの縮小版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段123は、生成した縮小版multi-char NFA記述行列をNFA記述行列演算情報記憶部144に記憶する。そして、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部144に記憶した縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列を、multi-char NFA記述行列記憶部145に記憶する。
また、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部145に記憶する際に、1-char NFA記述行列生成手段122から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA記述行列生成手段123は、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段124に通知する。
multi-char NFA生成手段124は、非特許文献3に開示される手法に基づいて、multi-char NFA記述行列記憶部145に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶する。
また、multi-char NFAをmulti-char NFA記憶部146に記憶する際に、multi-char NFA記述行列生成手段123から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段124は、全てのmulti-char
NFAの生成処理が完了したことを示す信号を、HDL変換手段125に通知する。
HDL変換手段125は、multi-char NFA記憶部146に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段125は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字(列)比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL(Hardware Description Language)記述に変換する。
また、HDL変換手段125は、multi-char NFA生成手段124から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置13に出力する。
続いて、本実施の形態1の動作について説明する。以下では、具体例として正規表現"BCD((A{100}|E)S)*TTB{50}U"の場合について詳細に説明する。
まず、図2〜図6を参照して、1-char NFA生成手段121の動作について説明する。入力装置11は、1つ以上の正規表現を含む。1-char NFA生成手段121は、入力装置11より正規表現を読み込む。1-char NFA生成手段121は、読み込んだ正規表現を、ε遷移の無い1-char NFAに変換する。1-char NFA生成手段121は、変換した1-char NFAを1-char NFA記憶部142に記憶する。1-char NFA記憶部142へと記憶した後、1-char NFA生成手段121は、次の正規表現をNFAへ変換する処理を開始する。
また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段121は、繰り返し正規表現リストを作成する。図3は、繰り返し正規表現リストの構成を示す図である。図に示すように、繰り返し正規表現リストの各要素を、繰り返し正規表現の繰り返し文字と、繰り返し正規表現の繰り返し回数と、1-char NFAにおける繰り返し正規表現の開始状態番号と、から構成する。1-char NFA生成手段121は、各繰り返し正規表現についてこれらの要素を作成し、繰り返し正規表現リストに格納する。即ち、1-char NFA生成手段121は、繰り返し正規表現の個数分、これらの要素を繰り返し正規表現リストに格納する。1-char NFA生成手段121は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
1-char NFA生成手段121は、例えば、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、図2に示すε遷移の無い1-char NFAに変換することができる。正規表現"BCD((A{100}|E)S)*TTB{50}U"は、二つの繰り返し正規表現"A{100}"と"B{50}"とを含む。図2に示す1-char NFAにおいて、繰り返し正規表現"A{100}"が、状態3→状態4→・・・・→状態103の状態遷移に対応している。また、繰り返し正規表現"B{50}"が、状態105→状態106→・・・・→状態155の状態遷移に対応している。この場合に、正規表現リストは、図3に示すように2個の要素を含む。即ち、図3に示す正規表現リストは、一つ目の要素として、繰り返し正規表現"A{100}"に対応する要素を含み、その内容は、繰り返し文字'A'と、繰り返し回数100と、開始状態番号3と、から構成する。また、図3に示す正規表現リストは、他の一の要素として、繰り返し正規表現"B{50}"に対応する要素を含み、その内容は、繰り返し文字'B'と、繰り返し回数50と、開始状態番号105と、から構成する。
尚、ここでは、繰り返し文字として'A'や、'B'等の単一文字を例示して説明したが本発明はこれに限定されない。即ち、マッチする文字の長さが1文字の正規表現である場合には、繰り返し文字として任意の正規表現を指定してもよい。繰り返し正規表現の繰り返し文字としては、例えば、"(A|B)"や、"[A-Za-z0-9]"等、複数文字のいずれかを表す正規表現を指定することもできる。
ここで、図4〜図6を参照しながら、1-char NFA生成手段121が、正規表現からε遷移の無い1-char NFAを生成する様子を具体的に説明する。図4は、1-char NFA生成手段121が、正規表現からε遷移の無い1-char NFAを生成する処理を示すフローチャートである。正規表現からε遷移の無い1-char NFAを生成する一般的な手法としては、非特許文献1に開示されている手法が良く知られている。非特許文献1に開示される手法では、正規表現からε遷移を含む1-char NFAを生成して、ε遷移を取り除くε-closure(ε-閉包)を行う。これにより、非特許文献1に開示される手法は、生成したε遷移を含む1-char NFAから、ε遷移の無い1-char NFAを生成する。以下、この手法を用いて、正規表現"BCD((A{100}|E)S)*TTB{50}U"から1-char NFAを生成する処理について説明する。
1-char NFA生成手段121は、非特許文献1に開示される手法に基づいて、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、ε遷移を含む1-char NFAに変換する(ステップA1)。図5に、変換後の、ε遷移を含む1-char NFAを示す。ここで、非特許文献3で開示されるNFA記述行列を用いたmulti-char NFA生成手法では、NFA記述行列を生成する前に1-char NFAを予め1文字単位に展開しておく必要がある。このため、1-char NFA生成手段121は、繰り返し正規表現"A{100}"を、文字'A'に基づく100回の状態遷移に展開する(図5において、展開後の該等範囲を点線枠内に示す。)。また、1-char NFA生成手段121は、繰り返し正規表現"B{50}"を、文字'B'に基づく50回の状態遷移に展開する(図5において、展開後の該等範囲を点線枠内に示す。)。
1-char NFA生成手段121は、各繰り返し正規表現を繰り返し文字へと展開する際に、その展開時の繰り返し正規表現の開始状態番号を保持することで、繰り返し正規表現リストを作成する。即ち、1-char NFA生成手段121は、繰り返し正規表現"A{100}"を、図5に示す文字'A'に基づく100回の状態遷移に展開する際に、展開時の開始状態番号13を保持する。また、1-char NFA生成手段121は、繰り返し正規表現"B{50}"を、図5に示す文字'B'に基づく50回の状態遷移に展開する際に、展開時の開始状態番号114を保持する。図6に、このようにして1-char NFA生成手段121が作成した繰り返し正規表現リストを示す。
図4に戻り説明を続ける。1-char NFA生成手段121は、非特許文献1等に開示される手法を用いて、図5に示すε遷移を含む1-char NFAに対してε-closureを行うことで、図2に示すε遷移の無い1-char NFAを生成する(ステップA2)。具体的には、ε-closureにおいて、1-char NFA生成手段121は、ε遷移に従って遷移可能な複数の状態を、一つの状態に統合する処理を行う。ここで、繰り返し正規表現の開始状態がε-closureにおける状態統合の対象となった場合には、1-char NFA生成手段121は、繰り返し正規表現リストにおける開始状態番号を、ε-closure前の状態番号からε-closureにおいて統合された後の状態番号へと変更する。これにより、ε遷移の無い1-char NFAにおいても、繰り返し正規表現とその開始状態番号との対応関係を、繰り返し正規表現リストを用いて管理することができる。
より具体的には、1-char NFA生成手段121は、ε-closureを行うことで、図5に示す状態3、4、7、13を一つに統合して、新たに、図2に示す状態3とする。これに対応して、1-char NFA生成手段121は、図6に示す繰り返し正規表現リストにおいて、繰り返し正規表現"A{100}"に対応する要素(繰り返し文字'A'、繰り返し回数100、開始状態番号13である要素。)の開始状態番号を、ε-closure後の開始状態番号3に書き換える。同様に、1-char NFA生成手段121は、ε-closureを行うことで、図5に示す状態114と状態10とを統合して、新たに図2に示す状態105とする。これに対応して、1-char NFA生成手段121は、図6に示す繰り返し正規表現リストにおいて、繰り返し正規表現"B{50}"に対応する要素(図6に示す最下段の要素。)の開始状態番号を、ε-closure後の開始状態番号105に書き換える。1-char NFA生成手段121は、上述の処理を繰り返すことで、図2に示すε遷移の無い1-char NFAに対応する繰り返し正規表現リストを作成する。図3に、作成した繰り返し正規表現リストを示す。
1-char NFA生成手段121は、図2に示すε遷移の無い1-char NFAにおいて、各繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当て直す(ステップA3)。具体的には、1-char NFA生成手段121は、図3に示す繰り返し正規表現リストの各要素の開始状態番号を起点として、繰り返し文字に基づく状態遷移を繰り返し回数分だけ辿り、状態番号が昇順の連番になっているか否かを確認する。状態番号が昇順の連番になっていない場合には、1-char NFA生成手段121は、状態番号の割り当て直しを行う。
図2に示すε遷移の無い1-char NFAでは、既に、繰り返し正規表現"A{100}"に対応する状態遷移は、状態3→4→5→・・・→102→103となっている。即ち、繰り返し正規表現"A{100}"に対応する状態遷移については、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段121は、状態番号の割り当て直しを行う必要はない。同様に、図2に示すε遷移の無い1-char NFAでは、繰り返し正規表現"B{50}"に対応する状態遷移は、状態105→106→・・・→154→155となっている。即ち、繰り返し正規表現"B{50}"に対応する状態遷移についても、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段121は、状態番号の割り当て直しを行う必要はない。
一方で、状態番号の割り当て直しが必要になり、繰り返し正規表現に対応する状態遷移の開始状態番号に変化が生じた場合には、1-char NFA生成手段121は、繰り返し正規表現リストの対応する繰り返し正規表現の開始状態番号を、割り当て直し後の状態番号として更新する。
1-char NFA生成手段121は、上述した処理を図3に示す繰り返し正規表現リストの各要素、即ち、全ての繰り返し正規表現に対して繰り返す。
尚、状態番号は、一つの繰り返し正規表現に対応する状態遷移の範囲内において、昇順の連番となっていればよい。従って、異なる繰り返し正規表現に関しては、状態番号に関する制約はない。例えば、繰り返し正規表現"A{100}"に対応する状態遷移の開始状態番号が、繰り返し正規表現"B{50}"に対応する状態遷移の開始状態番号よりも大きなものとなっていてもよい。
1-char NFA生成手段121は、生成したε遷移の無い1-char NFAと、作成した繰り返し正規表現リストと、を出力する(ステップA4)。即ち、1-char NFA生成手段121は、1-char NFAを1-char NFA記憶部142に記憶する。また、1-char NFA生成手段121は、繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
以上説明したようにして、1-char NFA生成手段121は、一つの正規表現から1-char NFAを生成する一連の処理を終了する。入力装置11から複数の正規表現を受信した場合には、1-char NFA生成手段121は、受信した全ての正規表現について上述した処理を繰り返して実行する。
また、1-char NFA生成手段121は、入力装置11から読み込んだ全ての正規表現の変換処理を完了する際には、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段122に通知する。
次に、図7を参照して、1-char NFA記述行列生成手段122の動作について説明する。1-char NFA記述行列生成手段122は、非特許文献3に開示される手法に基づいて、1-char NFA記憶部142に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。
図7は、1-char NFA記述行列の一例を示す図である。1-char NFA記述行列生成手段122は、正規表現"BCD((A{100}|E)S)*TB{50}U"から生成された1-char NFA(図2に示す1-char NFA。)に対して、非特許文献3にて開示される1-char NFA記述行列生成手法を適用することで、1-char NFA記述行列(図7に示す1-char NFA記述行列。)を生成することができる。
図7に示す1-char NFA記述行列は、157×157の正方行列である。図7に示す1-char NFA記述行列において、遷移条件である値を記載していない要素の値は0であり、これは状態遷移が存在しないことを表す。ここで、n個の状態を持つ1-char NFAについて、そのNFAに対応するNFA記述行列をS={sij} (i=0,1,…,N-1, j=0,1,…,N-1)として示す。NFA記述行列Sにおいて、その行i(i=0,1,…,N-1)、又は、列j(j=0,1,…,N-1)は、NFAのn個の状態の1つにそれぞれ対応付けられている。また、NFA記述行列Sの各要素sijは、行iに対応付けられた状態から列jに対応付けられた状態への遷移条件となる文字、又は、文字列の集合を表している。例えば、図7に示す1-char NFA記述行列において、その3行103列目の要素は'E'であり、これは、遷移条件'E'に従って、状態3から状態103へと遷移することを表している。また、0行0列目の'I'は、非特許文献3において規定される特別な遷移条件を示しており、初期状態から初期状態への状態遷移を示すものである。さらに、156行156列目の'F'は、非特許文献3において規定される特別な遷移条件を示しており、終了状態から終了状態への状態遷移を示すものである。
ここで、図7に示す1-char NFA記述行列においては、網掛けを用いて示す領域内の要素は、値を記載していない要素を除いて、その要素の値を0としている。指定された正規表現が異なる場合には、その正規表現に対応する1-char NFA記述行列において網掛けを用いて示す領域内の要素は、その要素の値は0以外の値となる可能性がある。これに対して、図7に1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、その要素の値が0でない要素以外は、値が常に0である。即ち、図7に示す1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、該当する状態遷移が存在しない。
例えば、図7に示す1-char NFA記述行列において、その第4行〜第102行の各要素は、状態4〜102から他の状態に遷移する遷移条件を表す。この状態4〜102は、図2に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X(4≦X≦102)の遷移先は状態X+1だけである。従って、図7に示す1-char NFA記述行列において、その第4行〜第102行の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
同様に、列について着目すると、図7に示す1-char NFA記述行列において、その第4列〜第102列の各要素は、状態4〜102へ遷移する遷移条件を表す。この状態4〜102は、図2に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X(4≦X≦102)への遷移元は状態X-1だけである。従って、図7に示す1-char NFA記述行列において、その第4列〜第102列の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
さらに、繰り返し正規表現"B{50}"に対応する、第106行〜第154行と、第106列〜第154列と、に関しても同様にして、繰り返し文字'B'が設定されている要素以外の要素は、常にその値は0である。
このように、1-char NFA生成手段121が、繰り返し正規表現に対応する部分の状態遷移においては状態番号が昇順の連番となるように状態番号を割り当てておくことで、1-char NFA記述行列生成手段122は、繰り返し正規表現に対応する1-char NFA記述行列の領域(図7において網掛けを用いて示していない領域。)において、繰り返し正規表現の繰り返し文字を、第X行、第(X+1)列に、遷移条件を示す値として設定することができる。また、1-char NFA記述行列生成手段122は、それ以外の要素については、全てその値が0である1-char NFA記述行列を生成することができる。
1-char NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。以上説明したようにして、1-char NFA記述行列生成手段122は、1-char NFA記述行列を生成する処理を終了する。
また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部143に記憶する際に、1-char NFA生成手段121から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段122は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段123に通知する。
次に、図8〜図22を参照して、multi-char NFA記述行列生成手段123の動作について説明する。multi-char NFA記述行列生成手段123は、multi-char NFA記述行列生成処理を開始する前に、予め入力装置11から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字(列)の長さであり、指定する任意の2以上の値である。以下の説明においては動作文字数をMを使用して表す。以下、具体的な数値を用いて例を説明する場合には、動作文字数Mを4として説明する。
図8は、multi-char NFA記述行列生成手段123が行う処理を示すフローチャートである。まず、図8を参照して、multi-char NFA記述行列生成手段123を用いた処理の概要について説明する。
まず、multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する(ステップB1)。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。multi-char NFA記述行列生成手段123は、作成した行列変換情報リストをNFA記述行列演算情報記憶部144に記憶する。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、1-char NFA記述行列記憶部143に記憶したオリジナル版1-char NFA記述行列D(図7に示す1-char NFA記述行列。)を、縮小版1-char NFA記述行列D'(図12に示す1-char NFA記述行列。)へと変換する。これにより、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'を生成する(ステップB2)。multi-char NFA記述行列生成手段123は、生成した縮小版1-char NFA記述行列D'をNFA記述行列演算情報記憶部144に記憶する。具体的には、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、オリジナル版1-char NFA記述行列Dのうち繰り返し正規表現に対応する状態遷移に関する要素を、動作文字数M分の行または列に置き換える。より具体的には、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dの第4行〜第102行(100-1=99行分)と第4列〜第102列(100-1=99列分)とにかけての要素(即ち、繰り返し正規表現"A{100}"に対応する要素。)を、動作文字数M分の行、又は、列に置き換える。また、multi-char NFA記述行列生成手段123は、オリジナル版1-char
NFA記述行列Dの第106行〜第154行(50-1=49行分)と第106列〜第154列(50-1=49列分)とにかけての要素(即ち、繰り返し正規表現"B{50}"に対応する要素。)を、動作文字数M分の行、又は、列に置き換える。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した縮小版1-char NFA記述行列D'を用いて、動作文字数がMの縮小版multi-char NFA記述行列D'4(図13に示すmulti-char NFA記述行列。)を生成する(ステップB3)。multi-char NFA記述行列生成手段123は、生成した縮小版multi-char NFA記述行列D'4をNFA記述行列演算情報記憶部144に記憶する。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部144に記憶した縮小版multi-char NFA記述行列D'4から、オリジナル版multi-char NFA記述行列D4(図14に示すオリジナル版multi-char NFA記述行列。)を生成する(ステップB4)。具体的には、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列D'4からオリジナル版multi-char NFA記述行列D4への変換において、繰り返し正規表現に対応する状態遷移に関する動作文字数M分の行、又は、列を、元のサイズに戻す作業を行う。
次いで、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char
NFA記述行列D4を出力する(ステップB5)。即ち、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列D4を、multi-char NFA記述行列記憶部145に記憶する。
非特許文献3に開示される手法では、図7に示すオリジナル版1-char NFA記述行列Dを動作文字数M回分掛け合わせることで、図14に示すオリジナル版multi-char NFA記述行列D4を求める構成としている。しかし、この手法では、157×157回の正方行列の演算が必要となる。これに対して、本発明に係るmulti-char NFA記述行列生成手段123を用いた処理フローでは、multi-char NFA記述行列生成手段123は、まず、上述したステップB2において、157×157の正方行列であるオリジナル版1-char NFA記述行列Dを、16×16の正方行列である縮小版1-char NFA記述行列D'に変換する。multi-char NFA記述行列生成手段123は、ステップB3において、16×16の正方行列である縮小版1-char NFA記述行列D'を動作文字数M回分掛け合わせることで、16×16の正方行列である縮小版multi-char NFA記述行列D'4を生成する。multi-char NFA記述行列生成手段123は、ステップB4において、16×16の正方行列である縮小版multi-char NFA記述行列D'4から、157×157の正方行列であるオリジナル版multi-char NFA記述行列D4を生成する。即ち、multi-char NFA記述行列生成手段123は、ステップB2において、行列サイズの小さなNFA記述行列を生成し、これを用いて演算を行うことを特徴とする。ここで、N×Nの正方行列の演算量はO(N3)であるため、非特許文献3に開示される手法を用いた場合の演算量はO(1573)=O(3869893)となる。これに対して、本発明による演算量はO(163)=O(4096)となり、演算量を約1000分の1に削減することができる。
尚、上述したステップB1において生成する行列変換情報リストは、ステップB2とステップB4とにおいて、縮小版NFA記述行列とオリジナル版NFA記述行列との相互変換を行うために必要な情報を保持するものである。このため、multi-char NFA記述行列生成手段123は、縮小版NFA記述行列とオリジナル版NFA記述行列の相互変換処理を行う前に、ステップB1において行列変換情報リストを予め生成する。
以下、図8に示す上述したステップB1〜B5について、詳細に説明する。まず、図9〜図11を参照して、ステップB1について説明する。
ステップB1において、multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する(ステップB1)。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。
図9は、行列変換情報リストの構成を示す図である。図に示すように、行列変換情報リストの各要素は、その要素のインデックス番号iと、繰り返し正規表現の繰り返し文字Tiと、繰り返し正規表現の繰り返し回数Ciと、オリジナル版のNFA記述行列における繰り返し正規表現の開始状態番号Siと、オリジナル版のNFA記述行列における繰り返し正規表現の終了状態番号Eiと、縮小版のNFA記述行列における繰り返し正規表現の開始状態番号S'iと、縮小版のNFA記述行列における繰り返し正規表現の終了状態番号E'iと、の各フィールドを含む。尚、インデックス番号iは、multi-char NFA記述行列生成手段123が行う動作の説明を容易とするために用意したフィールドであり、本発明を実施する上で必須のフィールドではない。
図10は、ステップB1において、multi-char NFA記述行列生成手段123が行列変換情報リストを生成する処理を示すフローチャートである。まず、ステップC1からC4(図において、ループ1として示す。)において、multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの各エントリを行列変換情報リストにコピーする。
具体的には、multi-char NFA記述行列生成手段123は、ステップC1においてループ1の処理を開始する。multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの各エントリについて、そのエントリの繰り返し正規表現の繰り返し回数が、M+1よりも大きいか否かを確認する(ステップC2)。そのエントリの繰り返し正規表現の繰り返し回数がM+1よりも大きい場合には、multi-char NFA記述行列生成手段123は、行列変換情報リストにそのエントリをコピーする(ステップC3)。multi-char NFA記述行列生成手段123が繰り返し正規表現リストのエントリを行列変換情報リストにコピーする際には、multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの繰り返し文字と、繰り返し回数と、開始状態番号と、を、行列変換情報リストの繰り返し文字と、繰り返し回数と、オリジナル版記述行列の開始状態番号とに、それぞれコピーする。
一方、繰り返し回数がM+1以下の場合には、multi-char NFA記述行列生成手段123は、そのエントリを正規表現リストから行列変換情報リストへとコピーしない。これは、繰り返し回数がM+1以下の場合には、ステップB2において、multi-char NFA記述行列生成手段123が縮小版NFA記述行列を作成することにしても、オリジナル版NFA記述行列と比較して行列サイズの削減につながらないためである。従って、multi-char NFA記述行列生成手段123が行列変換情報リストを作成する段階であるステップC1〜C4においては、繰り返し回数がM+1以下である繰り返し正規表現についてはその処理対象から除外する。これにより、行列変換情報リストに含まれる各エントリの繰り返し回数は、M+1よりも大きいことが保証される。
例えば、動作文字数MがM=4である場合に、正規表現"BCD((A{100}|E)S)*TTB{50}U"に対応する繰り返し正規表現リスト(繰り返し正規表現リストを図3に示す。)においては、繰り返し回数がM+1(=5)以下の繰り返し正規表現は含まれていない。このため、multi-char NFA記述行列生成手段123は、図3に示す繰り返し正規表現の全エントリを、行列変換情報リストにコピーする。
multi-char NFA記述行列生成手段123は、ステップC4においてループ1の処理を完了する。図11は、ループ1の処理が完了した時点での、行列変換情報リストを示す図である。
次いで、multi-char NFA記述行列生成手段123は、行列変換情報リストのエントリを、オリジナル版記述行列の開始状態番号の昇順に従って並び替える(ステップC5)。尚、図11に示す行列変換情報リストでは、オリジナル版記述行列の開始状態番号の昇順に従って行列変換情報リストのエントリが格納されている。このため、ステップC5における並び替え処理の実行後においても、図11に示す行列変換情報リストのエントリの順序に変化はなく、図11に示すままである。
次いで、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'の行列サイズN'を計算する(ステップC6)。ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列(具体的には、第S
i+1行〜第E
i-1行を示す。)を、M行分に縮小する。ここで、S
iは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。E
iは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。これにより、multi-char NFA記述行列生成手段123は、行列変換情報リストの各エントリについて、オリジナル版1-char NFA記述行列Dの(E
i-1)-(S
i+1)-1=E
i-S
i-1=C
i-1行分を、縮小版1-char NFA記述行列D'のM行分に変換する。ここで、行列変換情報リストの各エントリの繰り返し回数C
iについて、繰り返し回数C
i=E
i-S
iの関係が成立する。また、multi-char NFA記述行列生成手段123は、列についても同様に、第S
i+1列〜第E
i-1列を、M列分に縮小する。従って、オリジナル版1-char NFA記述行列Dの行列サイズをNとすると、縮小版1-char NFA記述行列D'の行列サイズN'を下記の数(1)を使用して示すことができる。尚、Kは、正規表現に含まれる繰り返し正規表現の個数を示す。
次に、ステップC7からC13(図において、ループ2として示す。)において、multi-char NFA記述行列生成手段123は、行列変換情報リストの各エントリについて、エントリ中の空欄である内容を計算する。ここで、空欄の内容とは、図11においては空白の部分である。具体的には、空欄の内容は、オリジナル版NFA記述行列の終了状態番号と、縮小版NFA記述行列の開始状態番号と、終了状態番号と、を示す。
上述したステップC6の説明において述べたように、ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列(具体的には、第Si+1行〜第Ei-1行を示す。)を、M行分に縮小する。ここで、Siは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。Eiは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。
以下、図7に示すオリジナル版1-char NFA記述行列Dと、図12に示す縮小版1-char NFA記述行列D'とを用いて具体的に説明する。multi-char NFA記述行列生成手段123は、指定された正規表現"BCD((A{100}|E)S)*TTB{50}U"の繰り返し正規表現"A{100}"に対応するオリジナル版1-char NFA記述行列Dの第4行〜第102行を、縮小版1-char NFA記述行列D'の第4行〜第7行に変換する。また、multi-char NFA記述行列生成手段123は、指定された正規表現"BCD((A{100}|E)S)*TTB{50}U"の繰り返し正規表現"B{50}"に対応するオリジナル版1-char NFA記述行列Dの第106行〜第154行を、縮小版1-char NFA記述行列D'の第11行〜第14行に変換する。また、multi-char NFA記述行列生成手段123は、列についても同様に変換する。
ループ2を示すステップC7〜C13においては、multi-char NFA記述行列生成手段123は、繰り返し正規表現に対応する部分のオリジナル版1-char NFA記述行列Dと縮小版1-char NFA記述行列D'とにおける対応関係を求め、その対応関係を行列変換情報リストに保持する。multi-char NFA記述行列生成手段123は、続くステップC8〜C12において、行列変換情報リストの各エントリについての処理を行う。
具体的には、multi-char NFA記述行列生成手段123は、ステップC7においてループ2の処理を開始して、i番目のエントリの処理を開始する(ステップC8)。multi-char NFA記述行列生成手段123は、オリジナル版NFA記述行列Dの終了状態番号Eiを計算する(ステップC9)。ここで、multi-char NFA記述行列生成手段123は、Ei=Si+Ciの関係が成立することを利用して、この関係に基づいてEiを計算する。
multi-char NFA記述行列生成手段123は、縮小版記述行列D'の開始状態番号S'iを計算する(ステップC10)。multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、繰り返し正規表現に関連しない状態遷移を保持する。例えば、multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列Dの第103行〜第105行を、図12に示す縮小版1-char NFA記述行列D'の第8行〜第10行にコピーする。繰り返し正規表現に関連しない部分の行数・列数は、オリジナル版1-char NFA記述行列Dと縮小版1-char NFA記述行列D'とで同じである。このため、S'i=E'i-1+(Si-Ei-1)の関係式が成立する。multi-char NFA記述行列生成手段123は、この関係式に基づいて、S'iを計算する。尚、行列変換情報リストの最初のエントリ(インデックスi=0)の計算を行う際には、multi-char NFA記述行列生成手段123は、E0=0、E'0=0と仮定して計算を行う。
multi-char NFA記述行列生成手段123は、縮小版記述行列D'の終了状態番号E'iを計算する(ステップC11)。縮小版1-char NFA記述行列D'では、繰り返し正規表現に対応する状態遷移の開始状態番号と終了状態番号との間に、動作文字数M個だけの差がある。このため、E'i=S'i+Mの関係が成立する。multi-char NFA記述行列生成手段123は、この関係に基づいてE'iを計算する。
multi-char NFA記述行列生成手段123は、ステップC12においてi番目のエントリの処理を完了した後、ステップC13においてループ2の処理を完了する。以上により、multi-char NFA記述行列生成手段123は、ステップB1における行列変換情報の生成処理を完了する。
次に、図15〜図17を参照して、ステップB2について説明する。まず、ステップB2の説明に先立ち、ステップB2以降の説明において用いる符号について以下のように定義する(尚、既に上述したようにして定義した符号も含む)。角括弧内の値は、本実施の形態1における動作説明で使用する具体例を示す値である。
M:動作文字数(M≧2)[M=4]
K:行列変換情報リストのエントリ数(K≧0)[K=2]
N:オリジナル版NFA記述行列の行列サイズ(Nは自然数)[N=157]
N':縮小版NFA記述行列の行列サイズ(N'は自然数、N'≦N)[N'=17]
尚、以下では、「NFA記述行列」として記載した場合には、「1-char NFA記述行列」と「multi-char NFA記述行列」とのいずれをも示すものとする。従って、Nは1-char NFA記述行列の行列サイズを示す。N'はmulti-char NFA記述行列の行列サイズを示す。Siと、Eiと、S'iと、E'iと、Ciと、は、行列変換情報リストにおける各エントリの要素(1≦i≦K、但しK≧1である。)を示す。K=0の場合には、行列変換情報リストは空である。E0=E'0=0、SK+1=N-1、S'K+1=N'-1であるものと定義する。
また、以下に説明するステップB2〜B4においては、オリジナル版NFA記述行列を、図15に示すような(2K+1)×(2K+1)個の領域に分割して考えるものとする。領域の境界をSiとEiとに基づいて定める(1≦i≦K)。即ち、Si番目(1≦i≦K)の行と列とを用いて、領域の境界を定める。また、Ei番目(1≦i≦K)の行と列とを用いて、領域の境界を定める。SiとEi自身は、それぞれ奇数番目の領域側に含まれる。具体的には、SiとEi自身を、図15に示す太線を用いて示す。図15に示すオリジナル版NFA記述行列において、上からx番目、かつ、左からy番目に位置する領域を、領域(x,y)と称する。xとyの値は、いずれも1から開始する。例えば、上から1番目、かつ、左から1番目に位置する領域を、領域(1,1)として示す。図7に示すオリジナル版1-char NFA記述行列Dを領域分割した例を、図15に示す。図15に示すように、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dを5×5個の領域に分割する。同様に、縮小版NFA記述行列についても、(2K+1)×(2K+1)個の領域に分割して考えるものとする。図16にその具体例を示す。図16では、SiとEiとに代えて、S'iとE'iとを用いて領域の境界を決定する。
次に、ステップB2における縮小版1-char NFA記述行列D'の生成処理について説明する。図17は、multi-char NFA記述行列生成手段123が縮小版1-char NFA記述行列D'を生成する処理を示すフローチャートである。最初に、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'を保持するためのN'×N'行列をNFA記述行列演算情報記憶部144に用意する(ステップD1)。このとき、multi-char NFA記述行列生成手段123は、用意したN'×N'行列の全要素を0として初期化する。尚、縮小版1-char NFA記述行列D'の行列サイズN'は、上述したステップB1内のステップC6において算出済みである。
次に、ステップD2〜D6のループ1において、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dの領域のうち、上からも奇数番目であり、かつ、左からも奇数番目である領域(2i-1,2j-1)(i,jは整数であり、1≦i≦K+1,1≦j≦K+1を満たす。)を、縮小版1-char NFA記述行列D'の同じ位置の領域(2i-1,2j-1)にコピーする。即ち、multi-char NFA記述行列生成手段123は、図15において網掛けを用いて示す領域を、図16において網掛けを用いて示す領域にコピーする。この網掛けを用いて示す領域は、繰り返し正規表現に関係のない領域を示す。図7に示す1-char NFA記述行列Dでは、網掛けを用いて示す領域内の要素は、その値が0である要素を示す。図15において網掛けを用いて示す領域内の要素は、入力された正規表現が異なる場合には、0以外の値となる可能性がある。このため、縮小版1-char NFA記述行列D'においても、網掛けを用いて示す領域の行列要素については、値をそのまま利用するものとする。尚、図17に示すステップD3〜D5は、各領域(2i-1,2j-1)に関する上述した処理を一般的に示したものである。即ち、ステップD3〜D5において、multi-char NFA記述行列生成手段123は、各領域(2i-1,2j-1)についての処理を行う。
次に、ステップD7〜D13において、multi-char NFA記述行列生成手段123は、生成する縮小版1-char NFA記述行列D'の残りの領域(図16において網掛けを用いて示していない領域)について、上から偶数番目、又は、左から偶数番目である領域についての処理を行う。
ここで、図16において網掛けを用いて示していない領域は、図15に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し正規表現に対応する領域である。このため、繰り返し正規表現の繰り返し回数の増加に応じて、図16において網掛けを用いて示していない領域の行と列の数は、その繰り返し回数に比例して多くなる。この網掛けを用いて示していない領域は、繰り返し正規表現に対応する領域であり、上述したステップA3において、1-char NFA生成手段121が、繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当てている。このため、この網掛けを用いて示していない領域に存在する可能性のある状態遷移は、状態Xから状態X+1への状態遷移だけである。
従って、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段123は、図15に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し文字Aiの配置を領域(2i-1,2i)の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域(2i,2i+1)の左下にかけて位置するように構成する。従って、領域(2i-1,2i)の左下の位置から領域(2i,2i+1)の左下にかけて、繰り返し文字AiがCi個並ぶ構成となる。網掛けを用いて示していない領域において、その行列要素は繰り返し文字だけとなり、繰り返し正規表現に該当しない要素は全て0となる(図7参照)。
同様にして、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段123は、生成する縮小版1-char NFA記述行列に関しても、図16に示すように、繰り返し文字Aiの配置を領域(2i-1,2i)の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域(2i,2i+1)の左下にかけて位置するように、行列の要素を設定する。
ただし、図16に示す、生成する縮小版1-char NFA記述行列においては、上から偶数番目、又は、左から偶数番目の領域は、行、又は、列の幅が、動作文字数Mとなるように用意している。このため、繰り返し文字Aiが斜めに並ぶ個数は、M+1個となる。図7に示すオリジナル版1-char NFA記述行列を参照して具体例を説明すると、行列変換情報リストの一つめのエントリは、繰り返し正規表現"A{100}"に関するものであり、繰り返し文字A1='A'、縮小版NFA記述行列における開始状態番号S'1=3、終了状態番号E'1=8である。このため、縮小版1-char NFA記述行列の要素(3行,4列)から要素(7行,8列)にかけて、繰り返し文字'A'がM+1(=5)個並ぶ。また同様に、行列変換情報リストの二番目のエントリは、繰り返し正規表現"B{50}"に関するものであり、縮小版1-char NFA記述行列の要素(10行,11列)から要素(14行,15列)にかけて、繰り返し文字'B'がM+1(=5)個並ぶ。尚、図17に示すステップD8〜D12は、行列変換情報リストのi番目のエントリについて、そのエントリに対応する繰り返し正規表現に関する領域内に繰り返し文字を設定する処理を一般的に示したものである。即ち、ステップD8〜D12において、multi-char NFA記述行列生成手段123は、i番目のエントリに関する範囲についての処理を行う。
以上説明したように、multi-char NFA記述行列生成手段123は、ステップB2における、縮小版1-char NFA記述行列D'の生成処理を終了する。multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列に対して、ステップB2の処理を行う。図12は、multi-char NFA記述行列生成手段123が生成する、縮小版1-char NFA記述行列である。尚、図12に示す縮小版1-char NFA記述行列においては、行列要素を記載していない要素の値は0であり、対応する状態遷移がないことを示す。また、行列要素が記載されている場合には、要素として記載されている文字(群)が状態遷移の遷移条件であることを示す。例えば、図12に示す縮小版1-char NFA記述行列において、(3行,8列)の要素は'E'であり、これは、状態3から状態8に文字'E'に基づいて状態遷移があることを示す。
次に、ステップB3について説明する。ステップB3において、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列D'4を生成する。上述したステップB3において、multi-char NFA記述行列生成手段123は、非特許文献3にて開示されている手法に基づいて、縮小版1-char NFA記述行列D'をM回掛け合わせることにより、縮小版multi-char NFA記述行列D'Mを計算する。ここで、D'4=D'×D'×D'×D'である。尚、NFA記述行列同士の掛け算時の演算定義については、非特許文献3の68ページ、3.3章 変換手法と、3.4章 変換例とに詳述されている。動作文字数M=4の場合に、ステップB3において、multi-char NFA記述行列生成手段123は、図12に示す縮小版1-char NFA記述行列D'から、図13に示す縮小版multi-char(4-char) NFA記述行列D'4を生成する。動作文字数Mは4であるため、図13に示す縮小版4-char NFA記述行列D'4は4文字単位のNFAの遷移条件を定義するNFA記述行列である。また、遷移条件を示す縮小版4-char NFA記述行列D'4の各要素は、長さ4の文字列となる。尚、図13において、具体的な要素の値が記載されていない要素の値は0であり、遷移条件が存在しないことを示す。
次に、図18〜図22を参照して、ステップB4について説明する。図18は、ステップB4において、multi-char NFA記述行列生成手段123が、オリジナル版multi-char NFA記述行列D4を生成する処理を示すフローチャートである。図18に示すフローチャートは、以下に示す5つの処理(1)〜(5)を含む。
(1)上から奇数番目であり、かつ、左から奇数番目の領域に対する処理(ステップE2〜E4における処理を示す。)。
(2)上から奇数番目であり、かつ、左から偶数番目の領域に対する処理(ステップE5〜E7における処理を示す。)。
(3)上から偶数番目であり、かつ、左から奇数番目の領域に対する処理(ステップE8〜E10における処理を示す。)。
(4)上から偶数番目であり、かつ、左から偶数番目の領域に対する処理(ステップE11〜E13における処理を示す。)。
(5)繰り返し正規表現に関する補正(ステップE14〜E18における処理を示す。)。
尚、NFA記述行列の領域の考え方は、図15と図16に示す通りである。また、上記(1)〜(5)の処理は互いに独立であり、図18に示すフローチャートにおいては(1)から(5)の順番に従って実行するものとして説明しているが、実行順序に制約はなく、その実効順序を変更してもよい。以下では、図18に示すフローチャートの順番に従って説明する。上記(1)から(5)の処理に先立ち、multi-char NFA記述行列生成手段123は、N×N行列DMを用意しておく。
まず、ステップE2〜E4における処理を示す(1)の処理について説明する。(1)の処理は、上から奇数番目であり、かつ、左から奇数番目の領域に対する処理である。上から奇数番目であり、かつ、左から奇数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係のない状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(1,1)の第1行、第3列目の要素"CDES"は、図2に示す状態遷移において状態1→状態2→状態3→状態103→状態3へと1文字単位の遷移を4回行った場合に、状態1→状態3へと遷移条件"CDES"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。縮小版4-char NFA記述行列の領域内の各要素と、オリジナル版4-char NFA記述行列の同じ位置の領域内の各要素とは一対一に対応している。このため、multi-char NFA記述行列生成手段123は、上から奇数番目であって、左から奇数番目である領域については、縮小版4-char NFA記述行列の各領域を、オリジナル版4-char
NFA記述行列の同じ位置の領域にコピーする(ステップE3)。
尚、図18に示すステップE2〜E4は、上述した処理を一般的に示したものである。即ち、ステップE2〜E4において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE3における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図19は、ステップE4までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。網掛けを用いて示す部分は、ステップE2〜E4の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列からコピーした要素である。
次いで、ステップE5〜E7における(2)の処理について説明する。(2)の処理は、上から奇数番目であり、かつ、左から偶数番目の領域に対する処理である。上から奇数番目であり、かつ、左から偶数番目である領域は、遷移元状態が繰り返し正規表現に関係のない状態であって、遷移先状態が繰り返し正規表現に関係する状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(1,2)の第1行、第5列目の要素"CDAA"は、図2に示す状態遷移において状態1→状態2→状態3→状態4→状態5へと1文字単位の遷移を4回行った場合に、状態1→状態5へ遷移条件"CDAA"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から偶数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係しない状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から奇数番目であって、かつ、左から偶数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち左側の境界に接する範囲にコピーする(ステップE6)。
尚、図18に示すステップE5〜E7は、上述した処理を一般的に示したものである。即ち、ステップE5〜E7において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE6における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図20は、ステップE7までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図20ではM=4の場合を示しているので、multi-char NFA記述行列は4-char NFA記述行列となる。網掛けを用いて示す部分(図において、R1を用いて示す部分。)は、上述したステップE2〜E4の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列からコピーした要素である。濃い網掛けを用いて示す部分(図において、R2を用いて示す部分。)は、ステップE5〜E7の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char
NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分R1は、multi-char NFA記述行列生成手段123が、上述したステップE4までの処理においてコピーした要素を示す。
次いで、ステップE8〜E10における(3)の処理について説明する。(3)の処理は、上から偶数番目であり、かつ、左から奇数番目の領域に対する処理である。上から偶数番目であり、かつ、左から奇数番目である領域は、遷移元状態が繰り返し正規表現に関係する状態であって、遷移先状態が繰り返し正規表現に関係のない状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(2,3)の第6行、第9列目の要素"AAST"は、図2に示す状態遷移において状態101→状態102→状態103→状態3→状態104へと1文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係する状態から繰り返し正規表現に関係しない状態へとM文字単位の状態遷移を行う場合には、遷移元状態となり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち下側の境界に接する範囲にコピーする(ステップE9)。
尚、図18に示すステップE8〜E10は、上述した処理を一般的に示したものである。即ち、ステップE8〜E10において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE9における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図21は、ステップE10までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図21においては、濃い網掛けを用いて示す部分(図において、R4を用いて示す部分。)は、ステップE8〜E10の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分(図において、R3を用いて示す部分。)は、multi-char NFA記述行列生成手段123が、上述したステップE7までの処理においてコピーした要素を示す。
次いで、ステップE11〜E13における(4)の処理について説明する。(4)の処理は、上から偶数番目であり、かつ、左から偶数番目の領域に対する処理である。上から偶数番目であり、かつ、左から偶数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係する状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(2,2)の第6行、第4列目の要素"AASA"は、図2に示す状態遷移において状態101→状態102→状態103→状態3→状態4へと1文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。繰り返し正規表現内の状態101から状態遷移を開始し、一度、繰り返し正規表現に対応する状態を抜けて状態103から状態3の遷移を行った後、再度、繰り返し正規表現に対応する状態4に達している。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。
図13に示す縮小版4-char NFA記述行列においては、上から偶数番目であって、かつ、左から偶数番目である領域のうち、0以外の要素が存在するのは領域(2,2)だけであり、他の3つの領域(2,4)、(4,2)、(4,4)については、全ての要素が0となっている。これは、領域(4,2)、(4,4)については、遷移元状態が繰り返し正規表現"B{50}"に対応する状態であり、図2に示す状態遷移図において繰り返し正規表現"B{50}"に関する状態遷移を行った後は、状態156に文字'U'で遷移する遷移条件しか存在しないため、領域(4,2)や(4,4)に対応する状態遷移が存在しないためである。また、領域(2,4)は、繰り返し正規表現"A{100}"に関連する状態から繰り返し正規表現"B{50}"に関連する状態への状態遷移を表しているが、繰り返し正規表現"A{100}"に関連する最後の状態である状態102から、繰り返し正規表現"B{50}"に関連する最初の状態である状態106へと達するには5文字分の状態遷移が必要である。このため、領域(2,4)に対応する状態遷移は存在しない。尚、本実施の形態1では、正規表現の一例として"BCD((A{100}|E)S)*TTB{50}U"を用いたが、別の正規表現が指定された場合には、これらの領域(2,4)、(4,2)、(4,4)に対しても、0以外の要素が存在する場合がある。
繰り返し正規表現に関係する状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであり、遷移元状態になり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち、左側と下側の境界に接する範囲にコピーする(ステップE12)。
尚、図18に示すステップE11〜E13は、上述した処理を一般的に示したものである。即ち、ステップE11〜E13において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE12における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図22は、ステップE13までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図22においては、濃い網掛けを用いて示す部分(図において、R6を用いて示す部分。)は、ステップE1〜E13の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分(図において、R5を用いて示す部分。)は、multi-char NFA記述行列生成手段123が、上述したステップE10までの処理においてコピーした要素を示す。
次いで、ステップE14〜E18における(5)の処理について説明する。(5)の処理は、繰り返し正規表現に関する補正である。図22に示すように、ステップE13までの処理を終えた時点でのオリジナル版multi-char NFA記述行列においては、繰り返し正規表現に対応する状態遷移のうち、繰り返し正規表現"A{100}"に対応する状態では、状態4〜98からの状態遷移と、状態8〜102への状態遷移と、が規定されていない。また、繰り返し正規表現"B{50}"に対応する状態では、状態106〜150からの状態遷移と、状態110〜154への状態遷移と、が規定されていない。
状態4〜98からの状態遷移について着目すると、状態4〜98は繰り返し正規表現"A{100}"に対応する状態である。図2を参照すると、1文字単位の状態遷移をM(=4)回行った場合には、途中で経由する状態と、M回の状態遷移を行った結果達することができる状態とは、いずれも繰り返し正規表現"A{100}"に対応する状態だけである。このため、遷移条件は、繰り返し正規表現の繰り返し文字M個である。上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する状態について、状態番号が昇順の連番となるように状態番号を割り当てている。このため、状態4〜98からの状態遷移は、遷移条件'A'のM回繰り返し(M=4なので"AAAA")での、状態X(4≦X≦98)から状態X+Mへの状態遷移だけとなる。
同様にして、状態8〜102への状態遷移について着目すると、状態8〜102への状態遷移に関して有効な状態遷移は、遷移条件'A'のM回繰り返し(M=4なので"AAAA")での、状態X(4≦X≦98)から状態X+Mへの状態遷移だけである。これは、状態4〜98からの状態遷移と全く同じ状態遷移である。従って、multi-char NFA記述行列生成手段123は、繰り返し正規表現"A{100}"に対応する状態遷移として、遷移条件'A'のM(=4)回繰り返しでの、状態X(4≦X≦98)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。また、同様にして、multi-char NFA記述行列生成手段123は、繰り返し正規表現"B{50}"に対応する状態遷移として、遷移条件'B'のM(=4)回繰り返しでの、状態X(106≦X≦150)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。
尚、図18に示すステップE14〜E18は、上述した処理を一般的に示したものである。即ち、ステップE14〜E18において、multi-char NFA記述行列生成手段123は、それぞれの繰り返し正規表現に対応して、遷移条件として繰り返し文字CiのM回繰り返しでの、状態X(Si≦X≦Ei-M)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する処理を行う。尚、iは、行列変換情報リストのエントリに割り当てられたインデックス番号を示し、個々の繰り返し正規表現に対応する。図14は、図18に示す処理(ステップE1〜E18)を全て終了した後の、完成したオリジナル版4-char NFA記述行列D4を示す図である。
次に、ステップB5について説明する。ステップB5において、multi-char NFA記述行列生成手段123は、上述したステップB4までに生成したオリジナル版4-char NFA記述行列D4を、multi-char NFA記述行列記憶部145に記憶する。
また、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部145に記憶する際に、1-char NFA記述行列生成手段122から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段124に通知する。以上説明したようにして、multi-char
NFA記述行列生成手段123は、multi-char NFA記述行列生成処理を完了する。
次に、図23を参照して、multi-char NFA生成手段124の動作について説明する。multi-char NFA生成手段124は、NFA記述行列の定義に基づいて、M文字単位の状態遷移(multi-char NFA)を生成する。multi-char NFA生成手段124は、非特許文献3に開示される手法に基づいて、multi-char NFA記述行列記憶部145に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶する。具体的には、まず、multi-char NFA生成手段124は、図14に示すオリジナル版4-char NFA記述行列D4の要素の中で、初期状態を示すIと、終了状態を示すFと、を任意の1文字にマッチすることを示す'*'に変換する。次いで、multi-char NFA生成手段124は、オリジナル版4-char NFA記述行列より、4-char NFA(M文字単位の状態遷移)を生成する。図23は、multi-char NFA生成手段124が生成した4-char NFAを示す図である。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶して、その処理を終了する。
また、multi-char NFAをmulti-char NFA記憶部146に記憶する際に、multi-char NFA記述行列生成手段123から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段124は、全てのmulti-char
NFAの生成処理が完了したことを示す信号を、HDL変換手段125に通知する。
次に、HDL変換手段125の動作について説明する。HDL変換手段125は、multi-char
NFA記憶部146に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段125は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字(列)比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL(Hardware Description Language)記述に変換する。
また、HDL変換手段125は、multi-char NFA生成手段124から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置13に出力する。
以上説明したように、本実施の形態1によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制することができる。即ち、本実施の形態1に係る手法は、オリジナル版1-char NFA記述行列において、繰り返し正規表現に対応する状態遷移に関する行と列の数を、繰り返し正規表現の繰り返し文字数から動作文字数Mにまで削減する。そして、行列サイズの小さい縮小版1-char NFA記述行列を作成した上で、縮小版の動作文字数M文字単位のNFA記述行列を計算する。そして、オリジナル版1-char NFA記述行列の状態数に対応するM文字単位のNFA記述行列を計算することで、M文字単位のNFAを得る。オリジナル版のNFA記述行列においては、行列サイズは、繰り返し正規表現の繰り返し回数に比例するものであったのに対して、上述したようにして作成した縮小版のNFA記述行列においては、繰り返し正規表現の数に比例する行列サイズに削減することができる。従って、行列サイズがNである行列同士の演算量はO(N3)であるため、本実施の形態1に係る手法は、multi-char NFA記述行列を計算する際の行列演算量を、関連技術と比較して大幅に削減することができる。multi-char NFA記述行列を計算する際の演算量を削減することができるため、M文字単位のNFAを作成するためのmulti-char NFA記述行列を生成する際に要する計算時間を削減することができる。これにより、正規表現が入力されてからM文字単位のNFAを求めて、最終的に、指定された正規表現を検索する回路のHDL記述を得るために要する所用時間を削減することができる。
また、本実施の形態1によれば、行列サイズの小さい縮小版の1-char NFA記述行列を用いてmulti-char NFA記述行列を生成するための演算を行うことで、その演算の際に使用するメモリに関して、行列演算情報を一時的に保持するためのメモリ容量を削減することができる。
また、本実施の形態1によれば、1文字単位のNFAを生成する際に、繰り返し正規表現に対応する状態には状態番号が昇順となるように状態番号を割り当てることで、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する際に、繰り返し正規表現に対応した状態遷移の追加を、状態Xから状態X+Mへの状態遷移を追加するという単純な処理で実現することができる。これにより、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列へと変換するために保持すべき情報量を削減することができる。
尚、上述した実施の形態1では、本発明をNFAに適用する場合を説明したが本発明はこれに限定されない。即ち、実施の形態1と同様の構成を適用し、1-char NFA生成手段121において、1文字単位のNFAを生成する代わりに1文字単位のDFAを生成し、1文字単位のDFAを生成する際には、繰り返し正規表現に対応する状態遷移の開始状態番号を保持するように構成するようにしてもよい。これにより、NFAに限らずDFAに対しても、行列サイズの小さな縮小版の記述行列を用いて、同時に複数文字を処理可能なM文字単位のDFAを生成することができる。
実施の形態2.
次に、図24を参照して、本発明の実施の形態2について説明する。図24は、本発明の実施の形態2の構成を示すブロック図である。図24を参照すると、本実施の形態2は、上述した実施の形態1と同様に、キーボード等の入力装置11と、プログラム制御に従って動作するデータ処理装置14と、情報を記憶する記憶装置140と、ディスプレイ装置や印刷装置等の出力装置13と、を含む。
本実施の形態2においては、上述した実施の形態1のデータ処理装置12に含まれる、1-char NFA生成手段121と、1-char NFA記述行列生成手段122と、multi-char NFA記述行列生成手段123と、multi-char NFA生成手段124と、HDL変換手段125とが実行する処理を、データ処理装置14が実行する正規表現-HDL変換プログラム15に基づいて実現するものである。
データ処理装置14は、正規表現-HDL変換プログラム15を読み込む。正規表現-HDL変換プログラム15は、データ処理装置14の動作を制御する。データ処理装置14は、正規表現-HDL変換プログラム15の制御が、上述した実施の形態1におけるデータ処理装置12が実行する処理と同一の処理を実行する。
尚、本実施の形態2においても、上述した実施の形態1と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
実施の形態3.
次に、図25を参照して、本発明の実施の形態3について説明する。図25は、本発明の実施の形態3の構成を示すブロック図である。図25を参照すると、本実施の形態3は、キーボード等の入力装置11と、プログラム制御に従って動作するデータ処理装置16と、情報を記憶する記憶装置140と、FPGA等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするためのコンフィグレーション装置164と、パターンマッチングの被検索対象データをパターンマッチング装置17に入力するデータ入力装置174と、FPGA等の再構成可能なハードウェアデバイスを有するパターンマッチング装置17と、パターンマッチングの出力結果を表示するためのディスプレイ装置や印刷装置等の結果出力装置175と、を含む。
データ処理装置16は、図1に示す上述した実施の形態1のデータ処理装置12に対して、コンフィグレーションデータ変換手段161を加えたものである。その他の要素は、上述した実施の形態1と同じであるため、説明を省略する。
コンフィグレーションデータ変換手段161は、HDL変換手段125より、正規表現からHDLへの変換処理が完了したことを示す信号を受け取る。正規表現からHDLへの変換処理が完了したことを示す信号を受け取った場合には、コンフィグレーションデータ変換手段161は、HDL変換手段125から受信したmulti-char NFAを記述するHDL記述に基づいて、パターンマッチング装置17が有する再構成可能なハードウェアデバイスの構成情報となるコンフィグレーションデータへと変換する。変換処理を完了すると、コンフィグレーションデータ変換手段161は、コンフィグレーションデータをコンフィグレーション装置164に出力する。尚、HDLからコンフィグレーションデータへの変換については、例えば、FPGAである場合には、そのベンダーが提供している開発ツールを使用することができるため、その変換方法の詳細については省略する。
コンフィグレーション装置164は、コンフィグレーションデータ変換手段161からコンフィグレーションデータを受信する。コンフィグレーションデータを受信したコンフィグレーション装置164は、コンフィグレーションデータを受信したコンフィグレーション装置164は、パターンマッチング装置17のパターンマッチング部172を実現する再構成可能なハードウェアデバイスを構成・設定する。コンフィグレーション装置164は、FPGA等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするための制御プログラムや、ハードウェアデバイスにデータを転送するための書き込みケーブル等にを用いて構成する。コンフィグレーション装置164を構成するこれらの構成要素は、例えばFPGAである場合には、デバイスベンダーが提供している開発ツールに含まれている。コンフィグレーション装置164がコンフィグレーションデータを用いて再構成可能なハードウェアデバイスを構成・設定する詳細な手順については、FPGA等のデバイスベンダーの提供する開発ツールを使用することができる。このため、ここではその詳細な説明を省略する。
パターンマッチング装置17は、データ入力部171と、パターンマッチング部172と、結果出力部173と、を含む。データ入力部171と、パターンマッチング部172と、結果出力部173とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成する。
データ入力部171は、データ入力装置174から入力されたパケットデータや、テキストデータ等のパターンマッチング対象データ(以下、これらデータを被検索データと称する。)を整形して、データ処理装置16にて生成した同時動作数に等しい同時処理文字数へと並列化する。データ入力部171は、同時処理文字数単位に、被検索データをパターンマッチング部172へ入力する。
パターンマッチング部172は、コンフィグレーション装置164を経由して入力された、データ処理装置16が生成したコンフィグレーションデータを用いて構成される回路である。即ち、パターンマッチング部172は、データ処理装置16が生成したmulti-char NFA回路そのものを示す。パターンマッチング部172に構成されたNFA回路は、データ入力部171から被検索データが入力される都度、状態遷移が起こる。そして、NFA回路は、入力された被検索データがパターンと一致した場合には、その信号が終了状態を構成しているレジスタからパターンに一致した旨を示す信号と、パターンに一致した被検索データに関する情報(例えば、パターンに一致した被検索データの位置等を示す情報。)と、を結果出力部173へと出力する。
結果出力部173は、パターンマッチング部172から入力されたパターンに一致したことを示す信号と、パターンに一致した被検索データに関する情報と、を受信する。結果出力部173は、入力された被検索データがどの入力文字列に応じてどのパターンに一致したのか等の情報を処理して、その処理結果を結果出力装置175へと出力する。尚、どのパターンに一致したかの通知は、例えば、予め定義しておいたパターン番号等を用いて通知することができる。
本実施の形態3では、正規表現そのものを入力することで、1-char NFAから、指定された処理文字数で遷移を行うmulti-char NFAの変換を行う。そして、本実施の形態3に係る手法は、multi-char NFAのNFA回路を記述するHDL記述を生成し、そのHDL記述を用いて記述されるNFA回路をパターンマッチング装置内のハードウェアデバイス上に構成する。これにより、本実施の形態3に係る手法は、ハードウェアデバイス上に構成したNFA回路を用いた、パターンマッチング装置を実現することができる。上述した実施の形態1にて説明したように、本発明は、multi-char NFA記述行列を計算する際の演算量を削減することができる。これにより、本発明は、M文字単位のNFAを作成するためのmulti-char NFA記述行列の生成に要する計算時間を削減することができる。従って、本発明は、正規表現が入力されてからM文字単位のNFAを得て、最終的に、指定された正規表現を検索する回路のHDL記述を得る、までの所用時間を削減することができる。このため、本発明は、入力装置11より新たな正規表現が入力された際には、短時間でmulti-char NFA回路を記述したHDL記述を得ることができる。これにより、そのNFA回路を記述したHDL記述を変換したコンフィグレーションデータを短時間で得ることができ、入力装置11より新たな正規表現が入力されてからその正規表現がパターンマッチング部172の構成に反映されるまでの時間を短縮することができる。
尚、本実施の形態3は、上述した実施の形態2における正規表現-HDL変換プログラム15で制御されるデータ処理装置が生成するmulti-char NFAであって、そのmulti-char NFAを記述するHDL記述をコンフィグレーションデータ変換手段161に入力し、そのHDL記述からコンフィグレーションデータを生成するようにしてもよい。
さらに、本実施の形態3では、パターンマッチング装置17において、データ入力部171と、パターンマッチング部172と、結果出力部173とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成するものとしたが本発明はこれに限定されない。即ち、これら3つを同じ再構成可能なハードウェアデバイス上に構成してもよい。また、例えば、データ入力部171と、結果出力部173と、を同じ再構成可能なハードウェアデバイス上に構成し、パターンマッチング部172を別の再構成可能なハードウェアデバイス上に構成する等してもよい。データ入力部171と、パターンマッチング部172と、結果出力部173と、これらを配備する再構成可能なハードウェアデバイスと関係については、制約はない。
さらに、データ入力部171と、結果出力部173とについては、ASIC(Application Specific Integrated Circuit)等の再構成できないハードウェアデバイス上に構成することも可能である。
また、ハードウェアデバイスの一部のみが再構成可能であり、他の部分は再構成できないハードウェアデバイスを用いて、パターンマッチング部172を再構成可能な部分に構成し、データ入力部171と結果出力部173とを再構成できないハードウェアデバイス上に構成するようにしてもよい。ここで、データ入力部171と結果出力部173の両方、又は、これらのいずれか1つを、パターンマッチング部122と同じ再構成可能なハードウェアデバイス上に構成する場合には、コンフィグレーションデータ変換手段161は、HDL変換手段125が生成したNFA回路を記述するHDL記述に加えて、データ入力部171や結果出力部173の回路を記述するHDLについても読み込むようにしてもよい。これにより、コンフィグレーションデータ変換手段161は、読み込んだコンフィグレーションデータを生成することで、データ入力部171と結果出力部173の両方、又は、これらのいずれか1つを、パターンマッチング部122と同じ再構成可能なハードウェアデバイス上に構成する場合にも対応することができる。
上述した実施の形態3の動作の説明では、コンフィグレーション装置164は、コンフィグレーションデータを格納せずに、受信したコンフィグレーションデータを使用して、パターンマッチング装置17のパターンマッチング部172を実現する再構成可能なハードウェアデバイスを構成・設定する構成としたが本発明はこれに限定されない。即ち、コンフィグレーションデータを記憶するコンフィグレーションデータ記憶装置を更に備え、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した場合には、その受信したコンフィグレーションデータを前記コンフィグレーションデータ記憶装置に記憶させた後に、前記コンフィグレーションデータ記憶装置からコンフィグレーションデータを読み出す構成としてもよい。
また、上述した実施の形態3の動作の説明では、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した場合には、パターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始する構成としたが、本発明はこれに限定されない。即ち、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した際にパターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始する必要はなく、パターンマッチング装置17のパターンマッチング部172の動作状況を考慮して、パターンマッチング装置17のパターンマッチング部172の動作に都合のよいタイミングで、パターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始するようにしてもよい。
尚、本実施の形態3においても、上述した実施の形態1、2と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
以下、本発明による効果について説明する。第1の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、NFA記述行列の演算量を少なくできることである。NFA記述行列は、NFAの遷移条件を複数文字単位に拡張したNFAを生成するための行列である。
その理由は、本発明は、1-char NFA記述行列からmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、行列サイズの小さい1-char NFA記述行列を作成し、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char
NFA記述行列に変換しているためである。即ち、1文字単位の遷移のNFAを記述する1-char NFA記述行列から指定された文字単位の遷移のNFAを記述するmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、繰り返し正規表現に対応する状態遷移に関する行および列の数を指定された文字数にまで縮小した、行列サイズの小さい1-char NFA記述行列を作成し、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char NFA記述行列に変換することで、行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことができるためである。
第2の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、NFA記述行列の演算に必要な記憶領域を少なくできることである。
その理由は、第1の効果と同様に、multi-char NFA記述行列を求めるための演算を行う前に、行列サイズの小さい1-char NFA記述行列を生成し、生成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことで、演算対象となる行列のサイズを小さく抑えることができるためである。
さらに、本発明は、1文字単位の遷移のNFAを記述する1-char NFA記述行列からmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、繰り返し正規表現に対応する状態遷移に関する行および列の数を指定された文字数にまで縮小した、行列サイズの小さい1-char NFA記述行列を作成する。そして、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char NFA記述行列に変換する。NFA記述行列の各行と各列はそれぞれ有限オートマトンの状態に対応している。行列サイズを小さくすることは行列の一部の行、又は、列を削除することを示す。行列の行、又は、列の一部を削除することは、記述行列へと変換する前の有限オートマトンにおいては、一部の状態を削除していることと等価である。即ち、本発明において、行列サイズを縮小した1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことは、有限オートマトンの状態数を削減した記述行列を作成した上で当該演算を行うことに相当する。従って、本発明では、multi-char NFA記述行列を求める際の演算において、有限オートマトンの状態数を削減することができる。
尚、本発明は上述した実施例のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
この出願は、2008年6月4日に出願された日本出願特願2008―146909を基礎とする優先権を主張し、その開示のすべてをここに取り込む。