(57)【特許請求の範囲】
【請求項１】
入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成システムであって、
入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第１の記憶部に記憶する固定文字数単位有限オートマトン生成手段と、
前記第１の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第２の記憶部に記憶する固定文字数単位行列形式表現生成手段と、
前記第２の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第３の記憶部に記憶する行列縮小手段と、
前記第３の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第４の記憶部に記憶する行列演算手段と、
前記第４の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
を有する有限オートマトン生成システム。
【請求項２】
前記行列縮小手段は、
前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
ことを特徴とする請求項１記載の有限オートマトン生成システム。
【請求項３】
前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第５の記憶部に記憶する繰り返しリスト作成手段を更に有する
ことを特徴とする請求項１記載の有限オートマトン生成システム。
【請求項４】
前記行列縮小手段は、
前記繰り返しリスト作成手段で作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
ことを特徴とする請求項３記載の有限オートマトン生成システム。
【請求項５】
前記行列拡大手段は、
前記繰り返しリスト作成手段で作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
ことを特徴とする請求項３記載の有限オートマトン生成システム。
【請求項６】
前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
ことを特徴とする請求項４又は５記載の有限オートマトン生成システム。
【請求項７】
前記固定文字数単位有限オートマトン生成手段は、
入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
ことを特徴とする請求項１記載の有限オートマトン生成システム。
【請求項８】
前記固定文字数単位有限オートマトン生成手段は、
前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
ことを特徴とする請求項７記載の有限オートマトン生成システム。
【請求項９】
前記行列拡大手段は、拡大した行列形式表現を第６の記憶部に記憶し、
前記第６の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段を更に有する
ことを特徴とする請求項１記載の有限オートマトン生成システム。
【請求項１０】
入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成方法であって、
入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第１の記憶部に記憶し、
前記第１の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第２の記憶部に記憶し、
前記第２の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第３の記憶部に記憶し、
前記第３の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第４の記憶部に記憶し、
前記第４の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する
有限オートマトン生成方法。
【請求項１１】
前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記正規表現に含まれる繰り返し正規表現に対応する領域を縮小した行列形式表現の作成は、
前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
ことを特徴とする請求項１０記載の有限オートマトン生成方法。
【請求項１２】
前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第５の記憶部に記憶する
ことを特徴とする請求項１０記載の有限オートマトン生成方法。
【請求項１３】
前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記正規表現に含まれる繰り返し正規表現に対応する領域を縮小した行列形式表現の作成は、
前記作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
ことを特徴とする請求項１２記載の有限オートマトン生成方法。
【請求項１４】
前記行列演算の結果である行列形式表現を、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現の作成は、
前記作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
ことを特徴とする請求項１２記載の有限オートマトン生成方法。
【請求項１５】
前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
ことを特徴とする請求項１３又は１４記載の有限オートマトン生成方法。
【請求項１６】
入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
ことを特徴とする請求項１０記載の有限オートマトン生成方法。
【請求項１７】
前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
ことを特徴とする請求項１６記載の有限オートマトン生成方法。
【請求項１８】
拡大した行列形式表現を第６の記憶部に記憶し、
前記第６の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する
ことを特徴とする請求項１０記載の有限オートマトン生成方法。
【請求項１９】
入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成プログラムであって、
入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第１の記憶部に記憶する固定文字数単位有限オートマトン生成ステップと、
前記第１の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第２の記憶部に記憶する固定文字数単位行列形式表現生成ステップと、
前記第２の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第３の記憶部に記憶する行列縮小ステップと、
前記第３の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第４の記憶部に記憶する行列演算ステップと、
前記第４の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大ステップと、
をコンピュータに実行させることを特徴とする有限オートマトン生成プログラム。
【請求項２０】
前記行列縮小ステップでは、
前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
ことを特徴とする請求項１９記載の有限オートマトン生成プログラム。
【請求項２１】
前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第５の記憶部に記憶する繰り返しリスト作成ステップを更に有する
ことを特徴とする請求項１９記載の有限オートマトン生成プログラム。
【請求項２２】
前記行列縮小ステップでは、
前記繰り返しリスト作成ステップで作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
ことを特徴とする請求項２１記載の有限オートマトン生成プログラム。
【請求項２３】
前記行列拡大ステップでは、
前記繰り返しリスト作成ステップで作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
ことを特徴とする請求項２１記載の有限オートマトン生成プログラム。
【請求項２４】
前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
ことを特徴とする請求項２２又は２３記載の有限オートマトン生成プログラム。
【請求項２５】
前記固定文字数単位有限オートマトン生成ステップでは、
入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
ことを特徴とする請求項１９記載の有限オートマトン生成プログラム。
【請求項２６】
前記固定文字数単位有限オートマトン生成ステップでは、
前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
ことを特徴とする請求項２５記載の有限オートマトン生成プログラム。
【請求項２７】
前記行列拡大ステップは、拡大した行列形式表現を第６の記憶部に記憶し、
前記第６の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する回路変換ステップを更に有する
ことを特徴とする請求項１９記載の有限オートマトン生成プログラム。
【請求項２８】
入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、
前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、
前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、
前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、
前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、
前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、
前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、
前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、を有し、
前記回路記述手段で記述した回路記述を用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行う
パターンマッチング装置。
【請求項２９】
入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、
前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、
前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、
前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、
前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、
前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、
前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、
前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、
前記回路記述手段で記述した回路記述から、再構成可能ハードウェアデバイスの構成情報を示すコンフィグレーションデータを生成するコンフィグレーション変換手段と、有し、
前記コンフィグレーション変換手段で生成したコンフィグレーションデータを用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行う
ことを特徴とするパターンマッチング装置。
【請求項３０】
前記パターンマッチ回路をハードウェア化し、当該ハードウェア化したパターンマッチ回路を用いてパターンマッチを行う
ことを特徴とする請求項２８又は２９に記載のパターンマッチング装置。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、文字列照合用有限オートマトン回路生成技術に関し、特に、複数文字を同時に処理する文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置に関する。
【背景技術】
【０００２】  従来、正規表現を用いた文字列照合（パターンマッチ）が、有限オートマトン（FA：Finite Automaton）と呼ばれる状態遷移マシンを用いて行われている（例えば特許文献１、２等。）。このFAは、非決定性有限オートマトン（NFA：Non-deterministic Finite Automaton）と、決定性有限オートマトン（DFA：Deterministic Finite Automaton）とに大きく分類することができる。非決定性有限オートマトン（NFA）は、ある状態における入力文字に対して状態遷移先が複数存在する有限オートマトンである。決定性有限オートマトン（DFA）は、状態遷移先が１つしか存在しない有限オートマトンである。通常、NFAは、非特許文献１に記載されているように、与えられた正規表現等の検索対象条件から構文木を構築し、これに基づいて生成することができる。DFAは、上記の手順で生成したNFAから生成することができる。しかし、NFAの状態数nに対して、DFAはその状態数が最大で2n個程度にまで増加してしまう恐れがある。【０００３】  一般的に、FAを用いたパターンマッチをハードウェアを用いて実現する手法として、状態遷移情報を状態遷移テーブルとしてメモリに格納し、当該テーブルを参照して１つずつ状態を遷移させながらパターンマッチングを行う手法が知られている。しかし、この手法では状態遷移が生じる度にメモリにアクセスして遷移情報を取得する必要があるため、このメモリアクセスが高速化のボトルネックとなる。さらに、メモリ上にNFAの状態遷移テーブルを格納した手法では、複数の状態遷移先から１つの遷移先を選択して処理を行うことしかできない。このため、選択した状態遷移先でマッチングに失敗した場合には、分岐した時点にまで戻って別の候補をテストするという"バックトラック"と呼ばれる処理が必要になり、このバックトラック自体も高速化の妨げになる。また、DFAでは、状態数が爆発的に増加する恐れがあるため、大容量のメモリが必要になる。多数の正規表現パターンに対して高速なパターンマッチングを行う場合には、特に、DFAにおける状態数の増加が高速化や構成上のボトルネックとなる。【０００４】  そこで、近年、例えば非特許文献２に開示されるように、NFAを直接回路化してFPGA（Field Programmable Gate Array）のような再構成可能なデバイス上に組み込むことで、高速なパターンマッチングを行う手法が提案されている。NFAを直接回路化する手法としては、正規表現から構文木（Syntax Tree）を経由してNFAを組み込んだNFA回路を直接生成する手法や、正規表現を一度NFAに変換してからNFA回路を構成する手法等、様々な手法が提案されている。【０００５】  例えば、図２６に示すような正規表現"a(bc)*(d|e)"に対するNFAを考えた場合、NFA回路を、図２７に示す回路として構成することができる。ここで、当該正規表現に含まれる'*'は０回以上マッチを表すメタキャラクタであり、'|'はORを表すメタキャラクタである。尚、図２６において白色の矢印を使用して示す状態は初期状態を示し、二重丸で示す状態は終了状態を示している。図２７に示すように、元のNFA（図２６に示す。）の状態0〜状態4を、NFA回路におけるレジスタ２００〜２０４を用いてそれぞれ実現する。各レジスタの値が'1'である場合に、各レジスタは当該状態がアクティブであるものと判断する。比較器３００〜３０４は、データとして入力��る１文字（1 byte）と、各遷移条件となっている文字（図中では比較器中に記載した文字。）とを比較し、一致した場合には'1'を出力する。このため、各レジスタがアクティブであると判断された状態において、各比較器において入力された文字が遷移条件と一致した場合には、ANDゲート４００〜４０３も'1'を出力する。その結果、次状態のレジスタがアクティブとなることで、NFA回路は状態遷移を実行する。NFA回路は、最終的に、最終状態であるレジスタ２０４がアクティブになった時点で、入力文字列が正規表現"a(bc)*(d|e)"のパターンに一致したものと判断する。上述したように、NFA回路は、各状態を表すレジスタと、遷移条件の入力があったことを判定する比較器と、をNFAの状態遷移に応じて接続した構成である。また、NFA回路は、１クロックサイクルあたりに１文字（1 byte）を処理するため、動作周波数に比例した検索スループット性能を有する。【０００６】  上述した手法をさらに拡張して、１クロックサイクルあたりに処理可能な文字数（バイト数）を増加させることで、検索スループットの向上を行う手法が提案されている。非特許文献３と本出願人による特願２００６-３５５５３３とにおいて、図２６に示すような"a(bc)*(d|e)"の正規表現パターンに対する１文字（1 byte）処理のNFAを、状態数を増加することなく、１クロックサイクルあたり複数文字（複数 bytes）の処理を行う場合に拡張する手法が提案されている。以下、１クロックサイクルあたり１文字（1 byte）を処理するNFAを、"1-char NFA"と称する。また、１クロックサイクルあたり複数文字（複数 bytes）を処理するNFAを"multi-char NFA"と称し、処理文字数がk文字のNFAを、"k-char NFA"と称する。【０００７】  非特許文献３に開示される手法では、１文字単位のNFAをNFA記述行列と呼ばれる行列に変換し、当該NFA記述行列をk回掛け合わせることにより、k-char NFAを求めている。ここで、n個の状態を持つ１文字単位の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個の状態の１つにそれぞれ対応付けられている。また、NFA記述行列Sの各要素sijは、行iに対応付けられた状態から列jに対応付けられた状態への遷移条件となる文字、又は、文字列の集合を表している。例えば、正規表現"a(bc)*(d|e)"のNFAとして、図２６に示すNFAを構築する。構築したNFAの各状態i（i=0,…,4）を、行iと列jとに対応付けた場合に、記述行列Sは、図２８に示す5×5行列となる。１サイクルあたり４文字（４バイト）の処理を行う4-char NFAを求める場合には、非特許文献３に開示される手法は、予め定義された演算ルールに従って、図２８に示す記述行列Sを４回掛け合わせる。非特許文献３に開示される手法は、図２８に示す記述行列Sを掛け合わせた行列M4を計算し（行列M4を図２９に示す。）、得られたM4より4-char NFAを求める。その結果、非特許文献３に開示される手法は、図３０に示すような4-char NFAを得ることができる。【０００８】  次に、NFAをハードウェア回路に直接埋め込む方式において、指定文字の繰り返し回数を指定した正規表現を表現する関連技術について説明する。【０００９】  正規表現においては、上述した基本要素に限られず、指定文字の繰り返し回数を指定した���現を使用することが可能である（以下では、「指定文字の繰り返し回数を指定した正規表現」を、「繰り返し正規表現」と称する）。正規表現"c{n}"は、文字cのｎ回繰り返しを表す。また、繰り返し回数を指定する正規表現の派生として、"c{n,m}"や、"c{n,}"や、"c{,n}"等の表現も可能である。"c{n,m}"は、文字cのｎ回以上ｍ回以下の繰り返しを表す。"c{n,}"は、文字cのn回以上の繰り返しを表す。"c{,n}"は、文字cの0回以上n回以下の繰り返しを表す。【００１０】  このような繰り返し正規表現は、上述した基本要素の組み合わせに基づいて実現することができる。この方式を使用したNFAのハードウェア回路埋め込み方式での実現手法が、非特許文献４の３３ページに記載されている。Figure.12では、正規表現".{3，}a"（任意の１文字の3回以上の繰り返しに続いて、文字aが続く正規表現。）を、基本要素の組み合わせ"...．*a"に変換することで、NFAのハードウェア埋め込み回路を実現している。また、Figure.13では、正規表現"a.{,2}b"（文字aの後に、任意の１文字の2回以下の繰り返しが存在して、文字bが続く正規表現。）を、基本要素の組み合わせ"a(|.|．．|)b"に変換することで、NFAのハードウェア埋め込み回路を実現している。尚、非特許文献３で開示される手法である、NFA記述行列を用いてmulti-char NFAを求める手法においても、１文字単位のNFA記述行列の作成に先立って１文字単位のNFAを作成しておく必要があるため、繰り返し正規表現を上述した正規表現の基本要素に展開する必要がある。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００３−２４２１７９号公報
【特許文献２】特開２００７−０３４７７７号公報
【非特許文献】
【００１２】
【非特許文献１】近藤  嘉雪  著、"定本Ｃプログラマのためのアルゴリズムとデータ構造"、ソフトバンクパブリッシング、１９９８年、第２９７-３３０頁。
【非特許文献２】R. Sidhu and V. K. Prasanna, "Fast Regular Expression Matching using FPGAs," Proceedings of 9th IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'01), April 2001., pp.227-238.
【非特許文献３】山垣則夫、神谷聡史、電子情報通信学会技術研究報告（リコンフィギャラブルシステム）、Ｖｏｌ．１０７、Ｎｏ．２２５、２００７年、第６５-７０頁。
【非特許文献４】Design of Efficient FPGA Circuits for Matching Complex Patterns in Network Intrusion Detection Systems", Christopher R. Clark, MS Thesis, School of Electrical and Computer Engineering, Georgia Institute of Technology, May 2004 (http://users.ece.gatech.edu/~cclark/clark_2004_MS.pdf).
【発明の概要】
【発明が解決しようとする課題】
【００１３】  しかしながら、ハードウェアにNFAを直接埋め込み、１クロックサイクルあたりに複数文字に対するパターンマッチングを行う手法において、繰り返し正規表現"c｛N｝"を実現するためには、以下に説明する問題がある。【００１４】  まず、第１の問題点は、文字の繰り返し回数の増加に伴って、非特許文献３に記載のNFA記述行列Sのサイズが大きくなる。このため、k-byte NFAを求めるために行う、NFA記述行列Sをk回掛け合わせる演算に要する計算量が増大するという問題がある。【００１５】  その理由を以下に述べる。NFAをハードウェアに直接埋め込む方式において、パターンマッチング回路の適用例の一つであるネットワーク侵入検知システムについて想定する。そのネットワーク侵入検知システムにおけるパターンマッチングルールには、指定文字の繰り返し回数が1000回以上となる例など、繰り返し回数が非常に多い例が見られる。繰り返し回数が非常に多い正規表現の一例として、繰り返し正規表現"\sCREATE\s[^\n]{1024}"が知られている。繰り返し正規表現"\sCREATE\s[^\n]{1024}"は、空白文字、"CREATE"という文字列、空白文字が続いた後に、改行文字以外の１文字が1024回繰り返すことを示す。【００１６】  非特許文献３に記載の手法で、例えば、繰り返し正規表現を含む正規表現"BCDA{93}STU"（"BCD"の後に、文字'A'の93回繰り返しが続き、さらに"STU"が続く繰り返し正規表現。）を実現する場合には、1-char NFAは、図３１に示すNFAとなり、NFA変換行列は、図３２に示すNFA行列となる。尚、図３２において要素の値を記載していない要素の値は０である。図３１に示す1-char NFAにおいて、丸印中の数字はNFAの状態番号を示す。また、図３２に示すNFA変換行列Sの左側の数字と上側の数字は、1-char NFAにおける状態番号を示す。ここで、NFA変換行列Sのi行j列目の要素は、1-char NFAにおける状態iから状態jへの遷移条件となる文字集合を表しており、例えば3行4列目の要素'A'は、1-char NFAの状態3から状態4への遷移条件'A'を示す。図３１に示す1-char NFAでは状態3〜状態96にかけて文字'A'に基づく遷移が93回繰り返されており、これに対応して、図３２に示すNFA変換行列Sでは3行4列目〜95行96列目にかけて文字'A'が93個斜めに並んでいる。尚、NFA変換行列Sは、全体として、100行100列となる。【００１７】  このように、NFA変換行列のサイズは、繰り返し正規表現の指定文字の繰り返し回数に大きく依存する。繰り返し正規表現の繰り返し回数をNとした場合に、繰り返し正規表現の繰り返し回数が、繰り返し正規表現以外の正規表現の状態数と比べて大きくなる場合には、そのNFA記述行列のサイズはO(N)となる。一般に、サイズがD×Dである正方行列同士の掛け算の計算量はO(D3)であるため、繰り返し正規表現における指定文字の繰り返し回数の増加に応じて、NFA変換行列の演算に要する計算量は急速に増大する。【００１８】  また、第２の問題点は、文字の繰り返し回数の増加に伴って、非特許文献３に記載のNFA記述行列Sのサイズが大きくなる。このため、NFA記述行列Sを求めるための演算や、multi-char NFAを求めるためのNFA記述行列SをM回掛け合わせる行列演算において、その演算結果を保持するために必要なメモリ容量が大きくなるという問題がある。【００１９】  その理由を以下に述べる。繰り返し正規表現"c{N}"における繰り返し回数Nが大きな場合に���、NFA記述行列のサイズはO(N)となる。サイズがD×Dである正方行列を保持するために必要なメモリ容量がO(D2)であることを考慮すると、NFA記述行列のサイズの保持に必要なメモリ量はO(N2)となる。このため、繰り返し回数Nの増加に伴って、NFA変換行列の保持に必要なメモリ容量は急速に増大する。【００２０】  本発明の目的は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することである。【００２１】  また、本発明の他の目的は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算に必要な記憶領域の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することである。
【課題を解決するための手段】
【００２２】  本発明に係る有限オートマトン生成システムの一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成システムであって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、を有するものである。【００２３】  本発明に係る有限オートマトン生成方法の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成方法であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、前記縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成するものである。【００２４】  本発明に係る有限オートマトン生成プログラムを格納する記録媒体の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成プログラムを格納する記録媒体であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成ステップと、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成ステップと、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小ステップと、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算ステップと、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大ステップと、をコンピュータに実行させるものである。【００２５】  本発明に係るパターンマッチング装置の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列���算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、を有し、前記回路記述手段で記述した回路記述を用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行うものである。【００２６】  また、本発明に係るパターンマッチング装置の他の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、前記回路記述手段で記述した回路記述から、再構成可能ハードウェアデバイスの構成情��を示すコンフィグレーションデータを生成するコンフィグレーション変換手段と、有し、前記コンフィグレーション変換手段で生成したコンフィグレーションデータを用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行うものである。
【発明の効果】
【００２７】  本発明によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することができる。【００２８】  また、本発明によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算に必要な記憶領域の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することができる。
【図面の簡単な説明】
【００２９】
【図１】本実施の形態１の構成を示すブロック図である。
【図２】正規表現の一例に対する、ε遷移の無い１文字単位のNFAを示す図である。
【図３】図２に示すNFAに対する、繰り返し正規表現リストを示す図である。
【図４】1-char NFA生成手段の動作を説明するフローチャートである。
【図５】正規表現の一例に対する、ε遷移を含む１文字単位のNFAを示す図である。
【図６】図５に示すNFAに対する、繰り返し正規表現リストを示す図である。
【図７】1-char NFA記述行列生成手段が生成する、図２に示すNFAに対応するオリジナル版1-char NFA記述行列を示す図である。
【図８】multi-char NFA記述行列生成手段の動作を説明するフローチャートである。
【図９】図６に示す繰り返し正規表現リストから生成する行列変換情報リストを示す図である。
【図１０】図８に示す行列変換情報リストの生成処理を示すフローチャートである。
【図１１】行列変換情報リストを示す図である。
【図１２】縮小版1-char NFA記述行列を示す図である。
【図１３】縮小版multi-char NFA記述行列を示す図である。
【図１４】オリジナル版multi-char NFA記述行列を示す図である。
【図１５】オリジナル版NFA記述行列における領域の定義を説明するための図である。
【図１６】縮小版NFA記述行列における領域の定義を説明するための図である。
【図１７】図８に示す縮小版1-char NFA記述行列の生成処理を示すフローチャートである。
【図１８】図８に示すオリジナル版multi-char NFA記述行列生成処理を示すフローチャートである。
【図１９】生成途中のオリジナル版multi-char NFA記述行列を示す図である。
【図２０】生成途中のオリジナル版multi-char NFA記述行列を示す図である。
【図２１】生成途中のオリジナル版multi-char NFA記述行列を示す図である。
【図２２】生成途中のオリジナル版multi-char NFA記述行列を示す図である。
【図２３】multi-char NFA生成手段が生成する、正規表現の一例に対応する４文字単位の遷移を行うNFAを示す図である。
【図２４】本実施の形態２の構成を示すブロック図である。
【図２５】本実施の形態３の構成を示すブロック図である。
【図２６】正規表現の一例に対する、１文字単位の遷移を行うNFAを示す図である。
【図２７】正規表現の一例に対する、１文字単位の遷移を行うNFA回路を示す図である。
【図２８】関連する例における、正規表現の一例に対応する１文字単位のNFA記述行列を示す図である。
【図２９】関連する例における、正規表現の一例に対応する４文字単位のNFA記述行列を示す図である。
【図３０】関連する例の４文字単位のNFA記述行列を用いて得る、正規表現の一例に対応する、４文字単位の遷移を行うNFAを示す図である。
【図３１】繰り返し正規表現を含む正規表現の一例に対応する、１文字単位のNFAを示す図である。
【図３２】繰り返し正規表現を含む正規表現の一例に対応する、１文字単位のNFAを表す1-char NFA記述行列を示す図である。
【発明を実施するための形態】
【００３０】実施の形態１．  図１は本発明の実施の形態１の構成を示すブロック図である。図１を参照すると、本実施の形態１は、キーボード等の入力装置１１と、プログラム制御に基づいて動作するデータ処理装置１２と、情報を記憶する記憶装置１４０と、ディスプレイ装置や印刷装置等の出力装置１３と、を含む。
【００３１】  記憶装置１４０は、繰り返し正規表現リスト記憶部１４１と、1-char NFA記憶部１４２と、1-char NFA記述行列記憶部１４３と、NFA記述行列演算情報記憶部１４４と、multi-char NFA記述行列記憶部１４５と、multi-char NFA記憶部１４６と、を含む。
【００３２】  データ処理装置１２は、1-char NFA生成手段１２１と、1-char NFA記述行列生成手段１２２と、multi-char NFA記述行列生成手段１２３と、multi-char NFA生成手段１２４と、HDL変換手段１２５と、を含む。尚、本実施の形態１では、固定文字数の遷移条件から成る固定文字数単位の有限オートマトンが、１文字単位の有限オートマトン（1-char NFA）である場合を例に説明する。このため、固定文字数単位有限オートマトン生成手段が、1-char NFA生成手段１２１に対応する。また、固定文字数単位行列形式表現生成手段が、1-char NFA記述行列生成手段１２２に対応する。
【００３３】  1-char NFA生成手段１２１は、入力装置１１から１つ以上の正規表現を読み込む。1-char NFA生成手段１２１は、読み込んだ正規表現をε遷移の無い1-char NFAに変換する。1-char NFA生成手段１２１は、変換した1-char NFAを1-char NFA記憶部１４２に記憶する。1-char NFA記憶部１４２への記憶後、1-char NFA生成手段１２１は、次の正規表現をNFAへ変換する処理を開始する。
【００３４】  また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段１２１は、繰り返し正規表現リストを作成する。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。1-char NFA生成手段１２１は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部１４１に記憶する。
【００３５】  さらに、入力装置１１から読み込んだ全ての正規表現を1-char NFAへと変換する処理を完了する際には、1-char NFA生成手段１２１は、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段１２２に通知する。
【００３６】  1-char NFA記述行列生成手段１２２は、非特許文献３に開示される手法に基づいて、1-char NFA記憶部１４２に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char NFA記述行列生成手段１２２は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部１４３に記憶する。尚、以下では、1-char NFA記述行列記憶部１４３に記憶した1-char NFA記述行列を、オリジナル版1-char NFA記述行列と称する。
【００３７】  また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部１４３に記憶する際に、1-char NFA生成手段１２１から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段１２２は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段１２３に通知する。
【００３８】  multi-char NFA記述行列生成手段１２３は、入力装置１１から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字（列）の長さであり、以下の説明においては動作文字数をMを使用して表す。
【００３９】  multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リスト記憶部１４１に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する。multi-char NFA記述行列生成手段１２３は、作成した行列変換情報リストをNFA記述行列演算情報記憶部１４４に記憶する。尚、multi-char NFA記述行列生成手段１２３は、作成した行列変換情報リストと、後述する縮小版NFA記述行列（縮小版1-char NFA記述行列と、縮小版multi-char NFA記述行列）とをNFA記述行列演算情報記憶部１４４に記憶する。
【００４０】  multi-char NFA記述行列生成手段１２３は、1-char NFA記述行列記憶部１４３に記憶した1-char NFA記述行列から、NFA記述行列演算情報記憶部１４４に記憶した行列変換情報リストを参照して、1-char NFA記述行列の行列サイズの縮小を行う。multi-char NFA記述行列生成手段１２３は、行列サイズを縮小した1-char NFA記述行列をNFA記述行列演算情報記憶部１４４に記憶する。以下では、行列サイズを縮小したNFA記述行列を、「縮小版NFA記述行列」と称する。また、行列サイズを縮小する前のサイズのNFA記述行列を、「オリジナル版NFA記述行列」と称する。
【００４１】  multi-char NFA記述行列生成手段１２３は、NFA記述行列演算情報記憶部１４４に記憶した縮小版1-char NFA記述行列を用いて、動作文字数がMの縮小版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段１２３は、生成した縮小版multi-char NFA記述行列をNFA記述行列演算情報記憶部１４４に記憶する。そして、multi-char NFA記述行列生成手段１２３は、NFA記述行列演算情報記憶部１４４に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部１４４に記憶した縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段１２３は、生成したオリジナル版multi-char NFA記述行列を、multi-char NFA記述行列記憶部１４５に記憶する。
【００４２】  また、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部１４５に記憶する際に、1-char NFA記述行列生成手段１２２から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA記述行列生成手段１２３は、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段１２４に通知する。
【００４３】  multi-char NFA生成手段１２４は、非特許文献３に開示される手法に基づいて、multi-char NFA記述行列記憶部１４５に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段１２４は、生成したmulti-char NFAをmulti-char NFA記憶部１４６に記憶する。
【００４４】  また、multi-char NFAをmulti-char NFA記憶部１４６に記憶する際に、multi-char NFA記述行列生成手段１２３から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段１２４は、全てのmulti-char NFAの生成処理が完了したことを示す信号を、HDL変換手段１２５に通知する。
【００４５】  HDL変換手段１２５は、multi-char NFA記憶部１４６に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段１２５は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字（列）比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL（Hardware Description Language）記述に変換する。
【００４６】  また、HDL変換手段１２５は、multi-char NFA生成手段１２４から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置１３に出力する。
【００４７】  続いて、本実施の形態１の動作について説明する。以下では、具体例として正規表現"BCD((A{100}|E)S)*TTB{50}U"の場合について詳細に説明する。
【００４８】  まず、図２〜図６を参照して、1-char NFA生成手段１２１の動作について説明する。入力装置１１は、１つ以上の正規表現を含む。1-char NFA生成手段１２１は、入力装置１１より正規表現を読み込む。1-char NFA生成手段１２１は、読み込んだ正規表現を、ε遷移の無い1-char NFAに変換する。1-char NFA生成手段１２１は、変換した1-char NFAを1-char NFA記憶部１４２に記憶する。1-char NFA記憶部１４２へと記憶した後、1-char NFA生成手段１２１は、次の正規表現をNFAへ変換する処理を開始する。
【００４９】  また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段１２１は、繰り返し正規表現リストを作成する。図３は、繰り返し正規表現リストの構成を示す図である。図に示すように、繰り返し正規表現リストの各要素を、繰り返し正規表現の繰り返し文字と、繰り返し正規表現の繰り返し回数と、1-char NFAにおける繰り返し正規表現の開始状態番号と、から構成する。1-char NFA生成手段１２１は、各繰り返し正規表現についてこれらの要素を作成し、繰り返し正規表現リストに格納する。即ち、1-char NFA生成手段１２１は、繰り返し正規表現の個数分、これらの要素を繰り返し正規表現リストに格納する。1-char NFA生成手段１２１は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部１４１に記憶する。
【００５０】  1-char NFA生成手段１２１は、例えば、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、図２に示すε遷移の無い1-char NFAに変換することができる。正規表現"BCD((A{100}|E)S)*TTB{50}U"は、二つの繰り返し正規表現"A{100}"と"B{50}"とを含む。図２に示す1-char NFAにおいて、繰り返し正規表現"A{100}"が、状態3→状態4→・・・・→状態103の状態遷移に対応している。また、繰り返し正規表現"B{50}"が、状態105→状態106→・・・・→状態155の状態遷移に対応している。この場合に、正規表現リストは、図３に示すように2個の要素を含む。即ち、図３に示す正規表現リストは、一つ目の要素として、繰り返し正規表現"A{100}"に対応する要素を含み、その内容は、繰り返し文字'A'と、繰り返し回数100と、開始状態番号3と、から構成する。また、図３に示す正規表現リストは、他の一の要素として、繰り返し正規表現"B{50}"に対応する要素を含み、その内容は、繰り返し文字'B'と、繰り返し回数50と、開始状態番号105と、から構成する。
【００５１】  尚、ここでは、繰り返し文字として'A'や、'B'等の単一文字を例示して説明したが本発明はこれに限定されない。即ち、マッチする文字の長さが１文字の正規表現である場合には、繰り返し文字として任意の正規表現を指定してもよい。繰り返し正規表現の繰り返し文字としては、例えば、"(A|B)"や、"[A-Za-z0-9]"等、複数文字のいずれかを表す正規表現を指定することもできる。
【００５２】  ここで、図４〜図６を参照しながら、1-char NFA生成手段１２１が、正規表現からε遷移の無い1-char NFAを生成する様子を具体的に説明する。図４は、1-char NFA生成手段１２１が、正規表現からε遷移の無い1-char NFAを生成する処理を示すフローチャートである。正規表現からε遷移の無い1-char NFAを生成する一般的な手法としては、非特許文献１に開示されている手法が良く知られている。非特許文献１に開示される手法では、正規表現からε遷移を含む1-char NFAを生成して、ε遷移を取り除くε-closure（ε-閉包）を行う。これにより、非特許文献１に開示される手法は、生成したε遷移を含む1-char NFAから、ε遷移の無い1-char NFAを生成する。以下、この手法を用いて、正規表現"BCD((A{100}|E)S)*TTB{50}U"から1-char NFAを生成する処理について説明する。
【００５３】  1-char NFA生成手段１２１は、非特許文献1に開示される手法に基づいて、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、ε遷移を含む1-char NFAに変換する（ステップA1）。図５に、変換後の、ε遷移を含む1-char NFAを示す。ここで、非特許文献３で開示されるNFA記述行列を用いたmulti-char NFA生成手法では、NFA記述行列を生成する前に1-char NFAを予め１文字単位に展開しておく必要がある。このため、1-char NFA生成手段１２１は、繰り返し正規表現"A{100}"を、文字'A'に基づく100回の状態遷移に展開する（図５において、展開後の該等範囲を点線枠内に示す。）。また、1-char NFA生成手段１２１は、繰り返し正規表現"B{50}"を、文字'B'に基づく50回の状態遷移に展開する（図５において、展開後の該等範囲を点線枠内に示す。）。
【００５４】  1-char NFA生成手段１２１は、各繰り返し正規表現を繰り返し文字へと展開する際に、その展開時の繰り返し正規表現の開始状態番号を保持することで、繰り返し正規表現リストを作成する。即ち、1-char NFA生成手段１２１は、繰り返し正規表現"A{100}"を、図５に示す文字'A'に基づく100回の状態遷移に展開する際に、展開時の開始状態番号13を保持する。また、1-char NFA生成手段１２１は、繰り返し正規表現"B{50}"を、図５に示す文字'B'に基づく50回の状態遷移に展開する際に、展開時の開始状態番号114を保持する。図６に、このようにして1-char NFA生成手段１２１が作成した繰り返し正規表現リストを示す。
【００５５】  図４に戻り説明を続ける。1-char NFA生成手段１２１は、非特許文献１等に開示される手法を用いて、図５に示すε遷移を含む1-char NFAに対してε-closureを行うことで、図２に示すε遷移の無い1-char NFAを生成する（ステップA2）。具体的には、ε-closureにおいて、1-char NFA生成手段１２１は、ε遷移に従って遷移可能な複数の状態を、一つの状態に統合する処理を行う。ここで、繰り返し正規表現の開始状態がε-closureにおける状態統合の対象となった場合には、1-char NFA生成手段１２１は、繰り返し正規表現リストにおける開始状態番号を、ε-closure前の状態番号からε-closureにおいて統合された後の状態番号へと変更する。これにより、ε遷移の無い1-char NFAにおいても、繰り返し正規表現とその開始状態番号との対応関係を、繰り返し正規表現リストを用いて管理することができる。
【００５６】  より具体的には、1-char NFA生成手段１２１は、ε-closureを行うことで、図５に示す状態3、4、7、13を一つに統合して、新たに、図２に示す状態3とする。これに対応して、1-char NFA生成手段１２１は、図６に示す繰り返し正規表現リストにおいて、繰り返し正規表現"A{100}"に対応する要素（繰り返し文字'A'、繰り返し回数100、開始状態番号13である要素。）の開始状態番号を、ε-closure後の開始状態番号3に書き換える。同様に、1-char NFA生成手段１２１は、ε-closureを行うことで、図５に示す状態114と状態10とを統合して、新たに図２に示す状態105とする。これに対応して、1-char NFA生成手段１２１は、図６に示す繰り返し正規表現リストにおいて、繰り返し正規表現"B{50}"に対応する要素（図６に示す最下段の要素。）の開始状態番号を、ε-closure後の開始状態番号105に書き換える。1-char NFA生成手段１２１は、上述の処理を繰り返すことで、図２に示すε遷移の無い1-char NFAに対応する繰り返し正規表現リストを作成する。図３に、作成した繰り返し正規表現リストを示す。
【００５７】  1-char NFA生成手段１２１は、図２に示すε遷移の無い1-char NFAにおいて、各繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当て直す（ステップA3）。具体的には、1-char NFA生成手段１２１は、図３に示す繰り返し正規表現リストの各要素の開始状態番号を起点として、繰り返し文字に基づく状態遷移を繰り返し回数分だけ辿り、状態番号が昇順の連番になっているか否かを確認する。状態番号が昇順の連番になっていない場合には、1-char NFA生成手段１２１は、状態番号の割り当て直しを行う。
【００５８】  図２に示すε遷移の無い1-char NFAでは、既に、繰り返し正規表現"A{100}"に対応する状態遷移は、状態3→4→5→・・・→102→103となっている。即ち、繰り返し正規表現"A{100}"に対応する状態遷移については、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段１２１は、状態番号の割り当て直しを行う必要はない。同様に、図２に示すε遷移の無い1-char NFAでは、繰り返し正規表現"B{50}"に対応する状態遷移は、状態105→106→・・・→154→155となっている。即ち、繰り返し正規表現"B{50}"に対応する状態遷移についても、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段１２１は、状態番号の割り当て直しを行う必要はない。
【００５９】  一方で、状態番号の割り当て直しが必要になり、繰り返し正規表現に対応する状態遷移の開始状態番号に変化が生じた場合には、1-char NFA生成手段１２１は、繰り返し正規表現リストの対応する繰り返し正規表現の開始状態番号を、割り当て直し後の状態番号として更新する。
【００６０】  1-char NFA生成手段１２１は、上述した処理を図３に示す繰り返し正規表現リストの各要素、即ち、全ての繰り返し正規表現に対して繰り返す。
【００６１】  尚、状態番号は、一つの繰り返し正規表現に対応する状態遷移の範囲内において、昇順の連番となっていればよい。従って、異なる繰り返し正規表現に関しては、状態番号に関する制約はない。例えば、繰り返し正規表現"A{100}"に対応する状態遷移の開始状態番号が、繰り返し正規表現"B{50}"に対応する状態遷移の開始状態番号よりも大きなものとなっていてもよい。
【００６２】  1-char NFA生成手段１２１は、生成したε遷移の無い1-char NFAと、作成した繰り返し正規表現リストと、を出力する（ステップA4）。即ち、1-char NFA生成手段１２１は、1-char NFAを1-char NFA記憶部１４２に記憶する。また、1-char NFA生成手段１２１は、繰り返し正規表現リストを繰り返し正規表現リスト記憶部１４１に記憶する。
【００６３】  以上説明したようにして、1-char NFA生成手段１２１は、一つの正規表現から1-char NFAを生成する一連の処理を終了する。入力装置１１から複数の正規表現を受信した場合には、1-char NFA生成手段１２１は、受信した全ての正規表現について上述した処理を繰り返して実行する。
【００６４】  また、1-char NFA生成手段１２１は、入力装置１１から読み込んだ全ての正規表現の変換処理を完了する際には、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段１２２に通知する。
【００６５】  次に、図７を参照して、1-char NFA記述行列生成手段１２２の動作について説明する。1-char NFA記述行列生成手段１２２は、非特許文献３に開示される手法に基づいて、1-char NFA記憶部１４２に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char NFA記述行列生成手段１２２は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部１４３に記憶する。
【００６６】  図７は、1-char NFA記述行列の一例を示す図である。1-char NFA記述行列生成手段１２２は、正規表現"BCD((A{100}|E)S)*TB{50}U"から生成された1-char NFA（図２に示す1-char NFA。）に対して、非特許文献３にて開示される1-char NFA記述行列生成手法を適用することで、1-char NFA記述行列（図７に示す1-char NFA記述行列。）を生成することができる。
【００６７】  図７に示す1-char NFA記述行列は、157×157の正方行列である。図７に示す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個の状態の１つにそれぞれ対応付けられている。また、NFA記述行列Sの各要素sijは、行iに対応付けられた状態から列jに対応付けられた状態への遷移条件となる文字、又は、文字列の集合を表している。例えば、図７に示す1-char NFA記述行列において、その3行103列目の要素は'E'であり、これは、遷移条件'E'に従って、状態3から状態103へと遷移することを表している。また、0行0列目の'I'は、非特許文献３において規定される特別な遷移条件を示しており、初期状態から初期状態への状態遷移を示すものである。さらに、156行156列目の'F'は、非特許文献３において規定される特別な遷移条件を示しており、終了状態から終了状態への状態遷移を示すものである。
【００６８】  ここで、図７に示す1-char NFA記述行列においては、網掛けを用いて示す領域内の要素は、値を記載していない要素を除いて、その要素の値を0としている。指定された正規表現が異なる場合には、その正規表現に対応する1-char NFA記述行列において網掛けを用いて示す領域内の要素は、その要素の値は0以外の値となる可能性がある。これに対して、図７に1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、その要素の値が0でない要素以外は、値が常に0である。即ち、図７に示す1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、該当する状態遷移が存在しない。
【００６９】  例えば、図７に示す1-char NFA記述行列において、その第4行〜第102行の各要素は、状態4〜102から他の状態に遷移する遷移条件を表す。この状態4〜102は、図２に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段１２１は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X（4≦X≦102）の遷移先は状態X+1だけである。従って、図７に示す1-char NFA記述行列において、その第4行〜第102行の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
【００７０】  同様に、列について着目すると、図７に示す1-char NFA記述行列において、その第4列〜第102列の各要素は、状態4〜102へ遷移する遷移条件を表す。この状態4〜102は、図２に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段１２１は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X（4≦X≦102）への遷移元は状態X-1だけである。従って、図７に示す1-char NFA記述行列において、その第4列〜第102列の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
【００７１】  さらに、繰り返し正規表現"B{50}"に対応する、第106行〜第154行と、第106列〜第154列と、に関しても同様にして、繰り返し文字'B'が設定されている要素以外の要素は、常にその値は0である。
【００７２】  このように、1-char NFA生成手段１２１が、繰り返し正規表現に対応する部分の状態遷移においては状態番号が昇順の連番となるように状態番号を割り当てておくことで、1-char NFA記述行列生成手段１２２は、繰り返し正規表現に対応する1-char NFA記述行列の領域（図７において網掛けを用いて示していない領域。）において、繰り返し正規表現の繰り返し文字を、第X行、第（X+1）列に、遷移条件を示す値として設定することができる。また、1-char NFA記述行列生成手段１２２は、それ以外の要素については、全てその値が0である1-char NFA記述行列を生成することができる。
【００７３】  1-char NFA記述行列生成手段１２２は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部１４３に記憶する。以上説明したようにして、1-char NFA記述行列生成手段１２２は、1-char NFA記述行列を生成する処理を終了する。
【００７４】  また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部１４３に記憶する際に、1-char NFA生成手段１２１から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段１２２は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段１２３に通知する。
【００７５】  次に、図８〜図２２を参照して、multi-char NFA記述行列生成手段１２３の動作について説明する。multi-char NFA記述行列生成手段１２３は、multi-char NFA記述行列生成処理を開始する前に、予め入力装置１１から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字（列）の長さであり、指定する任意の2以上の値である。以下の説明においては動作文字数をMを使用して表す。以下、具体的な数値を用いて例を説明する場合には、動作文字数Mを4として説明する。
【００７６】  図８は、multi-char NFA記述行列生成手段１２３が行う処理を示すフローチャートである。まず、図８を参照して、multi-char NFA記述行列生成手段１２３を用いた処理の概要について説明する。
【００７７】  まず、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リスト記憶部１４１に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する（ステップB1）。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。multi-char NFA記述行列生成手段１２３は、作成した行列変換情報リストをNFA記述行列演算情報記憶部１４４に記憶する。
【００７８】  次いで、multi-char NFA記述行列生成手段１２３は、NFA記述行列演算情報記憶部１４４に記憶した行列変換情報リストを参照して、1-char NFA記述行列記憶部１４３に記憶したオリジナル版1-char NFA記述行列D（図７に示す1-char NFA記述行列。）を、縮小版1-char NFA記述行列D'（図１２に示す1-char NFA記述行列。）へと変換する。これにより、multi-char NFA記述行列生成手段１２３は、縮小版1-char NFA記述行列D'を生成する（ステップB2）。multi-char NFA記述行列生成手段１２３は、生成した縮小版1-char NFA記述行列D'をNFA記述行列演算情報記憶部１４４に記憶する。具体的には、multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、オリジナル版1-char NFA記述行列Dのうち繰り返し正規表現に対応する状態遷移に関する要素を、動作文字数M分の行または列に置き換える。より具体的には、multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dの第4行〜第102行（100-1=99行分）と第4列〜第102列（100-1=99列分）とにかけての要素（即ち、繰り返し正規表現"A{100}"に対応する要素。）を、動作文字数M分の行、又は、列に置き換える。また、multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dの第106行〜第154行（50-1=49行分）と第106列〜第154列（50-1=49列分）とにかけての要素（即ち、繰り返し正規表現"B{50}"に対応する要素。）を、動作文字数M分の行、又は、列に置き換える。
【００７９】  次いで、multi-char NFA記述行列生成手段１２３は、NFA記述行列演算情報記憶部１４４に記憶した縮小版1-char NFA記述行列D'を用いて、動作文字数がMの縮小版multi-char NFA記述行列D'4（図１３に示すmulti-char NFA記述行列。）を生成する（ステップB3）。multi-char NFA記述行列生成手段１２３は、生成した縮小版multi-char NFA記述行列D'4をNFA記述行列演算情報記憶部１４４に記憶する。
【００８０】  次いで、multi-char NFA記述行列生成手段１２３は、NFA記述行列演算情報記憶部１４４に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部１４４に記憶した縮小版multi-char NFA記述行列D'4から、オリジナル版multi-char NFA記述行列D4（図１４に示すオリジナル版multi-char NFA記述行列。）を生成する（ステップB4）。具体的には、multi-char NFA記述行列生成手段１２３は、縮小版multi-char NFA記述行列D'4からオリジナル版multi-char NFA記述行列D4への変換において、繰り返し正規表現に対応する状態遷移に関する動作文字数M分の行、又は、列を、元のサイズに戻す作業を行う。
【００８１】  次いで、multi-char NFA記述行列生成手段１２３は、生成したオリジナル版multi-char NFA記述行列D4を出力する（ステップB5）。即ち、multi-char NFA記述行列生成手段１２３は、生成したオリジナル版multi-char NFA記述行列D4を、multi-char NFA記述行列記憶部１４５に記憶する。
【００８２】  非特許文献３に開示される手法では、図７に示すオリジナル版1-char NFA記述行列Dを動作文字数M回分掛け合わせることで、図１４に示すオリジナル版multi-char NFA記述行列D4を求める構成としている。しかし、この手法では、157×157回の正方行列の演算が必要となる。これに対して、本発明に係るmulti-char NFA記述行列生成手段１２３を用いた処理フローでは、multi-char NFA記述行列生成手段１２３は、まず、上述したステップB2において、157×157の正方行列であるオリジナル版1-char NFA記述行列Dを、16×16の正方行列である縮小版1-char NFA記述行列D'に変換する。multi-char NFA記述行列生成手段１２３は、ステップB3において、16×16の正方行列である縮小版1-char NFA記述行列D'を動作文字数M回分掛け合わせることで、16×16の正方行列である縮小版multi-char NFA記述行列D'4を生成する。multi-char NFA記述行列生成手段１２３は、ステップB4において、16×16の正方行列である縮小版multi-char NFA記述行列D'4から、157×157の正方行列であるオリジナル版multi-char NFA記述行列D4を生成する。即ち、multi-char NFA記述行列生成手段１２３は、ステップB2において、行列サイズの小さなNFA記述行列を生成し、これを用いて演算を行うことを特徴とする。ここで、N×Nの正方行列の演算量はO(N3)であるため、非特許文献３に開示される手法を用いた場合の演算量はO(1573)=O(3869893)となる。これに対して、本発明による演算量はO(163)=O(4096)となり、演算量を約1000分の1に削減することができる。
【００８３】  尚、上述したステップB1において生成する行列変換情報リストは、ステップB2とステップB4とにおいて、縮小版NFA記述行列とオリジナル版NFA記述行列との相互変換を行うために必要な情報を保持するものである。このため、multi-char NFA記述行列生成手段１２３は、縮小版NFA記述行列とオリジナル版NFA記述行列の相互変換処理を行う前に、ステップB1において行列変換情報リストを予め生成する。
【００８４】  以下、図８に示す上述したステップB1〜B5について、詳細に説明する。まず、図９〜図１１を参照して、ステップB1について説明する。
【００８５】  ステップB1において、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リスト記憶部１４１に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する（ステップB1）。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。
【００８６】  図９は、行列変換情報リストの構成を示す図である。図に示すように、行列変換情報リストの各要素は、その要素のインデックス番号iと、繰り返し正規表現の繰り返し文字Tiと、繰り返し正規表現の繰り返し回数Ciと、オリジナル版のNFA記述行列における繰り返し正規表現の開始状態番号Siと、オリジナル版のNFA記述行列における繰り返し正規表現の終了状態番号Eiと、縮小版のNFA記述行列における繰り返し正規表現の開始状態番号S'iと、縮小版のNFA記述行列における繰り返し正規表現の終了状態番号E'iと、の各フィールドを含む。尚、インデックス番号iは、multi-char NFA記述行列生成手段１２３が行う動作の説明を容易とするために用意したフィールドであり、本発明を実施する上で必須のフィールドではない。
【００８７】  図１０は、ステップB1において、multi-char NFA記述行列生成手段１２３が行列変換情報リストを生成する処理を示すフローチャートである。まず、ステップC1からC4（図において、ループ１として示す。）において、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リストの各エントリを行列変換情報リストにコピーする。
【００８８】  具体的には、multi-char NFA記述行列生成手段１２３は、ステップC1においてループ１の処理を開始する。multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リストの各エントリについて、そのエントリの繰り返し正規表現の繰り返し回数が、M+1よりも大きいか否かを確認する（ステップC2）。そのエントリの繰り返し正規表現の繰り返し回数がM+1よりも大きい場合には、multi-char NFA記述行列生成手段１２３は、行列変換情報リストにそのエントリをコピーする（ステップC3）。multi-char NFA記述行列生成手段１２３が繰り返し正規表現リストのエントリを行列変換情報リストにコピーする際には、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現リストの繰り返し文字と、繰り返し回数と、開始状態番号と、を、行列変換情報リストの繰り返し文字と、繰り返し回数と、オリジナル版記述行列の開始状態番号とに、それぞれコピーする。
【００８９】  一方、繰り返し回数がM+1以下の場合には、multi-char NFA記述行列生成手段１２３は、そのエントリを正規表現リストから行列変換情報リストへとコピーしない。これは、繰り返し回数がM+1以下の場合には、ステップB2において、multi-char NFA記述行列生成手段１２３が縮小版NFA記述行列を作成することにしても、オリジナル版NFA記述行列と比較して行列サイズの削減につながらないためである。従って、multi-char NFA記述行列生成手段１２３が行列変換情報リストを作成する段階であるステップC1〜C4においては、繰り返し回数がM+1以下である繰り返し正規表現についてはその処理対象から除外する。これにより、行列変換情報リストに含まれる各エントリの繰り返し回数は、M+1よりも大きいことが保証される。
【００９０】  例えば、動作文字数MがM=4である場合に、正規表現"BCD((A{100}|E)S)*TTB{50}U"に対応する繰り返し正規表現リスト（繰り返し正規表現リストを図３に示す。）においては、繰り返し回数がM+1（=5）以下の繰り返し正規表現は含まれていない。このため、multi-char NFA記述行列生成手段１２３は、図３に示す繰り返し正規表現の全エントリを、行列変換情報リストにコピーする。
【００９１】  multi-char NFA記述行列生成手段１２３は、ステップC4においてループ１の処理を完了する。図１１は、ループ１の処理が完了した時点での、行列変換情報リストを示す図である。
【００９２】  次いで、multi-char NFA記述行列生成手段１２３は、行列変換情報リストのエントリを、オリジナル版記述行列の開始状態番号の昇順に従って並び替える（ステップC5）。尚、図１１に示す行列変換情報リストでは、オリジナル版記述行列の開始状態番号の昇順に従って行列変換情報リストのエントリが格納されている。このため、ステップC5における並び替え処理の実行後においても、図１１に示す行列変換情報リストのエントリの順序に変化はなく、図１１に示すままである。
【００９３】  次いで、multi-char NFA記述行列生成手段１２３は、縮小版1-char NFA記述行列D'の行列サイズN'を計算する（ステップC6）。ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段１２３は、図７に示すオリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列（具体的には、第Si+1行〜第Ei-1行を示す。）を、M行分に縮小する。ここで、Siは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。Eiは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。これにより、multi-char NFA記述行列生成手段１２３は、行列変換情報リストの各エントリについて、オリジナル版1-char NFA記述行列Dの(Ei-1)-(Si+1)-1=Ei-Si-1=Ci-1行分を、縮小版1-char NFA記述行列D'のM行分に変換する。ここで、行列変換情報リストの各エントリの繰り返し回数Ciについて、繰り返し回数Ci=Ei-Siの関係が成立する。また、multi-char NFA記述行列生成手段１２３は、列についても同様に、第Si+1列〜第Ei-1列を、M列分に縮小する。従って、オリジナル版1-char NFA記述行列Dの行列サイズをNとすると、縮小版1-char NFA記述行列D'の行列サイズN'を下記の数（１）を使用して示すことができる。尚、Kは、正規表現に含まれる繰り返し正規表現の個数を示す。0005429164.tif 000002
【００９４】  次に、ステップC7からC13（図において、ループ２として示す。）において、multi-char NFA記述行列生成手段１２３は、行列変換情報リストの各エントリについて、エントリ中の空欄である内容を計算する。ここで、空欄の内容とは、図１１においては空白の部分である。具体的には、空欄の内容は、オリジナル版NFA記述行列の終了状態番号と、縮小版NFA記述行列の開始状態番号と、終了状態番号と、を示す。
【００９５】  上述したステップC6の説明において述べたように、ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列（具体的には、第Si+1行〜第Ei-1行を示す。）を、M行分に縮小する。ここで、Siは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。Eiは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。
【００９６】  以下、図７に示すオリジナル版1-char NFA記述行列Dと、図１２に示す縮小版1-char NFA記述行列D'とを用いて具体的に説明する。multi-char NFA記述行列生成手段１２３は、指定された正規表現"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記述行列生成手段１２３は、指定された正規表現"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記述行列生成手段１２３は、列についても同様に変換する。
【００９７】  ループ２を示すステップC7〜C13においては、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現に対応する部分のオリジナル版1-char NFA記述行列Dと縮小版1-char NFA記述行列D'とにおける対応関係を求め、その対応関係を行列変換情報リストに保持する。multi-char NFA記述行列生成手段１２３は、続くステップC8〜C12において、行列変換情報リストの各エントリについての処理を行う。
【００９８】  具体的には、multi-char NFA記述行列生成手段１２３は、ステップC7においてループ２の処理を開始して、i番目のエントリの処理を開始する（ステップC8）。multi-char NFA記述行列生成手段１２３は、オリジナル版NFA記述行列Dの終了状態番号Eiを計算する（ステップC9）。ここで、multi-char NFA記述行列生成手段１２３は、Ei=Si+Ciの関係が成立することを利用して、この関係に基づいてEiを計算する。
【００９９】  multi-char NFA記述行列生成手段１２３は、縮小版記述行列D'の開始状態番号S'iを計算する（ステップC10）。multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、繰り返し正規表現に関連しない状態遷移を保持する。例えば、multi-char NFA記述行列生成手段１２３は、図７に示すオリジナル版1-char NFA記述行列Dの第103行〜第105行を、図１２に示す縮小版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記述行列生成手段１２３は、この関係式に基づいて、S'iを計算する。尚、行列変換情報リストの最初のエントリ（インデックスi=0）の計算を行う際には、multi-char NFA記述行列生成手段１２３は、E0=0、E'0=0と仮定して計算を行う。
【０１００】  multi-char NFA記述行列生成手段１２３は、縮小版記述行列D'の終了状態番号E'iを計算する（ステップC11）。縮小版1-char NFA記述行列D'では、繰り返し正規表現に対応する状態遷移の開始状態番号と終了状態番号との間に、動作文字数M個だけの差がある。このため、E'i=S'i+Mの関係が成立する。multi-char NFA記述行列生成手段１２３は、この関係に基づいてE'iを計算する。
【０１０１】  multi-char NFA記述行列生成手段１２３は、ステップC12においてi番目のエントリの処理を完了した後、ステップC13においてループ２の処理を完了する。以上により、multi-char NFA記述行列生成手段１２３は、ステップB1における行列変換情報の生成処理を完了する。
【０１０２】  次に、図１５〜図１７を参照して、ステップB2について説明する。まず、ステップB2の説明に先立ち、ステップB2以降の説明において用いる符号について以下のように定義する（尚、既に上述したようにして定義した符号も含む）。角括弧内の値は、本実施の形態１における動作説明で使用する具体例を示す値である。  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記述行列を、図１５に示すような（2K+1）×（2K+1）個の領域に分割して考えるものとする。領域の境界をSiとEiとに基づいて定める（1≦i≦K）。即ち、Si番目（1≦i≦K）の行と列とを用いて、領域の境界を定める。また、Ei番目（1≦i≦K）の行と列とを用いて、領域の境界を定める。SiとEi自身は、それぞれ奇数番目の領域側に含まれる。具体的には、SiとEi自身を、図１５に示す太線を用いて示す。図１５に示すオリジナル版NFA記述行列において、上からx番目、かつ、左からy番目に位置する領域を、領域（x,y）と称する。xとyの値は、いずれも１から開始する。例えば、上から１番目、かつ、左から１番目に位置する領域を、領域（1,1）として示す。図７に示すオリジナル版1-char NFA記述行列Dを領域分割した例を、図１５に示す。図１５に示すように、multi-char NFA記述行列生成手段１２３は、オリジナル版1-char NFA記述行列Dを5×5個の領域に分割する。同様に、縮小版NFA記述行列についても、（2K+1）×（2K+1）個の領域に分割して考えるものとする。図１６にその具体例を示す。図１６では、SiとEiとに代えて、S'iとE'iとを用いて領域の境界を決定する。
【０１０４】  次に、ステップB2における縮小版1-char NFA記述行列D'の生成処理について説明する。図１７は、multi-char NFA記述行列生成手段１２３が縮小版1-char NFA記述行列D'を生成する処理を示すフローチャートである。最初に、multi-char NFA記述行列生成手段１２３は、縮小版1-char NFA記述行列D'を保持するためのN'×N'行列をNFA記述行列演算情報記憶部１４４に用意する（ステップD1）。このとき、multi-char NFA記述行列生成手段１２３は、用意したN'×N'行列の全要素を0として初期化する。尚、縮小版1-char NFA記述行列D'の行列サイズN'は、上述したステップB1内のステップC6において算出済みである。
【０１０５】  次に、ステップD2〜D6のループ１において、multi-char NFA記述行列生成手段１２３は、オリジナル版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記述行列生成手段１２３は、図１５において網掛けを用いて示す領域を、図１６において網掛けを用いて示す領域にコピーする。この網掛けを用いて示す領域は、繰り返し正規表現に関係のない領域を示す。図７に示す1-char NFA記述行列Dでは、網掛けを用いて示す領域内の要素は、その値が0である要素を示す。図１５において網掛けを用いて示す領域内の要素は、入力された正規表現が異なる場合には、0以外の値となる可能性がある。このため、縮小版1-char NFA記述行列D'においても、網掛けを用いて示す領域の行列要素については、値をそのまま利用するものとする。尚、図１７に示すステップD3〜D5は、各領域（2i-1,2j-1）に関する上述した処理を一般的に示したものである。即ち、ステップD3〜D5において、multi-char NFA記述行列生成手段１２３は、各領域（2i-1,2j-1）についての処理を行う。
【０１０６】  次に、ステップD7〜D13において、multi-char NFA記述行列生成手段１２３は、生成する縮小版1-char NFA記述行列D'の残りの領域（図１６において網掛けを用いて示していない領域）について、上から偶数番目、又は、左から偶数番目である領域についての処理を行う。
【０１０７】  ここで、図１６において網掛けを用いて示していない領域は、図１５に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し正規表現に対応する領域である。このため、繰り返し正規表現の繰り返し回数の増加に応じて、図１６において網掛けを用いて示していない領域の行と列の数は、その繰り返し回数に比例して多くなる。この網掛けを用いて示していない領域は、繰り返し正規表現に対応する領域であり、上述したステップA3において、1-char NFA生成手段１２１が、繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当てている。このため、この網掛けを用いて示していない領域に存在する可能性のある状態遷移は、状態Xから状態X+1への状態遷移だけである。
【０１０８】  従って、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段１２３は、図１５に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し文字Aiの配置を領域（2i-1,2i）の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域（2i,2i+1）の左下にかけて位置するように構成する。従って、領域（2i-1,2i）の左下の位置から領域（2i,2i+1）の左下にかけて、繰り返し文字AiがCi個並ぶ構成となる。網掛けを用いて示していない領域において、その行列要素は繰り返し文字だけとなり、繰り返し正規表現に該当しない要素は全て0となる（図７参照）。
【０１０９】  同様にして、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段１２３は、生成する縮小版1-char NFA記述行列に関しても、図１６に示すように、繰り返し文字Aiの配置を領域（2i-1,2i）の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域（2i,2i+1）の左下にかけて位置するように、行列の要素を設定する。
【０１１０】  ただし、図１６に示す、生成する縮小版1-char NFA記述行列においては、上から偶数番目、又は、左から偶数番目の領域は、行、又は、列の幅が、動作文字数Mとなるように用意している。このため、繰り返し文字Aiが斜めに並ぶ個数は、M+1個となる。図７に示すオリジナル版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)個並ぶ。尚、図１７に示すステップD8〜D12は、行列変換情報リストのi番目のエントリについて、そのエントリに対応する繰り返し正規表現に関する領域内に繰り返し文字を設定する処理を一般的に示したものである。即ち、ステップD8〜D12において、multi-char NFA記述行列生成手段１２３は、i番目のエントリに関する範囲についての処理を行う。
【０１１１】  以上説明したように、multi-char NFA記述行列生成手段１２３は、ステップB2における、縮小版1-char NFA記述行列D'の生成処理を終了する。multi-char NFA記述行列生成手段１２３は、図７に示すオリジナル版1-char NFA記述行列に対して、ステップB2の処理を行う。図１２は、multi-char NFA記述行列生成手段１２３が生成する、縮小版1-char NFA記述行列である。尚、図１２に示す縮小版1-char NFA記述行列においては、行列要素を記載していない要素の値は0であり、対応する状態遷移がないことを示す。また、行列要素が記載されている場合には、要素として記載されている文字（群）が状態遷移の遷移条件であることを示す。例えば、図１２に示す縮小版1-char NFA記述行列において、（3行,8列）の要素は'E'であり、これは、状態3から状態8に文字'E'に基づいて状態遷移があることを示す。
【０１１２】  次に、ステップB3について説明する。ステップB3において、multi-char NFA記述行列生成手段１２３は、縮小版multi-char NFA記述行列D'4を生成する。上述したステップB3において、multi-char NFA記述行列生成手段１２３は、非特許文献３にて開示されている手法に基づいて、縮小版1-char NFA記述行列D'をM回掛け合わせることにより、縮小版multi-char NFA記述行列D'Mを計算する。ここで、D'4＝D'×D'×D'×D'である。尚、NFA記述行列同士の掛け算時の演算定義については、非特許文献３の68ページ、3.3章  変換手法と、3.4章  変換例とに詳述されている。動作文字数M=4の場合に、ステップB3において、multi-char NFA記述行列生成手段１２３は、図１２に示す縮小版1-char NFA記述行列D'から、図１３に示す縮小版multi-char(4-char) NFA記述行列D'4を生成する。動作文字数Mは4であるため、図１３に示す縮小版4-char NFA記述行列D'4は４文字単位のNFAの遷移条件を定義するNFA記述行列である。また、遷移条件を示す縮小版4-char NFA記述行列D'4の各要素は、長さ4の文字列となる。尚、図１３において、具体的な要素の値が記載されていない要素の値は0であり、遷移条件が存在しないことを示す。
【０１１３】  次に、図１８〜図２２を参照して、ステップB4について説明する。図１８は、ステップB4において、multi-char NFA記述行列生成手段１２３が、オリジナル版multi-char NFA記述行列D4を生成する処理を示すフローチャートである。図１８に示すフローチャートは、以下に示す５つの処理（１）〜（５）を含む。（１）上から奇数番目であり、かつ、左から奇数番目の領域に対する処理（ステップE2〜E4における処理を示す。）。（２）上から奇数番目であり、かつ、左から偶数番目の領域に対する処理（ステップE5〜E7における処理を示す。）。（３）上から偶数番目であり、かつ、左から奇数番目の領域に対する処理（ステップE8〜E10における処理を示す。）。（４）上から偶数番目であり、かつ、左から偶数番目の領域に対する処理（ステップE11〜E13における処理を示す。）。（５）繰り返し正規表現に関する補正（ステップE14〜E18における処理を示す。）。  尚、NFA記述行列の領域の考え方は、図１５と図１６に示す通りである。また、上記（１）〜（５）の処理は互いに独立であり、図１８に示すフローチャートにおいては（１）から（５）の順番に従って実行するものとして説明しているが、実行順序に制約はなく、その実効順序を変更してもよい。以下では、図１８に示すフローチャートの順番に従って説明する。上記（１）から（５）の処理に先立ち、multi-char NFA記述行列生成手段１２３は、N×N行列DMを用意しておく。
【０１１４】  まず、ステップE2〜E4における処理を示す（１）の処理について説明する。（１）の処理は、上から奇数番目であり、かつ、左から奇数番目の領域に対する処理である。上から奇数番目であり、かつ、左から奇数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係のない状態に関する遷移条件を示している。
【０１１５】  例えば、図１３に示す縮小版4-char NFA記述行列において、領域(1,1)の第1行、第3列目の要素"CDES"は、図２に示す状態遷移において状態1→状態2→状態3→状態103→状態3へと１文字単位の遷移を4回行った場合に、状態1→状態3へと遷移条件"CDES"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。縮小版4-char NFA記述行列の領域内の各要素と、オリジナル版4-char NFA記述行列の同じ位置の領域内の各要素とは一対一に対応している。このため、multi-char NFA記述行列生成手段１２３は、上から奇数番目であって、左から奇数番目である領域については、縮小版4-char NFA記述行列の各領域を、オリジナル版4-char NFA記述行列の同じ位置の領域にコピーする（ステップE3）。
【０１１６】  尚、図１８に示すステップE2〜E4は、上述した処理を一般的に示したものである。即ち、ステップE2〜E4において、multi-char NFA記述行列生成手段１２３は、各領域についての処理を行う。ステップE3における領域毎の処理では、multi-char NFA記述行列生成手段１２３は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図１９は、ステップE4までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。網掛けを用いて示す部分は、ステップE2〜E4の処理において、multi-char NFA記述行列生成手段１２３が、縮小版4-char NFA記述行列からコピーした要素である。
【０１１７】  次いで、ステップE5〜E7における（２）の処理について説明する。（２）の処理は、上から奇数番目であり、かつ、左から偶数番目の領域に対する処理である。上から奇数番目であり、かつ、左から偶数番目である領域は、遷移元状態が繰り返し正規表現に関係のない状態であって、遷移先状態が繰り返し正規表現に関係する状態に関する遷移条件を示している。
【０１１８】  例えば、図１３に示す縮小版4-char NFA記述行列において、領域(1,2)の第1行、第5列目の要素"CDAA"は、図２に示す状態遷移において状態1→状態2→状態3→状態4→状態5へと１文字単位の遷移を4回行った場合に、状態1→状態5へ遷移条件"CDAA"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から偶数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係しない状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段１２３は、縮小版multi-char NFA記述行列において、上から奇数番目であって、かつ、左から偶数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち左側の境界に接する範囲にコピーする（ステップE6）。
【０１１９】  尚、図１８に示すステップE5〜E7は、上述した処理を一般的に示したものである。即ち、ステップE5〜E7において、multi-char NFA記述行列生成手段１２３は、各領域についての処理を行う。ステップE6における領域毎の処理では、multi-char NFA記述行列生成手段１２３は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図２０は、ステップE7までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図２０ではM=4の場合を示しているので、multi-char NFA記述行列は4-char NFA記述行列となる。網掛けを用いて示す部分（図において、Ｒ１を用いて示す部分。）は、上述したステップE2〜E4の処理において、multi-char NFA記述行列生成手段１２３が、縮小版4-char NFA記述行列からコピーした要素である。濃い網掛けを用いて示す部分（図において、Ｒ２を用いて示す部分。）は、ステップE5〜E7の処理において、multi-char NFA記述行列生成手段１２３が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分Ｒ１は、multi-char NFA記述行列生成手段１２３が、上述したステップE4までの処理においてコピーした要素を示す。
【０１２０】  次いで、ステップE8〜E10における（３）の処理について説明する。（３）の処理は、上から偶数番目であり、かつ、左から奇数番目の領域に対する処理である。上から偶数番目であり、かつ、左から奇数番目である領域は、遷移元状態が繰り返し正規表現に関係する状態であって、遷移先状態が繰り返し正規表現に関係のない状態に関する遷移条件を示している。
【０１２１】  例えば、図１３に示す縮小版4-char NFA記述行列において、領域(2,3)の第6行、第9列目の要素"AAST"は、図２に示す状態遷移において状態101→状態102→状態103→状態3→状態104へと１文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係する状態から繰り返し正規表現に関係しない状態へとM文字単位の状態遷移を行う場合には、遷移元状態となり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段１２３は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち下側の境界に接する範囲にコピーする（ステップE9）。
【０１２２】  尚、図１８に示すステップE8〜E10は、上述した処理を一般的に示したものである。即ち、ステップE8〜E10において、multi-char NFA記述行列生成手段１２３は、各領域についての処理を行う。ステップE9における領域毎の処理では、multi-char NFA記述行列生成手段１２３は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図２１は、ステップE10までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図２１においては、濃い網掛けを用いて示す部分（図において、Ｒ４を用いて示す部分。）は、ステップE8〜E10の処理において、multi-char NFA記述行列生成手段１２３が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分（図において、Ｒ３を用いて示す部分。）は、multi-char NFA記述行列生成手段１２３が、上述したステップE7までの処理においてコピーした要素を示す。
【０１２３】  次いで、ステップE11〜E13における（４）の処理について説明する。（４）の処理は、上から偶数番目であり、かつ、左から偶数番目の領域に対する処理である。上から偶数番目であり、かつ、左から偶数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係する状態に関する遷移条件を示している。
【０１２４】  例えば、図１３に示す縮小版4-char NFA記述行列において、領域(2,2)の第6行、第4列目の要素"AASA"は、図２に示す状態遷移において状態101→状態102→状態103→状態3→状態4へと１文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。繰り返し正規表現内の状態101から状態遷移を開始し、一度、繰り返し正規表現に対応する状態を抜けて状態103から状態3の遷移を行った後、再度、繰り返し正規表現に対応する状態4に達している。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。
【０１２５】  図１３に示す縮小版4-char NFA記述行列においては、上から偶数番目であって、かつ、左から偶数番目である領域のうち、0以外の要素が存在するのは領域(2,2)だけであり、他の3つの領域(2,4)、(4,2)、(4,4)については、全ての要素が0となっている。これは、領域(4,2)、(4,4)については、遷移元状態が繰り返し正規表現"B{50}"に対応する状態であり、図２に示す状態遷移図において繰り返し正規表現"B{50}"に関する状態遷移を行った後は、状態156に文字'U'で遷移する遷移条件しか存在しないため、領域(4,2)や(4,4)に対応する状態遷移が存在しないためである。また、領域(2,4)は、繰り返し正規表現"A{100}"に関連する状態から繰り返し正規表現"B{50}"に関連する状態への状態遷移を表しているが、繰り返し正規表現"A{100}"に関連する最後の状態である状態102から、繰り返し正規表現"B{50}"に関連する最初の状態である状態106へと達するには5文字分の状態遷移が必要である。このため、領域(2,4)に対応する状態遷移は存在しない。尚、本実施の形態１では、正規表現の一例として"BCD((A{100}|E)S)*TTB{50}U"を用いたが、別の正規表現が指定された場合には、これらの領域(2,4)、(4,2)、(4,4)に対しても、0以外の要素が存在する場合がある。
【０１２６】  繰り返し正規表現に関係する状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであり、遷移元状態になり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段１２３は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち、左側と下側の境界に接する範囲にコピーする（ステップE12）。
【０１２７】  尚、図１８に示すステップE11〜E13は、上述した処理を一般的に示したものである。即ち、ステップE11〜E13において、multi-char NFA記述行列生成手段１２３は、各領域についての処理を行う。ステップE12における領域毎の処理では、multi-char NFA記述行列生成手段１２３は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図２２は、ステップE13までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図２２においては、濃い網掛けを用いて示す部分（図において、Ｒ６を用いて示す部分。）は、ステップE1〜E13の処理において、multi-char NFA記述行列生成手段１２３が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分（図において、Ｒ５を用いて示す部分。）は、multi-char NFA記述行列生成手段１２３が、上述したステップE10までの処理においてコピーした要素を示す。
【０１２８】  次いで、ステップE14〜E18における（５）の処理について説明する。（５）の処理は、繰り返し正規表現に関する補正である。図２２に示すように、ステップE13までの処理を終えた時点でのオリジナル版multi-char NFA記述行列においては、繰り返し正規表現に対応する状態遷移のうち、繰り返し正規表現"A{100}"に対応する状態では、状態4〜98からの状態遷移と、状態8〜102への状態遷移と、が規定されていない。また、繰り返し正規表現"B{50}"に対応する状態では、状態106〜150からの状態遷移と、状態110〜154への状態遷移と、が規定されていない。
【０１２９】  状態4〜98からの状態遷移について着目すると、状態4〜98は繰り返し正規表現"A{100}"に対応する状態である。図２を参照すると、１文字単位の状態遷移をM（=4）回行った場合には、途中で経由する状態と、M回の状態遷移を行った結果達することができる状態とは、いずれも繰り返し正規表現"A{100}"に対応する状態だけである。このため、遷移条件は、繰り返し正規表現の繰り返し文字M個である。上述したステップA3において、1-char NFA生成手段１２１は、繰り返し正規表現に対応する状態について、状態番号が昇順の連番となるように状態番号を割り当てている。このため、状態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記述行列生成手段１２３は、繰り返し正規表現"A{100}"に対応する状態遷移として、遷移条件'A'のM（=4）回繰り返しでの、状態X（4≦X≦98）から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。また、同様にして、multi-char NFA記述行列生成手段１２３は、繰り返し正規表現"B{50}"に対応する状態遷移として、遷移条件'B'のM（=4）回繰り返しでの、状態X（106≦X≦150）から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。
【０１３１】  尚、図１８に示すステップE14〜E18は、上述した処理を一般的に示したものである。即ち、ステップE14〜E18において、multi-char NFA記述行列生成手段１２３は、それぞれの繰り返し正規表現に対応して、遷移条件として繰り返し文字CiのM回繰り返しでの、状態X（Si≦X≦Ei-M）から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する処理を行う。尚、iは、行列変換情報リストのエントリに割り当てられたインデックス番号を示し、個々の繰り返し正規表現に対応する。図１４は、図１８に示す処理（ステップE1〜E18）を全て終了した後の、完成したオリジナル版4-char NFA記述行列D4を示す図である。
【０１３２】  次に、ステップB5について説明する。ステップB5において、multi-char NFA記述行列生成手段１２３は、上述したステップB4までに生成したオリジナル版4-char NFA記述行列D4を、multi-char NFA記述行列記憶部１４５に記憶する。
【０１３３】  また、multi-char NFA記述行列生成手段１２３は、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部１４５に記憶する際に、1-char NFA記述行列生成手段１２２から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段１２４に通知する。以上説明したようにして、multi-char NFA記述行列生成手段１２３は、multi-char NFA記述行列生成処理を完了する。
【０１３４】  次に、図２３を参照して、multi-char NFA生成手段１２４の動作について説明する。multi-char NFA生成手段１２４は、NFA記述行列の定義に基づいて、M文字単位の状態遷移（multi-char NFA）を生成する。multi-char NFA生成手段１２４は、非特許文献３に開示される手法に基づいて、multi-char NFA記述行列記憶部１４５に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段１２４は、生成したmulti-char NFAをmulti-char NFA記憶部１４６に記憶する。具体的には、まず、multi-char NFA生成手段１２４は、図１４に示すオリジナル版4-char NFA記述行列D4の要素の中で、初期状態を示すIと、終了状態を示すFと、を任意の１文字にマッチすることを示す'*'に変換する。次いで、multi-char NFA生成手段１２４は、オリジナル版4-char NFA記述行列より、4-char NFA（M文字単位の状態遷移）を生成する。図２３は、multi-char NFA生成手段１２４が生成した4-char NFAを示す図である。multi-char NFA生成手段１２４は、生成したmulti-char NFAをmulti-char NFA記憶部１４６に記憶して、その処理を終了する。
【０１３５】  また、multi-char NFAをmulti-char NFA記憶部１４６に記憶する際に、multi-char NFA記述行列生成手段１２３から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段１２４は、全てのmulti-char NFAの生成処理が完了したことを示す信号を、HDL変換手段１２５に通知する。
【０１３６】  次に、HDL変換手段１２５の動作について説明する。HDL変換手段１２５は、multi-char NFA記憶部１４６に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段１２５は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字（列）比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL（Hardware Description Language）記述に変換する。
【０１３７】  また、HDL変換手段１２５は、multi-char NFA生成手段１２４から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置１３に出力する。
【０１３８】  以上説明したように、本実施の形態１によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制することができる。即ち、本実施の形態１に係る手法は、オリジナル版1-char NFA記述行列において、繰り返し正規表現に対応する状態遷移に関する行と列の数を、繰り返し正規表現の繰り返し文字数から動作文字数Mにまで削減する。そして、行列サイズの小さい縮小版1-char NFA記述行列を作成した上で、縮小版の動作文字数M文字単位のNFA記述行列を計算する。そして、オリジナル版1-char NFA記述行列の状態数に対応するM文字単位のNFA記述行列を計算することで、M文字単位のNFAを得る。オリジナル版のNFA記述行列においては、行列サイズは、繰り返し正規表現の繰り返し回数に比例するものであったのに対して、上述したようにして作成した縮小版のNFA記述行列においては、繰り返し正規表現の数に比例する行列サイズに削減することができる。従って、行列サイズがNである行列同士の演算量はO(N3)であるため、本実施の形態１に係る手法は、multi-char NFA記述行列を計算する際の行列演算量を、関連技術と比較して大幅に削減することができる。multi-char NFA記述行列を計算する際の演算量を削減することができるため、M文字単位のNFAを作成するためのmulti-char NFA記述行列を生成する際に要する計算時間を削減することができる。これにより、正規表現が入力されてからM文字単位のNFAを求めて、最終的に、指定された正規表現を検索する回路のHDL記述を得るために要する所用時間を削減することができる。
【０１３９】  また、本実施の形態１によれば、行列サイズの小さい縮小版の1-char NFA記述行列を用いてmulti-char NFA記述行列を生成するための演算を行うことで、その演算の際に使用するメモリに関して、行列演算情報を一時的に保持するためのメモリ容量を削減することができる。
【０１４０】  また、本実施の形態１によれば、１文字単位のNFAを生成する際に、繰り返し正規表現に対応する状態には状態番号が昇順となるように状態番号を割り当てることで、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する際に、繰り返し正規表現に対応した状態遷移の追加を、状態Xから状態X+Mへの状態遷移を追加するという単純な処理で実現することができる。これにより、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列へと変換するために保持すべき情報量を削減することができる。
【０１４１】  尚、上述した実施の形態１では、本発明をNFAに適用する場合を説明したが本発明はこれに限定されない。即ち、実施の形態１と同様の構成を適用し、1-char NFA生成手段１２１において、１文字単位のNFAを生成する代わりに１文字単位のDFAを生成し、１文字単位のDFAを生成する際には、繰り返し正規表現に対応する状態遷移の開始状態番号を保持するように構成するようにしてもよい。これにより、NFAに限らずDFAに対しても、行列サイズの小さな縮小版の記述行列を用いて、同時に複数文字を処理可能なM文字単位のDFAを生成することができる。
【０１４２】  実施の形態２．  次に、図２４を参照して、本発明の実施の形態２について説明する。図２４は、本発明の実施の形態２の構成を示すブロック図である。図２４を参照すると、本実施の形態２は、上述した実施の形態１と同様に、キーボード等の入力装置１１と、プログラム制御に従って動作するデータ処理装置１４と、情報を記憶する記憶装置１４０と、ディスプレイ装置や印刷装置等の出力装置１３と、を含む。
【０１４３】  本実施の形態２においては、上述した実施の形態１のデータ処理装置１２に含まれる、1-char NFA生成手段１２１と、1-char NFA記述行列生成手段１２２と、multi-char NFA記述行列生成手段１２３と、multi-char NFA生成手段１２４と、HDL変換手段１２５とが実行する処理を、データ処理装置１４が実行する正規表現-HDL変換プログラム１５に基づいて実現するものである。
【０１４４】  データ処理装置１４は、正規表現-HDL変換プログラム１５を読み込む。正規表現-HDL変換プログラム１５は、データ処理装置１４の動作を制御する。データ処理装置１４は、正規表現-HDL変換プログラム１５の制御が、上述した実施の形態１におけるデータ処理装置１２が実行する処理と同一の処理を実行する。
【０１４５】  尚、本実施の形態２においても、上述した実施の形態１と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
【０１４６】  実施の形態３．  次に、図２５を参照して、本発明の実施の形態３について説明する。図２５は、本発明の実施の形態３の構成を示すブロック図である。図２５を参照すると、本実施の形態３は、キーボード等の入力装置１１と、プログラム制御に従って動作するデータ処理装置１６と、情報を記憶する記憶装置１４０と、ＦＰＧＡ等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするためのコンフィグレーション装置１６４と、パターンマッチングの被検索対象データをパターンマッチング装置１７に入力するデータ入力装置１７４と、ＦＰＧＡ等の再構成可能なハードウェアデバイスを有するパターンマッチング装置１７と、パターンマッチングの出力結果を表示するためのディスプレイ装置や印刷装置等の結果出力装置１７５と、を含む。
【０１４７】  データ処理装置１６は、図１に示す上述した実施の形態１のデータ処理装置１２に対して、コンフィグレーションデータ変換手段１６１を加えたものである。その他の要素は、上述した実施の形態１と同じであるため、説明を省略する。
【０１４８】  コンフィグレーションデータ変換手段１６１は、HDL変換手段１２５より、正規表現からHDLへの変換処理が完了したことを示す信号を受け取る。正規表現からHDLへの変換処理が完了したことを示す信号を受け取った場合には、コンフィグレーションデータ変換手段１６１は、HDL変換手段１２５から受信したmulti-char NFAを記述するHDL記述に基づいて、パターンマッチング装置１７が有する再構成可能なハードウェアデバイスの構成情報となるコンフィグレーションデータへと変換する。変換処理を完了すると、コンフィグレーションデータ変換手段１６１は、コンフィグレーションデータをコンフィグレーション装置１６４に出力する。尚、HDLからコンフィグレーションデータへの変換については、例えば、ＦＰＧＡである場合には、そのベンダーが提供している開発ツールを使用することができるため、その変換方法の詳細については省略する。
【０１４９】  コンフィグレーション装置１６４は、コンフィグレーションデータ変換手段１６１からコンフィグレーションデータを受信する。コンフィグレーションデータを受信したコンフィグレーション装置１６４は、コンフィグレーションデータを受信したコンフィグレーション装置１６４は、パターンマッチング装置１７のパターンマッチング部１７２を実現する再構成可能なハードウェアデバイスを構成・設定する。コンフィグレーション装置１６４は、ＦＰＧＡ等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするための制御プログラムや、ハードウェアデバイスにデータを転送するための書き込みケーブル等にを用いて構成する。コンフィグレーション装置１６４を構成するこれらの構成要素は、例えばＦＰＧＡである場合には、デバイスベンダーが提供している開発ツールに含まれている。コンフィグレーション装置１６４がコンフィグレーションデータを用いて再構成可能なハードウェアデバイスを構成・設定する詳細な手順については、ＦＰＧＡ等のデバイスベンダーの提供する開発ツールを使用することができる。このため、ここではその詳細な説明を省略する。
【０１５０】  パターンマッチング装置１７は、データ入力部１７１と、パターンマッチング部１７２と、結果出力部１７３と、を含む。データ入力部１７１と、パターンマッチング部１７２と、結果出力部１７３とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成する。
【０１５１】  データ入力部１７１は、データ入力装置１７４から入力されたパケットデータや、テキストデータ等のパターンマッチング対象データ（以下、これらデータを被検索データと称する。）を整形して、データ処理装置１６にて生成した同時動作数に等しい同時処理文字数へと並列化する。データ入力部１７１は、同時処理文字数単位に、被検索データをパターンマッチング部１７２へ入力する。
【０１５２】  パターンマッチング部１７２は、コンフィグレーション装置１６４を経由して入力された、データ処理装置１６が生成したコンフィグレーションデータを用いて構成される回路である。即ち、パターンマッチング部１７２は、データ処理装置１６が生成したmulti-char NFA回路そのものを示す。パターンマッチング部１７２に構成されたNFA回路は、データ入力部１７１から被検索データが入力される都度、状態遷移が起こる。そして、NFA回路は、入力された被検索データがパターンと一致した場合には、その信号が終了状態を構成しているレジスタからパターンに一致した旨を示す信号と、パターンに一致した被検索データに関する情報（例えば、パターンに一致した被検索データの位置等を示す情報。）と、を結果出力部１７３へと出力する。
【０１５３】  結果出力部１７３は、パターンマッチング部１７２から入力されたパターンに一致したことを示す信号と、パターンに一致した被検索データに関する情報と、を受信する。結果出力部１７３は、入力された被検索データがどの入力文字列に応じてどのパターンに一致したのか等の情報を処理して、その処理結果を結果出力装置１７５へと出力する。尚、どのパターンに一致したかの通知は、例えば、予め定義しておいたパターン番号等を用いて通知することができる。
【０１５４】  本実施の形態３では、正規表現そのものを入力することで、1-char NFAから、指定された処理文字数で遷移を行うmulti-char NFAの変換を行う。そして、本実施の形態３に係る手法は、multi-char NFAのNFA回路を記述するHDL記述を生成し、そのHDL記述を用いて記述されるNFA回路をパターンマッチング装置内のハードウェアデバイス上に構成する。これにより、本実施の形態３に係る手法は、ハードウェアデバイス上に構成したNFA回路を用いた、パターンマッチング装置を実現することができる。上述した実施の形態１にて説明したように、本発明は、multi-char NFA記述行列を計算する際の演算量を削減することができる。これにより、本発明は、M文字単位のNFAを作成するためのmulti-char NFA記述行列の生成に要する計算時間を削減することができる。従って、本発明は、正規表現が入力されてからM文字単位のNFAを得て、最終的に、指定された正規表現を検索する回路のHDL記述を得る、までの所用時間を削減することができる。このため、本発明は、入力装置１１より新たな正規表現が入力された際には、短時間でmulti-char NFA回路を記述したHDL記述を得ることができる。これにより、そのNFA回路を記述したHDL記述を変換したコンフィグレーションデータを短時間で得ることができ、入力装置１１より新たな正規表現が入力されてからその正規表現がパターンマッチング部１７２の構成に反映されるまでの時間を短縮することができる。
【０１５５】  尚、本実施の形態３は、上述した実施の形態２における正規表現-HDL変換プログラム１５で制御されるデータ処理装置が生成するmulti-char NFAであって、そのmulti-char NFAを記述するHDL記述をコンフィグレーションデータ変換手段１６１に入力し、そのHDL記述からコンフィグレーションデータを生成するようにしてもよい。
【０１５６】  さらに、本実施の形態３では、パターンマッチング装置１７において、データ入力部１７１と、パターンマッチング部１７２と、結果出力部１７３とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成するものとしたが本発明はこれに限定されない。即ち、これら３つを同じ再構成可能なハードウェアデバイス上に構成してもよい。また、例えば、データ入力部１７１と、結果出力部１７３と、を同じ再構成可能なハードウェアデバイス上に構成し、パターンマッチング部１７２を別の再構成可能なハードウェアデバイス上に構成する等してもよい。データ入力部１７１と、パターンマッチング部１７２と、結果出力部１７３と、これらを配備する再構成可能なハードウェアデバイスと関係については、制約はない。
【０１５７】  さらに、データ入力部１７１と、結果出力部１７３とについては、ＡＳＩＣ（Application Specific Integrated Circuit）等の再構成できないハードウェアデバイス上に構成することも可能である。
【０１５８】  また、ハードウェアデバイスの一部のみが再構成可能であり、他の部分は再構成できないハードウェアデバイスを用いて、パターンマッチング部１７２を再構成可能な部分に構成し、データ入力部１７１と結果出力部１７３とを再構成できないハードウェアデバイス上に構成するようにしてもよい。ここで、データ入力部１７１と結果出力部１７３の両方、又は、これらのいずれか１つを、パターンマッチング部１２２と同じ再構成可能なハードウェアデバイス上に構成する場合には、コンフィグレーションデータ変換手段１６１は、HDL変換手段１２５が生成したNFA回路を記述するHDL記述に加えて、データ入力部１７１や結果出力部１７３の回路を記述するHDLについても読み込むようにしてもよい。これにより、コンフィグレーションデータ変換手段１６１は、読み込んだコンフィグレーションデータを生成することで、データ入力部１７１と結果出力部１７３の両方、又は、これらのいずれか１つを、パターンマッチング部１２２と同じ再構成可能なハードウェアデバイス上に構成する場合にも対応することができる。
【０１５９】  上述した実施の形態３の動作の説明では、コンフィグレーション装置１６４は、コンフィグレーションデータを格納せずに、受信したコンフィグレーションデータを使用して、パターンマッチング装置１７のパターンマッチング部１７２を実現する再構成可能なハードウェアデバイスを構成・設定する構成としたが本発明はこれに限定されない。即ち、コンフィグレーションデータを記憶するコンフィグレーションデータ記憶装置を更に備え、コンフィグレーション装置１６４は、コンフィグレーションデータ変換手段１６１よりコンフィグレーションデータを受信した場合には、その受信したコンフィグレーションデータを前記コンフィグレーションデータ記憶装置に記憶させた後に、前記コンフィグレーションデータ記憶装置からコンフィグレーションデータを読み出す構成としてもよい。
【０１６０】  また、上述した実施の形態３の動作の説明では、コンフィグレーション装置１６４は、コンフィグレーションデータ変換手段１６１よりコンフィグレーションデータを受信した場合には、パターンマッチング部１７２を実現する再構成可能なハードウェアデバイスの構成を開始する構成としたが、本発明はこれに限定されない。即ち、コンフィグレーション装置１６４は、コンフィグレーションデータ変換手段１６１よりコンフィグレーションデータを受信した際にパターンマッチング部１７２を実現する再構成可能なハードウェアデバイスの構成を開始する必要はなく、パターンマッチング装置１７のパターンマッチング部１７２の動作状況を考慮して、パターンマッチング装置１７のパターンマッチング部１７２の動作に都合のよいタイミングで、パターンマッチング部１７２を実現する再構成可能なハードウェアデバイスの構成を開始するようにしてもよい。
【０１６１】  尚、本実施の形態３においても、上述した実施の形態１、２と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
【０１６２】  以下、本発明による効果について説明する。第１の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、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記述行列に変換しているためである。即ち、１文字単位の遷移の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記述行列を求めるための演算を行うことができるためである。
【０１６４】  第２の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、NFA記述行列の演算に必要な記憶領域を少なくできることである。
【０１６５】  その理由は、第１の効果と同様に、multi-char NFA記述行列を求めるための演算を行う前に、行列サイズの小さい1-char NFA記述行列を生成し、生成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char 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記述行列に変換する。NFA記述行列の各行と各列はそれぞれ有限オートマトンの状態に対応している。行列サイズを小さくすることは行列の一部の行、又は、列を削除することを示す。行列の行、又は、列の一部を削除することは、記述行列へと変換する前の有限オートマトンにおいては、一部の状態を削除していることと等価である。即ち、本発明において、行列サイズを縮小した1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことは、有限オートマトンの状態数を削減した記述行列を作成した上で当該演算を行うことに相当する。従って、本発明では、multi-char NFA記述行列を求める際の演算において、有限オートマトンの状態数を削減することができる。
【０１６７】  尚、本発明は上述した実施例のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【０１６８】  この出願は、２００８年６月４日に出願された日本出願特願２００８―１４６９０９を基礎とする優先権を主張し、その開示のすべてをここに取り込む。
【産業上の利用可能性】
【０１６９】  本発明の活用例として、正規表現を用いたパターンマッチング処理を行うためのNFA回路を記述したHDL生成システムや、生成プログラム等の用途に適用することができる。また、本発明を用いて生成したHDLを用いてNFA回路を構成することで、正規表現を用いた高速なパターンマッチング処理を行うためのパターンマッチング装置等の用途に適用することができる。さらに、パターンマッチング装置にパケット処理回路を加えることで、ネットワーク侵入検知システム（NIDS: Network Intrusion Detection System）や、ネットワーク侵入防止システム（NIPS: Network Intrusion Prevention System）に対しても適用することができる。また、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理の代替となるハードウェアアクセラレータ用NFA回路生成システム、生成プログラムを格納する記録媒体、正規表現検索ハードウェアアクセラレータ装置等に対しても適用することができる。
【符号の説明】
【０１７０】  １１：入力装置、  １２：データ処理装置、  １３：出力装置、  １２１：1-char NFA生成手段、  １２２：1-char NFA記述行列生成手段、  １２３：multi-char NFA記述行列生成手段、  １２４：multi-char NFA生成手段、  １２５：HDL変換手段、  １４：データ処理装置（実施の形態２）、  １５：正規表現―HDL変換プログラム、  １６：データ処理装置（実施の形態３）、  １６１：コンフィグレーションデータ変換手段、  １６２：記憶装置、  １６３：コンフィグレーションデータ記憶部、  １６４：コンフィグレーション装置、  １７：パターンマッチング装置、  １７１：データ入力部、  １７２：パターンマッチング部、  １７３：結果出力部、  １７４：データ入力装置、  １７５：結果出力装置、  ２００〜２０４：レジスタ、  ３００〜３０４：各文字を比較する比較器、  ４００〜４０４：ＡＮＤゲート、  ５００〜５０２：ＯＲゲート
【図１】
0005429164.tif 000003
【図２】
0005429164.tif 000004
【図３】
0005429164.tif 000005
【図４】
0005429164.tif 000006
【図５】
0005429164.tif 000007
【図６】
0005429164.tif 000008
【図７】
0005429164.tif 000009
【図８】
0005429164.tif 000010
【図９】
0005429164.tif 000011
【図１０】
0005429164.tif 000012
【図１１】
0005429164.tif 000013
【図１２】
0005429164.tif 000014
【図１３】
0005429164.tif 000015
【図１４】
0005429164.tif 000016
【図１５】
0005429164.tif 000017
【図１６】
0005429164.tif 000018
【図１７】
0005429164.tif 000019
【図１８】
0005429164.tif 000020
【図１９】
0005429164.tif 000021
【図２０】
0005429164.tif 000022
【図２１】
0005429164.tif 000023
【図２２】
0005429164.tif 000024
【図２３】
0005429164.tif 000025
【図２４】
0005429164.tif 000026
【図２５】
0005429164.tif 000027
【図２６】
0005429164.tif 000028
【図２７】
0005429164.tif 000029
【図２８】
0005429164.tif 000030
【図２９】
0005429164.tif 000031
【図３０】
0005429164.tif 000032
【図３１】
0005429164.tif 000033
【図３２】
0005429164.tif 000034