(57)【特許請求の範囲】
【請求項１】
照合条件を表す正規表現から構成したNFAを回路化した文字列照合回路であって、
正規表現に含まれる部分表現のうち、指定文字cの繰り返し回数Nを指定した正規表現は、照合対象文字とマッチ情報入力とを入力に持ち、マッチ情報出力を出力に持つc{N}-NFA回路によって回路化されており、且つ、前記c{N}-NFA回路は、入力された照合対象文字と指定文字との連続一致回数を数えるカウンタと、連続一致回数が指定繰り返し回数Nに達したか否かを判定する判定回路とを含むことを特徴とする文字列照合回路。
【請求項２】
請求項１に記載の文字列照合回路において、前記c{N}-NFA回路は、前記マッチ情報入力を指定繰り返し回数Nの文字が入力されるのに要する時間だけ遅延させるマッチ情報タイミング調整部と、前記マッチ情報タイミング調整部で遅延させた前記マッチ情報入力と前記判定回路の判定結果とを入力し前記マッチ情報出力を出力するマッチ情報出力部とを備えることを特徴とする文字列照合回路。
【請求項３】
請求項２に記載の文字列照合回路において、前記マッチ情報タイミング調整部は、前記マッチ情報入力を記憶するメモリと、前記メモリの書き込みアドレスを生成する書き込みアドレス生成部と、前記書き込みアドレス生成部が生成する書き込みアドレスよりも繰り返し回数N分だけ遅らせた読み出しアドレスを生成する読み出しアドレス生成部とを含むことを特徴とする文字列照合回路。
【請求項４】
請求項１に記載の文字列照合回路において、前記c{N}-NFA回路は、前記マッチ情報入力を保持する記憶素子を備え、前記カウンタは、入力された照合対象文字と指定回数の繰り返しに対応する状態の着目文字が一致し且つ前記記憶素子に保持されたマッチ情報入力がマッチしたことを示す値となる場合に連続一致回数のカウントを開始し、前記連続一致回数のカウント開始後は、入力された照合対象文字と指定回数の繰り返しに対応する状態の着目文字が一致する場合にカウントアップし、入力された照合対象文字と指定回数の繰り返しに対応する状態の着目文字が一致しなかった場合は連続一致回数のカウントをリセットすることを特徴とする文字列照合回路。
【請求項５】
請求項４に記載の文字列照合回路において、前記連続一致回数を数えるカウンタが、連続一致回数が前記指定繰り返し回数Nに達した場合に、連続一致回数のカウントをリセットすることを特徴とする文字列照合回路。
【請求項６】
請求項４に記載の文字列照合回路において、前記連続一致回数を数えるカウンタが、連続一致回数が前記指定繰り返し回数Nに達した場合に、連続一致回数のカウントを前記指定繰り返し回数Nで保持することを特徴とする文字列照合回路。
【請求項７】
照合条件を表す正規表現から構成したNFAを回路化した文字列照合回路であって、
正規表現に含まれる部分表現のうち、指定文字cの繰り返し回数N以上を指定した正規表現は、請求項１乃至請求項６の何れか１項に記載された前記c{N}-NFA回路と、前記c{N}-NFA回路から出力されるマッチ情報出力と照合対象文字とを入力に持ち、マッチ情報出力を出力に持つc*-NFA回路とを連結した回路によって回路化されていることを特徴とする文字列照合回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、有限オートマトンを用いた文字列照合回路に関し、特に特定文字の指定回数繰り返しを含む正規表現を利用した文字列照合回路に関する。
【背景技術】
【０００２】
高度な文字列照合を行う場合、照合条件の指定方法として正規表現が利用されることが多い。正規表現による文字列照合処理では有限オートマトン（Finite Automaton）と呼ばれる状態遷移マシンが用いられる。文字列照合処理では、まず指定された照合条件を有限オートマトンに変換し、変換された有限オートマトンを用いて文字列照合処理を実行する。
【０００３】
文字列照合用の有限オートマトンとして、ある一つの状態から同じ文字に対して複数の遷移先を許す非決定性オートマトン（NFA；Non-deterministic Finite Automaton）を用いる方法、もしくは決定性オートマトン（DFA；Deterministic Finite Automaton）を用いる方法がある。具体的には、NFAは、非特許文献１に記載されているように、与えられた正規表現等の照合条件から構文木を構築し、これに基づいて生成することができる。また、DFAはNFAを用いて生成することができる。
【０００４】
正規表現による文字列照合処理を行う際には、まず指定された照合条件を有限オートマトンに変換し、変換された有限オートマトンを用いて文字列照合処理を実行する。状態遷移は、有限オートマトンの初期状態から開始され、終了状態に達すると入力された文字列が該当正規表現にマッチしたと判断する。
【０００５】
一般に、ソフトウェアにおける文字列照合処理では、NFAやDFA等の状態をメモリに保存し、状態が遷移する度に、状態に関する情報をメモリから取り出しながら文字列照合処理を行う。この際、NFAではある入力文字に対するある状態からの遷移先として複数の状態が存在するため、どの状態へ遷移すれば正しい結果が得られるか判断できず、ひとまずいずれかの状態に遷移して処理を進め、失敗した場合にはまだ処理を行っていない状態に戻って処理を進めるというバックトラック処理が必要となる。
【０００６】
一方、DFAではある入力文字に対するある状態からの遷移先が一つしかないことから、NFAよりも高速に処理が可能であるという利点がある反面、NFAよりも状態数が増加し、多くのメモリ容量が必要となるという欠点がある。
【０００７】
こうしたソフトウェアにおける文字列照合処理の問題を解決するために、近年、ハードウェア回路にNFAを直接組み込むことにより、その並列動作による高速性を生かし、NFAを用いた高速な文字列照合を実現する方法が提案されている（非特許文献２）。以下、NFAをハードウェア回路に直接埋め込んだ回路を「NFA論理回路」と呼ぶこととする。
【０００８】
非特許文献２で提案されている、NFAをハードウェア回路に直接埋め込む方式の詳細について以下に説明する。
【０００９】
最初に、正規表現からNFAへの変換手法について説明する。
【００１０】
正規表現は、「文字」（その文字自身にマッチする）、「連結」XY（XとYがこの順序で現れる）、「選択」X|Y（XかYが現れる）、「繰り返し」X*（Xが0回以上現れる）の4種類の基本パターンで表現することができる。正規表現の記法には種々のバリエーションが存在するものの、任意の正規表現は、前記の4種類の基本パターンを再帰的に組み合わせること、より具体的には文字自身にマッチする「文字」を「連結」「選択」「繰り返し」を用いて再帰的に組み合わせること、で表現可能である。
【００１１】
正規表現からNFAへの変換は、前記の4種類の基本パターンを図１５に示すNFAに割り当てることで実現できる。正規表現N1、N2に対して、図１５の(a)、(b)、(c)、(d)は、それぞれ、文字cに対するNFA、N1|N2に対するNFA、N1N2に対するNFA、N1*に対するNFAを示している。なお、図中のεはある状態から入力を読み込まずに別の状態へ遷移するε遷移（ε-transition）を示し、図中のI、FはそれぞれNFAの初期状態、終了状態を示している。
【００１２】
次に、NFAをハードウェア回路に直接埋め込む方法について説明する。本方法は非特許文献２において開示されている方法である。
【００１３】
NFAからハードウェアに埋め込む回路への変換は、正規表現を実現するために必要な前記のNFAの4種類の基本パターンと変換後のNFA論理回路を一対一に対応づけることで行う。具体的な対応関係を図１６に示す。図１６の(a)、(b)、(c)、(d)は、それぞれ図１５に示したNFAの基本パターン(a)、(b)、(c)、(d)の基本パターンに対応しており、図１５と同様、これら4つのパターンを再帰的に組み合わせることで全ての正規表現をNFA論理回路に変換することができる。図１６(a)は、文字cに対するNFA論理回路であり、任意の正規表現は文字cへのマッチを表す基本NFA論理回路(a)を、(b)(c)(d)の接続パターンを再帰的に用いて接続することで実現することができる。
【００１４】
図１６の(a)は、NFAをハードウェア回路に埋め込む方式の基本となる回路であり、これを基本エレメントと呼ぶ。基本エレメントはNFAの各状態を表すために使用される。
【００１５】
基本エレメントは、NFAの当該状態がアクティブであることを示す1つのFlip-Flop（F/F）、入力されたテキスト文字と状態遷移の条件となる文字との比較を行うcomparator、Flip-Flopとcomparatorの出力の論理積をとるANDゲートの3つの要素から構成される。基本エレメントの構成を図１７に示す。内容は図１６(a)と全く同じである。正規表現からNFA論理回路への詳細な変換手順については、非特許文献2に記載されている。
【００１６】
図１７のinputは、当該状態の前状態のoutputから入力される信号線であり、前の状態のoutput信号を当該状態のF/Fに保持し、F/Fの値が‘1’であれば当該状態がアクティブであることを示す。comparatorには、予めその状態から次の状態への遷移条件である文字が格納されている。comparatorは、照合対象文字列から入力された1文字との比較を行い、比較した結果がマッチ（同じ文字）していれば‘1’を、マッチしなければ（異なる文字であれば）‘0’を出力する。比較対象文字列のどの位置にある文字においても比較を行う必要があるため、comparatorに入力されるテキスト文字は全ての基本エレメント中のcomparatorに入力される。今、F/Fが‘1’、かつ、comparatorからの出力が‘1’である場合、NFAの状態遷移が起動を意味し、それらのANDを取った出力outputも‘1’となり次の状態のF/Fへ入力される。このような動作により、基本エレメントはNFAの1つの状態としての機能をもつ。
【００１７】
図１７の基本エレメントは以下の説明においても使用するため、以下の説明においては図１８に示す簡略表記で表記する。図１８の四角形の中央に記載の文字‘c’は、この基本エレメントの状態遷移の条件文字が‘c’であることを示す。
【００１８】
前記変換により得られたNFA論理回路の例を図１９に示す。図１９は、正規表現“(a|b)*cd”をNFA論理回路に変換した場合の例である。点線枠４１，４２，４３、４４がそれぞれ文字‘a’,‘b’,‘c’,‘d’に対する比較を行う基本エレメントであり、点線枠４５，４６，４７，４８は、それぞれ（aとbの）選択、（(a|b)の）繰り返し、（cとdの）連結、（(a|b)*とcdの）連結の基本パターンに対応している。尚、NFA論理回路はクロックに同期して動作する順序回路であり、図１９の”text character”には、照合対象文字列がクロック毎に先頭から順番に1文字ずつ入力される。
【００１９】
正規表現の部分表現はいずれも図２０に示すように、照合対象文字５１とマッチ情報入力５２を入力に持ち、マッチ情報出力５３を出力に持つ。例えば、図１９の枠49-1内は、正規表現“(a|b)*cd”の部分表現“(a|b)”を表しており、照合対象文字５１の入力は図１９の最下部に記載の“Text character”に対応する。マッチ情報入力５２、マッチ情報出力５３には、それぞれ点線枠４５から枠４９−１に入力される信号線、枠４９−１から点線枠４５へ出力される信号線が対応する。同様に、枠４９−２内は正規表現“(a|b)*cd”の部分表現“(a|b)*”を表しており、枠４９−２の回路も図２０に示す入出力信号を持つ。
【００２０】
次に、NFAをハードウェア回路に直接埋め込む方式において、特定文字の繰り返し回数を指定した正規表現を表現する従来技術について述べる。
【００２１】
正規表現では、前記の基本要素だけでなく、特定文字の繰り返し回数を指定した表現が可能である。“ｃ｛ｍｉｎ，ｍａｘ｝”という正規表現は、文字cのmin回以上max回以下の繰り返しを表す。繰り返し回数指定の派生として、“ｃ｛ｎ｝”、“ｃ｛ｍｉｎ，｝”、“ｃ｛，ｍａｘ｝”という表現もあり、それぞれ“ｃ｛ｎ｝”は文字cのn回繰り返し、“ｃ｛ｍｉｎ，｝”は文字cのmin回以上の繰り返し、”ｃ｛，ｍａｘ｝”は文字cの0回以上max回以下の繰り返しを表す。
【００２２】
繰り返し回数指定の正規表現は、前記の基本要素の組み合わせで実現することが可能であり、この方式でのNFAのハードウェア回路埋め込み方式での実現方法が非特許文献3の33ページに記載されている。非特許文献3のFigure.12は正規表現“．｛３，｝ａ”（任意の一文字の3回以上の繰り返しに文字aが続く）の実現方法であり、Figure.13は正規表現“ａ．｛，２｝ｂ”（文字aの後に、任意の一文字の2回以下の繰り返しがあり、文字bが続く）の実現方法である。
【００２３】
【非特許文献１】近藤嘉雪、定本Cプログラマのためのアルゴリズムとデータ構造、297〜330ページ、1998年
【非特許文献２】R.Sidhu and V.K.Prasanna,“Fast Regular Expression Matching using FPGAs,”Proceedings of IEEE Symposium on Field-Programmable Custom Computing Machines,pp.Apr.2001.
【非特許文献３】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を直接埋め込んで文字列照合を行う方法で、ｃ｛ｍｉｎ，ｍａｘ｝を実現する場合、以下のような問題がある。
【００２５】
第1の問題点は、文字の繰り返し回数が多くなると、実現に必要なハードウェアの回路規模が大きくなってしまうということである。
【００２６】
非特許文献３に記載の方法で、例えば正規表現“BA{４}C”（Bの後に、文字Aの４回繰り返しが続き、さらにCが続く）を実現すると、図２１に示すNFAと図２２に示すNFA論理回路となる。図２２の８１〜８６はいずれも図１８に示す基本エレメントである。ここでは、繰り返し回数指定の“A{4}”を“AAAA”に展開し、展開した“AAAA”に対するNFAを構築し、構築したNFAからNFA論理回路に変換している。このように、非特許文献３に記載の方法では、文字の繰り返し回数（“A{4}”の例では4）と等しい数だけ、基本エレメントが必要となる。
【００２７】
NFAをハードウェアに直接埋め込む形の文字列照合回路の適用例の一つであるネットワーク侵入検知システムにおける文字列照合ルールでは、文字の繰り返し回数が100回以上など、繰り返し回数が非常に多い例も見られる。例えば、侵入検知システムの一つであるSnortのルールセットには“^http://[^\n]{400}”といった正規表現も含まれている。この表現は、”http://”という文字列の後に改行文字以外の一文字を400回繰り返すことを表している。
【００２８】
第2の問題点は、このように繰り返し回数が非常に多い正規表現があると、繰り返し回数が非常に多い表現が数個あるだけで、回路規模が大きくなってしまい、全体としてハードウェアに収容可能な正規表現の数が減ってしまうことである。
【００２９】
本発明の目的は、NFAをハードウェアに直接埋め込む形の文字列照合回路において、文字の繰り返し回数の大きい正規表現を少ない回路規模で効率的に実現することにある。
【課題を解決するための手段】
【００３０】
本発明の文字列照合回路は、照合条件を表す正規表現から構成したNFAを回路化した文字列照合回路であって、正規表現に含まれる部分表現のうち、指定文字cの繰り返し回数Nを指定した正規表現は、照合対象文字とマッチ情報入力とを入力に持ち、マッチ情報出力を出力に持つc{N}-NFA回路によって回路化されており、且つ、前記c{N}-NFA回路は、入力された照合対象文字と指定文字との連続一致回数を数えるカウンタと、連続一致回数が指定繰り返し回数Nに達したか否かを判定する判定回路とを含む。
【発明の効果】
【００３１】
第１の効果は、NFAをハードウェアに直接埋め込む形の文字列照合回路において、文字の繰り返し回数の大きい正規表現を、従来技術に比べ数％の回路規模で実現することができることである。
【００３２】
その理由は、文字の繰り返し回数と等しい数だけ、特定文字との文字列照合を行う基本エレメントを繰り返し回数と同じ個数だけ配備する代わりに、入力された照合対象文字が前記特定文字と連続して一致する回数をカウントすることにより判定する回路で実現しているためである。詳細な回路規模削減効果については、発明を実施するための最良の形態の説明の最後に述べる。
【００３３】
第２の効果は、特定文字の繰り返し回数が非常に多い正規表現がある場合であっても、全体の回路規模が前記繰り返し回数の非常に多い表現の影響を受けにくく、全体としてハードウェアに収容可能な正規表現の数が増えることである。
【００３４】
その理由は、第１の効果に記載の通り、文字の繰り返し回数の大きい正規表現が、従来技術に比べ数％の回路規模という小さな回路規模で実現できるためである。
【００３５】
このように本発明によれば、文字の繰り返し回数の大きい正規表現を少ない回路規模で効率的に実現することで、同じ回路規模のデバイスにおいて、より多数の正規表現を収容することが可能となり、NFAをハードウェアに直接埋め込む形の文字列照合回路の高機能化が実現可能となる。また、同じ数の正規表現をより少ない回路規模のデバイスにおいて収容することが可能となり、ハードウェアデバイスの小型化が達成可能となる。
【発明を実施するための最良の形態】
【００３６】
『第一の実施の形態』
次に、本発明の第一の実施の形態について図面を参照して詳細に説明する。
【００３７】
［構成の説明］
図１は、本発明の第一の実施の形態の構成を示すブロック図である。
【００３８】
図１を参照すると、本発明の第一の実施の形態は、照合対象文字列入力部２１０と、NFAをハードウェアに埋め込んだNFA論理回路２００と、マッチ結果出力部２１１とから構成される。
【００３９】
さらに、NFA論理回路２００は、c{N}-NFA論理回路１００および基本エレメント４０−１、４０−２より構成される。NFA論理回路２００を構成する基本エレメント４０とc{N}-NFA論理回路１００の個数および接続は、照合パターンとして指定される正規表現により変化する。基本エレメント４０−１、４０−２やc{N}-NFA論理回路１００間でやり取りされる中間マッチ情報（２０８，２０９・・・）の接続は、図１６に示した基本パターン(b)(c)(d)を再帰的に用いて行われる。基本エレメント４０−１、４０−２は、比較対象の文字が異なるのみであり、構成は図１８の基本エレメント４０と同一である。
【００４０】
図１は、正規表現“BA{4}C”の場合のNFA論理回路２００の構成を例として記載しており、図１のNFA論理回路２００は、対象文字‘B’の基本エレメント４０−１、文字’A’の4回繰り返しに対応するc{N}-NFA論理回路１００、対象文字‘C’の基本エレメント４０−２が順に接続された構成となっている。それぞれの基本エレメント４０−１、c{N}-NFA論理回路１００、基本エレメント４０−２が図１に記載の通り、部分正規表現“B”、”A{4}”、“C”に対応する。
【００４１】
NFA論理回路２００を構成する基本エレメント４０とc{N}-NFA論理回路１００の個数および接続を決定する方法は、従来技術を下記のように拡張することで実現可能である。従来技術では、正規表現からNFAへの変換を図１５に示すNFAの基本パターンに割り当てることで実現し、前記基本パターンをNFA論理回路に一対一に対応づけることでNFAをハードウェア回路に埋め込むことを実現していた。本発明では、従来技術である基本エレメント４０に加え、文字cのN回繰り返しを表す正規表現にマッチするNFA論理回路であるc{N}-NFA論理回路１００を追加している。正規表現からNFAに変換する際に、文字cのN回繰り返しを表す正規表現“c{N}”に対応する基本パターンを導入し、指定された正規表現中に含まれる文字cのN回繰り返しを表す正規表現“c{N}”を前記の新規に導入した基本パターンに割り当て、さらにNFAをハードウェア回路に埋め込む際に前記の新規に導入した基本パターンをc{N}-NFA論理回路１００に対応づけることで、NFA論理回路２００を構成する基本エレメント４０とc{N}-NFA論理回路１００の個数および接続を決定することができる。
【００４２】
本発明の第一の実施の形態の回路は、外部より入力されるクロックに同期して動作する同期回路である。以下の説明および図ではクロック信号を入力信号として特に記載しない。
【００４３】
照合対象文字列入力部２１０は、照合対象文字列を構成する文字を先頭から順番に照合対象文字８０として出力する。照合対象文字８０はクロック毎に次の文字に更新される。照合対象文字列入力部２１０から出力された照合対象文字列は、NFA論理回路２００内の全ての基本エレメント４０やc{N}-NFA論理回路１００に入力される。
【００４４】
基本エレメント４０−１，４０−２やc{N}-NFA論理回路１００から出力された中間マッチ情報（２０８、２０９など）は、正規表現より構成されるNFAに基づいて、図１６に示す基本接続パターン(b)(c)(d)に基づいて接続され、NFAの次の状態を表す構成要素（基本エレメント４０またはc{N}-NFA論理回路１００）に入力される。NFAの最後の状態に対応する構成要素（基本エレメント４０−１、４０−２またはc{N}-NFA論理回路１００）から最終マッチ結果８９が出力され、マッチ結果出力部２１１によりマッチ結果として外部に出力される。
【００４５】
正規表現“c{N}”の定義では、N≧0であるが、以下の説明では、繰り返し回数Nは自然数とする。N=0の場合、正規表現“c{0}”は文字‘c’の0回繰り返しであり、該当正規表現は存在する必要がないことになり、例えば正規表現“BA{0}C”は正規表現“BC”と等価であり、0回の繰り返し正規表現を削除することで効率的なNFA論理回路を生成することができる。
【００４６】
次に、c{N}-NFA論理回路１００について詳細に説明する。
【００４７】
c{N}-NFA論理回路１００は、文字cのN回繰り返しを表す正規表現にマッチするNFA論理回路である。以下の説明で「c{N}-NFA論理回路１００の着目文字」と記載した場合、c{N}-NFA論理回路１００の繰り返し文字cを意味することとする。なお、文字cと繰り返し回数Nは、c{N}-NFA論理回路１００作成時に指定されるパラメータである。
【００４８】
＜c{N}-NFA論理回路タイプ選択フロー＞
c{N}-NFA論理回路１００の具体的な構成は、タイプＡ、タイプＢ、タイプＣ、従来技術利用の4通りがある。
【００４９】
4通りの具体的な構成のうち、いずれの構成を使用するかは、指定された正規表現に応じて、図２に示すタイプ選択フローに基づいて決定する。
【００５０】
図２のタイプ選択フローについて具体的に説明する前に、図２で使用する用語「プレフィックス構成文字」を定義する。指定された正規表現のうち、処理対象となっている繰り返し正規表現“c{N}”より前の部分を「プレフィックス正規表現」と定義し、前記プレフィックス正規表現にマッチする可能性がある文字の集合を「プレフィックス構成文字」と定義する。プレフィックス正規表現全体を対象としてプレフィックス構成文字を求めることもできるが、以降の説明では簡単のため、プレフィックス正規表現のうち、処理対象となっている繰り返し正規表現“c{N}”の直前の1文字をプレフィックス構成文字として使用する。
【００５１】
プレフィックス構成文字の具体例を図３に示す。処理対象となっている繰り返し正規表現“c{N}”はいずれも“X{3}”である。項番１では、プレフィックス正規表現が”ab”であり、文字aと文字bの連結なので、プレフィクス正規表現にマッチする最後の文字はbだけであり、プレフィックス構成文字はbとなる。項番２ではプレフィックス正規表現は“[abc]”であり、これは文字aまたはbまたはcを示すので、プレフィックス構成文字は文字a,b,cの集合となる。項番３ではプレフィクス正規表現は”ab*”である。この場合、プレフィクス正規表現にマッチする文字列は“a”,“ab”,“abb”,”abbb”のようになるので、プレフィックス正規表現にマッチする最後の文字はaまたはbであり、プレフィックス構成文字は文字a,bの集合となる。項番４は、指定された正規表現の先頭に繰り返し正規表現がある場合である。この場合は、プレフィクス正規表現は空文字列となる。繰り返し正規表現が先頭にあるということは、繰り返し正規表現にマッチする文字列（文字Xの3回繰り返し）の前にどんな文字があってもよいということになるので、プレフィックス正規表現は「文字全体」となる。項番５はプレフィックス正規表現にマッチする文字列の最小長が0となる場合である。項番５では、プレフィックス正規表現は”a*”であり、文字aの0回以上の繰り返しである。0回以上の繰り返しということは、文字aがない場合でもよいということであり、繰り返し正規表現にマッチする文字列（文字Xの3回繰り返し）の前にどんな文字があってもよいということになる。項番４と同じ理由でプレフィックス正規表現は「文字全体」となる。
【００５２】
上記の定義に基づき、c{N}-NFA論理回路１００の具体的な構成を決定するタイプ選択フローについて図２を用いて説明する。タイプ選択フローは、c{N}-NFA論理回路の着目文字とプレフィックス構成文字が得られた状態から開始する。最初にステップ４０１にて「プレフィックス構成文字∩着目文字＝Φか？」を判定する。この処理は、プレフィックス構成文字と着目文字に共通する文字がない場合に真、ある場合に偽となる。判定結果が偽の場合はステップ４０３に進み、真の場合にはステップ４０２に進む。ステップ４０２ではc{N}-NFA論理回路タイプＢ２０２を仮選択し、ステップ４０６に進む。ステップ４０１での判定結果が真となる例としては、指定された正規表現が”[ab][cd]{3}”の場合がある。この例では、プレフィックス構成文字の文字集合がa,bであり、着目文字の文字集合がc,dである。したがって、プレフィックス構成文字と着目文字に共通する文字が存在せず、判定結果は真となる。一方、ステップ４０１での判定結果が偽となる例として、指定された正規表現が”[ab][ac]{3}”の場合には、プレフィックス構成文字の文字集合がa,bであり、着目文字の文字集合がa,cである。したがって、プレフィックス構成文字と着目文字に共通する文字aが存在し、判定結果は偽となる。
【００５３】
ステップ４０３では「プレフィックス構成文字⊇着目文字か？」を判定する。この処理は、着目文字の集合に入っている文字がすべてプレフィックス構成文字に含まれるかどうかを判定するもので、すべて含まれている場合には真、そうでない場合に偽となる。判定結果が偽の場合はステップ４０５に進み、真の場合にはステップ４０４に進む。ステップ４０４ではc{N}-NFA論理回路タイプＣ２０３を仮選択し、ステップ４０６に進む。ステップ４０５ではc{N}-NFA論理回路タイプＡ２０１を仮選択し、ステップ４０６に進む。
【００５４】
ステップ４０６では、仮選択したc{N}-NFA論理回路のタイプが従来構成よりも有利かどうかを判定する。従来構成とは、発明が解決しようとする課題で挙げた非特許文献３に記載の方法を適用した場合の構成であり、繰り返し正規表現を個々の基本エレメントに展開した構成である。従来構成よりも有利かどうかの判定方法としては、論理回路を構成するのに必要なデバイス回路規模で比較し、仮選択したタイプのc{N}-NFA論理回路を用いた方が従来技術を利用した場合に比べ回路規模が小さくなる場合に有利であると判定する方法がある。回路規模を算出する方法については、本発明の回路規模削減効果について述べた箇所において説明している。他の判定方法としては、繰り返し回数Ｎが閾値以上の場合には仮選択したタイプのc{N}-NFA論理回路を用い、そうでない場合には従来技術利用型を選択する、といった判定方法もある。専用のc{N}-NFA論理回路を使用した方が有利かどうかを判定できる方法であれば、他の判定方法を用いてもよい。ステップ４０６において、従来構成に比べ有利と判定された場合にはステップ４０８に進み、仮選択したタイプのc{N}-NFA論理回路を最終的な選択タイプとして選択する。一方、ステップ４０６において、従来構成の方が有利と判定された場合にはステップ４０７に進み、c{N}-NFA論理回路のタイプとして従来技術利用型２０４を選択する。
【００５５】
以上の処理により、c{N}-NFA論理回路１００の具体的な構成を決定できる。タイプ選択フローは指定された正規表現内の各々の繰り返し正規表現についてそれぞれ実行し、繰り返し正規表現毎に最適な具体的なタイプを選択する。
【００５６】
＜c{N}-NFA論理回路１００の内部構成＞
次に、c{N}-NFA論理回路１００の各タイプである、タイプＡ、タイプＢ、タイプＣ、従来技術利用型の内部構成について説明する。
【００５７】
＜タイプA＞
最初に、c{N}-NFA論理回路タイプＡ２０１の内部構成について図４を参照して説明する。
【００５８】
c{N}-NFA論理回路タイプＡ２０１は、連続一致回数カウント部１１０と、マッチ情報タイミング調整部１２０と、マッチ情報出力部１３０とを含む。
【００５９】
c{N}-NFA論理回路タイプＡ２０１は、照合対象文字１０１とマッチ情報入力１０２の入力を受け、マッチ情報出力１０３を出力する。背景技術の説明で述べたように、正規表現の部分表現はいずれも図２０に示すように、照合対象文字５１とマッチ情報入力５２を入力に持ち、マッチ情報出力５３を出力に持つ。文字cのN回繰り返しを表す正規表現も正規表現の部分表現なので、入力信号である照合対象文字１０１とマッチ情報入力１０２はそれぞれ図２０の照合対象文字５１とマッチ情報入力５２に対応し、出力信号であるマッチ情報出力１０３は図２０のマッチ情報出力５３に対応する。
【００６０】
連続一致回数カウント部１１０の状態遷移マシンを図５に示す。状態３１１、３１２、３１３，３１４の4つの状態が定義されている。本状態遷移マシンは外部からクロックが入力されるたびに動作するが、枠が点線の状態３１２は説明のための中間状態であり、他の状態から遷移があった際にはクロック入力を待たずに直ちに条件判定を行い、他の状態に遷移する。したがって、本発明の回路にクロックが入力される時点では、他の３状態（３１１，３１３，３１４）のいずれかの状態に状態遷移マシンはいることになる。動作開始時には、状態遷移マシンはＩｄｌｅ状態３１１から開始する。本状態遷移マシンは以下のように動作する。
【００６１】
Ｉｄｌｅ状態３１１にいる場合には、入力された照合対象文字１０１が着目文字と一致していればＡｃｃｅｐｔ状態３１２に遷移する（３１０−２）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1にセットする。一致しない場合にはＩｄｌｅ状態３１１にとどまる（３１０−１）。Ａｃｃｅｐｔ状態３１２では、他の状態から遷移があるとクロック入力を待たずに直ちに遷移を行う。ＭａｔｃｈＣｏｕｎｔが繰り返し回数Nと等しい場合にはＭａｔｃｈ状態３１４に遷移し（３１０―６）、N未満の場合にはＲｕｎｎｉｎｇ状態３１３に遷移する（３１０−３）。Ｒｕｎｎｉｎｇ状態３１３では、入力された照合対象文字１０１が着目文字と一致していればＡｃｃｅｐｔ状態３１２に遷移する（３１０−４）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1増やす。一致しない場合にはＩｄｌｅ状態３１１に遷移する（３１０−５）。Ｍａｔｃｈ状態３１４では、入力された照合対象文字１０１が着目文字と一致していればＭａｔｃｈ状態３１４にとどまる（３１０−７）。一致しない場合にはＩｄｌｅ状態３１１に遷移する（３１０−８）。本状態遷移マシンがＭａｔｃｈ状態３１４に遷移したクロックサイクル、つまり遷移３１０−６または３１０−７が行われたクロックサイクルで、連続一致判定結果１１８として１が出力される。それ以外のクロックサイクルでは連続一致判定結果１１８として０が出力される。
【００６２】
図４の連続一致回数カウント部１１０の内部構成は、図５に示す状態遷移マシンの動作を行う連続一致回数カウント部１１０の構成の一例である。後述するＮＦＡ論理回路の回路規模の説明に使用するため、ここに構成例を記載する。外部より照合対象文字１０１が入力されると、比較器１１１において、照合対象文字１０１とc{N}-NFA論理回路タイプＡ２０１の着目文字cを比較し、比較結果１１５を出力する。比較結果１１５は、照合対象文字１０１とc{N}-NFA論理回路タイプＡ２０１の着目文字cが等しい場合に1、異なる場合に0となる。次に、連続一致カウント部１１２は、比較結果１１５が何回連続で1であったかを、比較結果１１５と前回一致回数１１７に基づいて計算し、一致回数１１６として出力する。F/F１１４は、一致回数１１６を保持し、その値を前回一致回数１１７として出力するクロック同期のFlip Flopである。連続一致判定部１１３は、連続一致カウント部１１２より出力された一致回数１１６が、繰り返し回数Nに達しているかどうかを判定し、連続一致判定結果１１８を出力する。連続一致判定結果１１８は一致回数１１６と繰り返し回数Nが等しい場合に１、それ以外の場合は0となる。
【００６３】
マッチ情報タイミング調整部１２０は、マッチ情報入力１０２を繰り返し回数であるNクロック分だけ遅延させるブロックである。外部よりマッチ情報入力１０２を受信すると、受信したマッチ情報入力１０２を書き込みデータ１２５として、メモリ１２３の、書き込みアドレス生成部１２１より指示された書き込みアドレス１２４の位置に格納する。一方、読み出しアドレス生成部１２２は、常に書き込みアドレス生成部１２１が生成する書き込みアドレス１２４よりもNアドレス分遅れた読み出しアドレス１２６を生成し、メモリ１２３から読み出しデータ１２７を取得し、マッチ情報出力部１３０に対して出力する。書き込みアドレス１２４よりも読み出しアドレス１２６を繰り返し回数N分だけ遅らせることで、Nクロック分の遅延を実現する。
【００６４】
メモリ１２３は、データ幅1ビット、ワード数は（N+1）以上のメモリである。マッチ情報入力１０２は1ビット幅のデータのため、データ幅は1ビットで十分である。また、マッチ情報タイミング調整部１２０は、外部より受信したマッチ情報入力１０２を繰り返し回数であるNクロック分だけ遅延させるブロックなので、N+1個の記憶領域が必要であり、ワード数として最低（N＋1）ワードが必要である。
【００６５】
マッチ情報出力部１３０は、連続一致回数カウント部１１０から出力される連続一致判定結果１１８と、マッチ情報タイミング調整部１２０から出力される読み出しデータ１２７を受信し、これらの論理積（AND）を計算し、マッチ情報出力１０３として出力する。
【００６６】
ここで、メモリ１２３の実現方法について述べる。NFAをハードウェア回路に埋め込む方式では、照合ルールとなる正規表現を変更できるようにするという観点から、通常、ハードウェアを実装するデバイスとして、FPGA（Field Programmable Gate Array）などの再構成可能なハードウェアが利用されることが多い。近年の大規模FPGAにはデバイス内部に512ビット程度の小さなオン・チップ・メモリが搭載されている。例えば、有力なFPGAベンダーの一つであるAltera社製FPGAのStratixでは、300〜500個程度の512ビットの小さなオン・チップ・メモリが搭載されている。この小さなオン・チップ・メモリを利用することで、メモリ１２３を実現することが可能である。
【００６７】
＜タイプB＞
次に、c{N}-NFA論理回路タイプＢ２０２について図７を参照して説明する。
【００６８】
図７を参照すると、c{N}-NFA論理回路タイプＢ２０２は、F/F３２６と状態遷移マシン３２５とから構成され、マッチ情報入力５２と照合対象文字５１を入力に持ち、マッチ情報出力５３を出力とする。状態遷移マシン３２５は、c{N}-NFA論理回路タイプＡ２０１の連続一致回数カウント部１１０に相当するブロックである。マッチ情報タイミング調整部１２０に相当するブロックは存在しない点が特徴である。メモリを必要とするマッチ情報タイミング調整部１２０が存在しないため、c{N}-NFA論理回路タイプＡ２０１と比較すると、c{N}-NFA論理回路タイプＢ２０２は実装可能な回数指定繰り返し正規表現の数がデバイスのメモリ数に依存しないというメリットがある。
【００６９】
c{N}-NFA論理回路タイプＢ２０２の状態遷移マシン３２５を図８に示す。状態３２１、３２２、３２３，３２４の４つの状態が定義されている。本状態遷移マシン３２５は外部からクロックが入力されるたびに動作するが、枠が点線の状態３２２および３２４は説明のための中間状態であり、他の状態から遷移があった際にはクロック入力を待たずに直ちに条件判定を行い、他の状態に遷移する。したがって、本発明の回路にクロックが入力される時点では、他の２状態（３２１，３２３）のいずれかの状態に状態遷移マシン３２５はいることになる。動作開始時には、状態遷移マシン３２５はＩｄｌｅ状態３２１から開始する。本状態遷移マシン３２５は以下のように動作する。
【００７０】
Ｉｄｌｅ状態３２１にいる場合には、入力された照合対象文字５１が着目文字と一致し、かつマッチ情報入力５２が１の場合、Ａｃｃｅｐｔ状態３２２に遷移する（３２０−２）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1にセットする。一致しない場合にはＩｄｌｅ状態３２１にとどまる（３２０−１）。Ａｃｃｅｐｔ状態３２２では、他の状態から遷移があるとクロック入力を待たずに直ちに遷移を行う。ＭａｔｃｈＣｏｕｎｔが繰り返し回数Ｎと等しい場合にはＭａｔｃｈ状態３２４に遷移し（３２０―６）、Ｎ未満の場合にはＲｕｎｎｉｎｇ状態３２３に遷移する（３２０−３）。Ｒｕｎｎｉｎｇ状態３２３では、入力された照合対象文字５１が着目文字と一致していればＡｃｃｅｐｔ状態３２２に遷移する（３２０−４）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1増やす。一致しない場合にはＩｄｌｅ状態３２１に遷移する（３２０−５）。Ｍａｔｃｈ状態３２４では、他の状態から遷移があるとクロック入力を待たずに直ちに、Ｉｄｌｅ状態３２１に遷移する（３２０−７）。本状態遷移マシン３２５がＭａｔｃｈ状態３２４に遷移したクロックサイクル、つまり遷移３２０−６が行われたクロックサイクルで、マッチ情報出力５３として１が出力される。それ以外のクロックサイクルではマッチ情報出力５３として０が出力される。
【００７１】
c{N}-NFA論理回路タイプＢ２０２の状態遷移マシン３２５の、c{N}-NFA論理回路タイプＡ２０１の連続一致回数カウント部１１０の状態遷移マシンとの動作上の違いは、Ｉｄｌｅ状態からＡｃｃｅｐｔ状態への遷移条件に、「マッチ情報入力５３が１」が追加されている点、Ｍａｔｃｈ状態に遷移すると無条件に直ちにＩｄｌｅ状態に遷移する点の２点である。
【００７２】
＜タイプC＞
次に、c{N}-NFA論理回路タイプＣ２０３について図１０を参照して説明する。
【００７３】
図１０を参照すると、c{N}-NFA論理回路タイプＣ２０３は、F/F３３６と状態遷移マシン３３５とから構成され、マッチ情報入力５２と照合対象文字５１を入力に持ち、マッチ情報出力５３を出力とする。c{N}-NFA論理回路タイプＢ２０２と同様の構成であり、状態遷移マシン３３５の動作のみが異なる。c{N}-NFA論理回路タイプＢ２０２と同様に、メモリを必要とするマッチ情報タイミング調整部１２０が存在しないため、c{N}-NFA論理回路タイプＡ２０１と比較すると、c{N}-NFA論理回路タイプC２０３も実装可能な回数指定繰り返し正規表現の数がデバイスのメモリ数に依存しないというメリットがある。
【００７４】
c{N}-NFA論理回路タイプＣ２０３の状態遷移マシン３３５を図１１に示す。状態３３１、３３２、３３３，３３４の４つの状態が定義されている。本状態遷移マシン３３５は外部からクロックが入力されるたびに動作するが、枠が点線の状態３３２は説明のための中間状態であり、他の状態から遷移があった際にはクロック入力を待たずに直ちに条件判定を行い、他の状態に遷移する。したがって、本発明の回路にクロックが入力される時点では、他の３状態（３３１，３３３，３３４）のいずれかの状態に状態遷移マシン３３５はいることになる。動作開始時には、状態遷移マシン３３５はＩｄｌｅ状態３３１から開始する。本状態遷移マシン３３５は以下のように動作する。
【００７５】
Ｉｄｌｅ状態３３１にいる場合には、入力された照合対象文字５１が着目文字と一致し、かつマッチ情報入力５２が１の場合、Ａｃｃｅｐｔ状態３３２に遷移する（３３０−２）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1にセットする。一致しない場合にはＩｄｌｅ状態３３１にとどまる（３３０−１）。Ａｃｃｅｐｔ状態３３２では、他の状態から遷移があるとクロック入力を待たずに直ちに遷移を行う。ＭａｔｃｈＣｏｕｎｔが繰り返し回数Ｎと等しい場合にはＭａｔｃｈ状態３３４に遷移し（３３０―６）、Ｎ未満の場合にはＲｕｎｎｉｎｇ状態３３３に遷移する（３３０−３）。Ｒｕｎｎｉｎｇ状態３３３では、入力された照合対象文字５１が着目文字と一致していればＡｃｃｅｐｔ状態３３２に遷移する（３３０−４）。遷移時に内部で保持する変数であるＭａｔｃｈＣｏｕｎｔを1増やす。一致しない場合にはＩｄｌｅ状態３３１に遷移する（３３０−５）。
【００７６】
Ｍａｔｃｈ状態３３４では、入力された照合対象文字５１が着目文字と一致していればＭａｔｃｈ状態３３４にとどまる（３３０−７）。一致しない場合にはＩｄｌｅ状態３３１に遷移する（３３０−８）。本状態遷移マシン３３５がＭａｔｃｈ状態３３４に遷移したクロックサイクル、つまり遷移３３０−６または３３０−７が行われたクロックサイクルで、マッチ情報出力５３として１が出力される。それ以外のクロックサイクルではマッチ情報出力５３として０が出力される。
【００７７】
c{N}-NFA論理回路タイプＣ２０３の状態遷移マシン３３５の、c{N}-NFA論理回路タイプＡ２０１の連続一致回数カウント部１１０の状態遷移マシンとの動作上の違いは、Ｉｄｌｅ状態からＡｃｃｅｐｔ状態への遷移条件に、「マッチ情報入力５３が１」が追加されている点である。
【００７８】
＜従来技術利用型＞
最後に、c{N}-NFA論理回路の従来技術利用型２０４の構成について述べる。従来技術利用型２０４は、発明が解決しようとする課題で挙げた非特許文献３に記載の方法を適用した場合の構成である。発明が解決しようとする課題で挙げた図２１および図２２の例では、繰り返し正規表現の“A{4}”を文字’A’に対応する基本エレメント4個の連結で構成する。つまり、繰り返し正規表現の“A{4}”に対応するＮＦＡ論理回路は、図２２の基本エレメント８２〜８５をこの順序で接続した構成となる。
【００７９】
［動作の説明］
本発明の第一の実施形態の動作について詳細に説明する。本発明で提案するc{N}-NFA論理回路タイプA２０１、タイプB２０２、タイプC２０３を使用した場合についてそれぞれ説明する。
【００８０】
＜タイプBの動作＞
最初に、c{N}-NFA論理回路タイプB２０２を使用する場合の動作について、正規表現“BA{4}C”の場合を例に説明する。
【００８１】
NFA論理回路を構成する際には、まず、図２のc{N}-NFA論理回路のタイプ選択フローにしたがって、c{N}-NFA論理回路のタイプ選択が行われる。正規表現“BA{4}C”の場合には、プレフィックス構成文字はBのみ、繰り返し正規表現A{4}の着目文字はAのみなので、ステップ４０１の判定が真となり、c{N}-NFA論理回路としてc{N}-NFA論理回路タイプB２０２が選択される。ここでは、c{N}-NFA論理回路タイプB２０２の説明を行うため、タイプB２０２の方が従来構成に比べて有利なものとし、ステップ４０６の判定は真となるものとする。
【００８２】
c{N}-NFA論理回路タイプB２０２を使用する場合、図１のNFA論理回路２００は、基本エレメント４０−１に対応する対象文字‘B’の基本エレメント４０、c{N}-NFA論理回路１００に対応する文字’A’の4回繰り返しに対応するc{N}-NFA論理回路タイプB２０２、基本エレメント４０−２に対応する対象文字‘C’の基本エレメント４０が順に接続された構成となっている。それぞれの基本エレメント４０−１、c{N}-NFA論理回路タイプB２０１、基本エレメント４０−２が図１に記載の通り部分正規表現“B”、”A{4}”、“C”にそれぞれ対応している。以降の説明では、タイプBであることを明示するため、図１のc{N}-NFA論理回路１００をc{N}-NFA論理回路タイプB２０２と表記する。
【００８３】
この場合、c{N}-NFA論理回路１００のパラメータである繰り返し回数Nは４、着目文字ｃは’A’である。
【００８４】
最初に、照合対象文字列の入力が開始される前の初期状態について説明する。
【００８５】
初期状態では、NFA論理回路２００中の全てのFlip Flopは全て０に初期化される。つまり、図１７の基本エレメント内のF/Fの値は０である。
【００８６】
また、初期状態では、c{N}-NFA論理回路タイプB２０２の状態遷移マシンの状態はIdle状態３２１である。状態遷移マシンが保持する内部変数Match Countは特に初期化されている必要はない（初期化されていてもよい）。
【００８７】
以上が、文字列照合を開始する前の初期状態である。
【００８８】
初期状態に続いて、照合対象文字列として“XBAAAACBAAAZAC”が入力された場合を例にとり、c{N}-NFA論理回路タイプB２０２を用いた場合の本発明の第一の実施の形態の動作について、図９のタイムチャートを用いて説明する。
【００８９】
図９のタイムチャートにおいて、時刻１〜１４は初期状態からのクロック数である。
【００９０】
文字‘B’にマッチする基本エレメント４０−１は、正規表現の先頭のためマッチ情報入力は常に１であり、そのため基本エレメント４０−１から出力される中間マッチ情報２０８は、入力照合対象文字８０が‘B’の場合にのみ‘1’となる（図９の２０８  中間マッチ情報の行）。
【００９１】
基本エレメント４０−１から出力された中間マッチ情報２０８は、c{N}-NFA論理回路タイプB２０２内のF/F３２６に入力され、1クロックサイクル分遅延されたＦ／Ｆ後マッチ情報入力３２７として、状態遷移マシン３２５に入力される。
【００９２】
状態遷移マシン３２５の初期状態はIdle状態３２１であり、Idle状態３２１からは「入力された照合対象文字５１が着目文字と一致し、かつＦ／Ｆ後マッチ情報入力３２７が１の場合」にAccept状態３２２に遷移する。
【００９３】
時刻１〜２の区間では、入力照合対象文字８０（c{N}-NFA論理回路タイプB２０２の入力照合対象文字５１）は着目文字‘A’ではないため、遷移条件が成立せずIdle状態３２１にとどまる。
【００９４】
時刻３では、入力照合対象文字５１が着目文字‘A’と一致し、Ｆ／Ｆ後マッチ情報入力３２７も１なので、Ｉｄｌｅ状態３２１からＡｃｃｅｐｔ状態３２２への遷移条件が成立し、Ａｃｃｅｐｔ状態３２２に遷移する。このとき、MatchCountを1に設定する。Ａｃｃｅｐｔ状態３２２での遷移判定も時刻３のうちに行われる。Accept状態３２２では、MatchCount＝１、繰り返し回数N＝４なので、Running状態３２３への遷移条件が成立し、Running状態３２３に遷移する。図９の「状態遷移マシンの状態」は、時刻３において、“Acpt”と“Run”が上下に並んで２つ記載されているが、これは“Acpt”（Accept状態３２２の略号）に遷移してから“Run”（Running状態３２３の略号）に遷移したことを示す。太字で記載されている最下段の状態がその時刻における最終的な状態であり、時刻３ではRunning状態３２３である。
【００９５】
時刻４，５では、入力照合対象文字５１が着目文字‘A’と一致するため、Running状態３２３→Accept状態３２２→Running状態３２３と状態遷移が行われる。同時にMatch Countのカウントアップも行われ、時刻５の処理終了時点でMatch Countは３となる。
【００９６】
時刻６では、入力照合対象文字５１が着目文字‘A’と一致するため、Running状態３２３からAccept状態３２２への遷移がまず行われる。同時に、Match Countもカウントアップされ、Match Count＝４となる。Accept状態３２２では、Match Count＝繰り返し回数N（＝４）なので、Match状態３２４への遷移条件が成立し、Match状態３２４への遷移が行われる。Match状態３２４からの遷移も同じ時刻６のうちに行われ、Idle状態３２１に遷移し、時刻６における状態遷移が終了する。
【００９７】
Match状態３２４への遷移が行われた時刻６において、c{N}-NFA論理回路タイプB２０２からのマッチ情報出力５３、すなわち中間マッチ情報２０９として1が出力される。
【００９８】
c{N}-NFA論理回路タイプB２０２から出力された中間マッチ情報２０９は、文字’C’を対象にマッチを行う基本エレメント４０−２に入力される。中間マッチ情報２０９は基本エレメント４０−２内のＦ／Ｆにより1クロック遅延された後、基本エレメント４０−２における入力文字比較結果と論理積がとられ、最終マッチ結果８９として、マッチ結果出力部２１１へ出力される。
【００９９】
時刻７では、c{N}-NFA論理回路タイプB２０２から出力された中間マッチ情報２０９を基本エレメント４０−２内のF/Fで1クロック遅延されたマッチ情報入力が1であり、入力照合対象文字８０も基本エレメント４０−２の着目文字で’C’と一致するため、基本エレメント４０−２からのマッチ情報出力５３、すなわち最終マッチ結果８９が１となる。
【０１００】
このように、照合対象文字列として“XBAAAACBAAAZAC”が入力された場合に、正規表現“ＢＡ｛４｝Ｃ”にマッチする文字列は“BAAAAC”(2文字目から７文字目まで)だが、7文字目の‘C’が入力される時刻７において、正しく最終マッチ結果８９が1となっていることが確認できる。
【０１０１】
時刻８以降の区間では、繰り返し正規表現A{4}の一致判定が途中で失敗するケースを示している。時刻８から時刻１１までは、時刻２から時刻５までの動作と全く同様に動作し、c{N}-NFA論理回路タイプB２０２の状態遷移マシン３２５は、あと一回着目文字である‘A’が入力されると、マッチ情報出力５３として1を出力する状態になっている。時刻１２において、入力照合対象文字８０が‘Z’なので、Running状態３２３からIdle状態３２１への遷移が発生し、正規表現の照合が失敗し、マッチ情報出力５３（＝中間マッチ情報２０９）として0が出力される。
【０１０２】
以上がc{N}-NFA論理回路タイプB２０２を使用する場合の動作である。
【０１０３】
＜タイプCの動作＞
次に、c{N}-NFA論理回路タイプC２０３を使用する場合の動作について、正規表現“[AB]A{4}C”の場合を例に説明する。
【０１０４】
NFA論理回路を構成する際には、まず、図２のc{N}-NFA論理回路のタイプ選択フローにしたがって、c{N}-NFA論理回路のタイプ選択が行われる。正規表現“[AB]A{4}C”の場合には、プレフィックス構成文字はAおよびB、繰り返し正規表現A{4}の着目文字はAのみなので、ステップ４０１の判定が偽、ステップ４０３の判定が真となり、c{N}-NFA論理回路としてc{N}-NFA論理回路タイプC２０３が選択される。ここでは、c{N}-NFA論理回路タイプC２０３の説明を行うため、タイプC２０３の方が従来構成に比べて有利なものと仮定し、ステップ４０６の判定は真となるものとする。
【０１０５】
“[AB]A{4}C”に対応するNFA論理回路は、図１のNFA論理回路２００に近いものとなる。具体的には、正規表現“[AB]”に対応するNFA論理回路、c{N}-NFA論理回路１００に対応する文字’A’の4回繰り返し“A{4}”に対応するc{N}-NFA論理回路タイプC２０３、基本エレメント４０−２に対応する対象文字‘C’の基本エレメント４０が順に接続された構成となる。正規表現“[AB]”は正規表現“A|B”と等価であり、正規表現“[AB]”に対応するNFA論理回路は図１９の４９−１に示す回路で構成される（詳細な動作は従来技術を記載した引用文献を参照）。基本エレメント４０−１以外のNFA論理回路２００を構成する要素は図１と同じである。以降の説明では、タイプCであることを明示するため、c{N}-NFA論理回路１００をc{N}-NFA論理回路タイプC２０３と表記する。
【０１０６】
この場合、c{N}-NFA論理回路１００のパラメータである繰り返し回数Nは４、着目文字ｃは’A’である。
【０１０７】
最初に、照合対象文字列の入力が開始される前の初期状態について説明する。
【０１０８】
初期状態では、NFA論理回路２００中の全てのFlip Flopは全て０に初期化される。つまり、図１７の基本エレメント内のF/Fの値は０である。
【０１０９】
また、初期状態では、c{N}-NFA論理回路タイプC２０３の状態遷移マシンの状態はIdle状態３３１である。状態遷移マシンが保持する内部変数Match Countは特に初期化されている必要はない（初期化されていてもよい）。
【０１１０】
以上が、文字列照合を開始する前の初期状態である。
【０１１１】
初期状態に続いて、照合対象文字列として“XBAAAAACBAAAZA”が入力された場合を例にとり、c{N}-NFA論理回路タイプC２０３を用いた場合の本発明の第一の実施の形態の動作について、図１２のタイムチャートを用いて説明する。
【０１１２】
図１２のタイムチャートにおいて、時刻１〜１４は初期状態からのクロック数である。
【０１１３】
正規表現“[AB]”に対応するNFA論理回路は、正規表現の先頭のためマッチ情報入力は常に１であり、そのため正規表現“[AB]”に対応するNFA論理回路から出力される中間マッチ情報２０８は、入力照合対象文字８０が‘A’または‘B’の場合にのみ‘1’となる（図１２の２０８  中間マッチ情報の行）。
【０１１４】
正規表現“[AB]”に対応するNFA論理回路から出力された中間マッチ情報２０８は、c{N}-NFA論理回路タイプC２０３内のF/F３３６に入力され、1クロックサイクル分遅延されたＦ／Ｆ後入力マッチ情報３３７として、状態遷移マシン３３５に入力される。
【０１１５】
状態遷移マシン３３５の初期状態はIdle状態３３１であり、Idle状態３３１からは「入力された照合対象文字５１が着目文字と一致し、かつＦ／Ｆ後マッチ情報入力３３７が１の場合」にAccept状態３３２に遷移する（遷移３３０−２）。
【０１１６】
時刻１〜２の区間では、入力照合対象文字８０（c{N}-NFA論理回路タイプC２０３の入力照合対象文字５１）は着目文字‘A’ではないため、遷移条件が成立せずIdle状態３３１にとどまる（遷移３３０−１）。
【０１１７】
時刻３では、入力照合対象文字５１が着目文字‘A’と一致し、Ｆ／Ｆ後マッチ情報入力３３７も１なので、Ｉｄｌｅ状態３３１からＡｃｃｅｐｔ状態３３２への遷移条件が成立し、Ａｃｃｅｐｔ状態３３２に遷移する（３３０−２）。このとき、MatchCountを1に設定する。Ａｃｃｅｐｔ状態３３２での遷移判定も時刻３のうちに行われる。Accept状態３３２では、MatchCount＝１、繰り返し回数N＝４なので、Running状態３３３への遷移条件が成立し、Running状態３３３に遷移する（３３０−３）。図１２の「状態遷移マシンの状態」は、時刻３において、“Acpt”と“Run”が上下に並んで２つ記載されているが、これは“Acpt”（Accept状態３３２の略号）に遷移してから“Run”（Running状態３３３の略号）に遷移したことを示す。太字で記載されている最下段の状態がその時刻における最終的な状態であり、時刻３ではRunning状態３３３である。
【０１１８】
時刻４，５では、入力照合対象文字５１が着目文字‘A’と一致するため、Running状態３３３→Accept状態３３２→Running状態３３３と状態遷移が行われる。同時にMatch Countのカウントアップも行われ、時刻５の処理終了時点でMatch Countは３となる。
【０１１９】
時刻６では、入力照合対象文字５１が着目文字‘A’と一致するため、時刻４、５と同様にRunning状態３３３からAccept状態３３２への遷移がまず行われる（３３０−４）。同時に、Match Countもカウントアップされ、Match Count＝４となる。Accept状態３３２では、Match Count＝繰り返し回数N（＝４）なので、Match状態３３４への遷移条件が成立し、Match状態３３４への遷移が行われる（３３０−６）。タイプB２０２と異なり、Match状態３３４が時刻６での最終的な状態となり、時刻６における状態遷移が終了する。
【０１２０】
時刻７においても、入力照合対象文字５１が着目文字‘A’と一致するため、Match状態３３４にとどまる（遷移３３０−７）。
【０１２１】
時刻８では、入力照合対象文字５１が‘C’であり、着目文字‘A’と一致しないため、Match状態３３４からIdle状態３３１に遷移する（遷移３３０−８）。
【０１２２】
Match状態３３４への遷移が行われた時刻６、および時刻７において、c{N}-NFA論理回路タイプC２０３からのマッチ情報出力５３、すなわち中間マッチ情報２０９として1が出力される。
【０１２３】
c{N}-NFA論理回路タイプC２０３から出力された中間マッチ情報２０９は、文字’C’を対象にマッチを行う基本エレメント４０−２に入力される。中間マッチ情報２０９は基本エレメント４０−２内のＦ／Ｆにより1クロック遅延された後、基本エレメント４０−２における入力文字比較結果と論理積がとられ、最終マッチ結果８９として、マッチ結果出力部２１１へ出力される。
【０１２４】
時刻７では、c{N}-NFA論理回路タイプC２０３から時刻６に出力された中間マッチ情報２０９を、基本エレメント４０−２内のF/Fで1クロック遅延されたマッチ情報入力が1だが、入力照合対象文字８０は‘A’であり、基本エレメント４０−２の着目文字で’C’と一致しないため、基本エレメント４０−２からのマッチ情報出力５３、すなわち最終マッチ結果８９は0となる。
【０１２５】
時刻８では、c{N}-NFA論理回路タイプC２０３から時刻７に出力された中間マッチ情報２０９を、基本エレメント４０−２内のF/Fで1クロック遅延されたマッチ情報入力が1であり、入力照合対象文字８０も基本エレメント４０−２の着目文字で’C’と一致するため、基本エレメント４０−２からのマッチ情報出力５３、すなわち最終マッチ結果８９が１となる。
【０１２６】
このように、照合対象文字列として“XBAAAAACBAAAZA”が入力された場合に、正規表現“[AB]Ａ｛４｝Ｃ”にマッチする文字列は“AAAAAC”(３文字目から８文字目まで)だが、8文字目の‘C’が入力される時刻８において、正しく最終マッチ結果８９が1となっていることが確認できる。
【０１２７】
時刻９以降の区間では、繰り返し正規表現A{4}の一致判定が途中で失敗するケースを示している。時刻９から時刻１２までは、時刻２から時刻５までの動作と全く同様に動作し、c{N}-NFA論理回路タイプC２０３の状態遷移マシン３３５は、あと一回着目文字である‘A’が入力されると、マッチ情報出力５３として1を出力する状態になっている。時刻１３において、入力照合対象文字８０が‘Z’なので、Running状態３３３からIdle状態３３１への遷移が発生し、正規表現の照合が失敗し、マッチ情報出力５３（＝中間マッチ情報２０９）として0が出力される。
【０１２８】
以上がc{N}-NFA論理回路タイプC２０３を使用する場合の動作である。
【０１２９】
＜タイプAの動作＞
次に、c{N}-NFA論理回路タイプA２０１を使用する場合の動作について、正規表現“[AB][AC]{4}C”の場合を例に説明する。
【０１３０】
NFA論理回路を構成する際には、まず、図２のc{N}-NFA論理回路のタイプ選択フローにしたがって、c{N}-NFA論理回路のタイプ選択が行われる。正規表現“[AB][AC]{4}C”の場合には、プレフィックス構成文字はAおよびB、繰り返し正規表現[AC]{4}の着目文字はAおよびCなので、ステップ４０１の判定とステップ４０３の判定がともに偽となり、c{N}-NFA論理回路としてc{N}-NFA論理回路タイプA２０１が選択される。ここでは、c{N}-NFA論理回路タイプA２０１の説明を行うため、タイプA２０１の方が従来構成に比べて有利なものと仮定し、ステップ４０６の判定は真となるものとする。
【０１３１】
“[AB][AC]{4}C”に対応するNFA論理回路は、図１のNFA論理回路２００に近いものとなる。具体的には、正規表現“[AB]”に対応するNFA論理回路、c{N}-NFA論理回路１００に対応する文字’A’または‘C’の4回繰り返し“[AC]{4}”に対応するc{N}-NFA論理回路タイプA２０１、基本エレメント４０−２に対応する対象文字‘C’の基本エレメント４０が順に接続された構成となる。正規表現“[AB]”は正規表現“A|B”と等価であり、正規表現“[AB]”に対応するNFA論理回路は図１９の４９−１に示す回路で構成される（詳細な動作は従来技術を記載した引用文献を参照）。基本エレメント４０−１以外のNFA論理回路２００を構成する要素は図１と同じである。以降の説明では、タイプAであることを明示するため、c{N}-NFA論理回路１００をc{N}-NFA論理回路タイプA２０１と表記する。
【０１３２】
この場合、c{N}-NFA論理回路１００のパラメータである繰り返し回数Nは４、着目文字ｃは’A’と‘C’である。
【０１３３】
また、動作の説明では、メモリ１２３のワード数＝８とする。メモリのワード数の決定方法については後で説明する。したがって、メモリ１２３のアドレスは０〜７の範囲となる。
【０１３４】
最初に、照合対象文字列の入力が開始される前の初期状態について説明する。
【０１３５】
初期状態では、NFA論理回路２００中の全てのFlip Flopは全て０に初期化される。つまり、図１７の基本エレメント内のF/Fの値は０である。
【０１３６】
初期状態では、c{N}-NFA論理回路タイプA２０１の状態遷移マシンの状態はIdle状態３１１である。状態遷移マシンが保持する内部変数Match Countは特に初期化されている必要はない（初期化されていてもよい）。
【０１３７】
初期状態では、c{N}-NFA論理回路タイプA２０１のマッチ情報タイミング調整部１２０のメモリ１２３の書き込みアドレス１２４と読み出しアドレス１２６は、書き込みアドレス１２４の方が読み出しアドレス１２６よりもN=4だけ進んだ状態となる。つまり、読み出しアドレス１２６が０であれば、書き込みアドレス１２４は４である。また、メモリ１２３の各ワードの内容は０に初期化される。
【０１３８】
以上が、文字列照合を開始する前の初期状態である。
【０１３９】
初期状態に続いて、照合対象文字列として“XBAAAACZABAAAZ”が入力された場合を例にとり、c{N}-NFA論理回路タイプA２０１を用いた場合の本発明の第一の実施の構成の動作について、図６のタイムチャートを用いて説明する。
【０１４０】
図６のタイムチャートにおいて、時刻１〜１４は初期状態からのクロック数である。
【０１４１】
正規表現“[AB]”に対応するNFA論理回路は、正規表現の先頭のためマッチ情報入力は常に１であり、そのため正規表現“[AB]”に対応するNFA論理回路から出力される中間マッチ情報２０８は、入力照合対象文字８０が‘A’または‘B’の場合にのみ‘1’となる（図６の２０８  中間マッチ情報の行）。
【０１４２】
連続一致回数カウント部１１０の状態遷移マシンの初期状態はIdle状態３１１であり、Idle状態３１１からは「入力された照合対象文字１０１が着目文字と一致する場合」にAccept状態３１２に遷移する（遷移３１０−２）。Idle状態３１１からAccept状態３１２への遷移条件が「入力された照合対象文字１０１が着目文字と一致」だけであり、Ｆ／Ｆ後マッチ情報入力が遷移条件に含まれない点が、c{N}-NFA論理回路タイプB２０２およびc{N}-NFA論理回路タイプC２０３の状態遷移マシンと異なる点である。
【０１４３】
時刻１〜２の区間では、入力照合対象文字８０（c{N}-NFA論理回路タイプA２０１の入力照合対象文字１０１）は着目文字‘A’および‘C’ではないため、遷移条件が成立せずIdle状態３１１にとどまる（遷移３１０−１）。
【０１４４】
時刻３では、入力照合対象文字１０１が着目文字の一つである‘A’と一致するので、Ｉｄｌｅ状態３１１からＡｃｃｅｐｔ状態３１２への遷移条件が成立し、Ａｃｃｅｐｔ状態３１２に遷移する（３１０−２）。このとき、MatchCountを1に設定する。Ａｃｃｅｐｔ状態３１２での遷移判定も時刻３のうちに行われる。Accept状態３１２では、MatchCount＝１、繰り返し回数N＝４なので、Running状態３１３への遷移条件が成立し、Running状態３１３に遷移する（３１０−３）。図６の「状態遷移マシンの状態」は、時刻３において、“Acpt”と“Run”が上下に並んで２つ記載されているが、これは“Acpt”（Accept状態３１２の略号）に遷移してから“Run”（Running状態３１３の略号）に遷移したことを示す。太字で記載されている最下段の状態がその時刻における最終的な状態であり、時刻３ではRunning状態３１３である。
【０１４５】
時刻４，５では、入力照合対象文字１０１が着目文字‘A’と一致するため、Running状態３１３→Accept状態３１２→Running状態３１３と状態遷移が行われる。同時にMatch Countのカウントアップも行われ、時刻５の処理終了時点でMatch Countは３となる。
【０１４６】
時刻６では、入力照合対象文字１０１が着目文字‘A’と一致するため、時刻４、５と同様にRunning状態３１３からAccept状態３１２への遷移がまず行われる（３１０−４）。同時に、Match Countもカウントアップされ、Match Count＝４となる。Accept状態３１２では、Match Count＝繰り返し回数N（＝４）なので、Match状態３１４への遷移条件が成立し、Match状態３１４への遷移が行われる（３１０−６）。タイプC２０３の状態遷移マシンと同様に、Match状態３１４が時刻６での最終的な状態となり、時刻６における状態遷移が終了する。
【０１４７】
時刻７においては、入力照合対象文字１０１は‘C’であるが、’C’もc{N}-NFA論理回路タイプA２０１の着目文字なので、Match状態３１４にとどまる（遷移３１０−７）。
【０１４８】
時刻８では、入力照合対象文字１０１が‘Z’であり、着目文字‘A’および‘C’のいずれとも一致しないため、Match状態３１４からIdle状態３１１に遷移する（遷移３１０−８）。
【０１４９】
Match状態３１４への遷移が行われた時刻６、および時刻７において、連続一致回数カウント部１１０からの一致判定結果１１８として1が出力される。
【０１５０】
一方、基本エレメント４０−１から出力された中間マッチ情報２０８は、c{N}-NFA論理回路２０１内のマッチ情報タイミング調整部１２０に入力される。書き込みアドレス１２４はクロック毎に常に加算されており、入力されたマッチ情報入力１０２は、書き込みアドレス生成部１２１より指示された書き込みアドレス１２４にしたがって、メモリ１２３の所定の位置に格納される。一方、読み出しアドレス１２６も読み出しアドレス生成部１２２においてクロック毎に常に加算されており、初期状態におけるアドレスの差分がN=4であるので、読み出しアドレス１２６は書き込みアドレス１２４よりもN=4だけ遅れている。この読み出しアドレス１２６を用いてメモリ１２３からデータの読み出しを行う。これにより、メモリ読み出しデータ１２７は、中間マッチ情報２０８をN（＝４）クロック分遅延させた情報となる。
【０１５１】
マッチ情報出力部１３０は、連続一致回数カウント部１１０からの連続一致判定結果１１８と、マッチ情報タイミング調整部１２０からの読み出しデータ１２７を受信し、これらの論理積（AND）を計算し、マッチ情報出力１０３として出力する。
【０１５２】
c{N}-NFA論理回路タイプA２０１が、正規表現”c{N}”を実現するＮＦＡ論理回路として機能するためには、
（１）前段の正規表現”[AB]”に対応する構成要素（基本エレメント４０−１相当）からマッチ情報入力＝１が入力され、正規表現“c{N}”に対応するＮＦＡ状態がアクティブになる。
（２）正規表現“c{N}”に対応するＮＦＡ状態がアクティブになった状態において、着目文字ｃ（＝’A’または‘C’）がＮ（＝４）回連続で入力される。
の二つの条件が同時に成立する必要がある。
【０１５３】
マッチ情報出力部１３０に入力される情報のうち、マッチ情報タイミング調整部１２０から出力される読み出しデータ１２７は（１）の条件を表し、連続一致回数カウント部１１０からの連続一致判定結果１１８は（２）の条件を表す。
【０１５４】
マッチ情報出力部１３０から出力される、c{N}-NFA論理回路タイプA２０１のマッチ結果である、中間マッチ情報２０９は、入力された照合対象文字列が「ＢＡＡＡＡ」となるタイミングである時刻６および「AAAAC」となる時刻７で1となり、それ以外の時刻では0となっており、前記の（１）（２）の条件をともに満たしていることが分かる。
【０１５５】
c{N}-NFA論理回路タイプA２０１から出力された中間マッチ情報２０９は、文字’C’を対象にマッチを行う基本エレメント４０−２に入力される。中間マッチ情報２０９は基本エレメント４０−２内のＦ／Ｆにより1クロック遅延された後、基本エレメント４０−２における入力文字比較結果と論理積がとられ、最終マッチ結果８９として、マッチ結果出力部２１１へ出力される。
【０１５６】
時刻７では、c{N}-NFA論理回路タイプC２０１から時刻６に出力された中間マッチ情報２０９を、基本エレメント４０−２内のF/Fで1クロック遅延されたマッチ情報入力が1であり、入力照合対象文字８０も基本エレメント４０−２の着目文字で’C’と一致するため、基本エレメント４０−２からのマッチ情報出力５３、すなわち最終マッチ結果８９が１となる。
【０１５７】
一方、時刻８では、c{N}-NFA論理回路タイプA２０１から時刻７に出力された中間マッチ情報２０９を、基本エレメント４０−２内のF/Fで1クロック遅延されたマッチ情報入力が1だが、入力照合対象文字８０は‘Z’であり、基本エレメント４０−２の着目文字で’C’と一致しないため、基本エレメント４０−２からのマッチ情報出力５３、すなわち最終マッチ結果８９は0となる。
【０１５８】
このように、照合対象文字列として“XBAAAACZABAAAZ”が入力された場合に、正規表現“[AB][ＡC]｛4｝Ｃ”にマッチする文字列は“BAAAAC”(２文字目から７文字目まで)だが、７文字目の‘C’が入力される時刻７において、正しく最終マッチ結果８９が1となっていることが確認できる。
【０１５９】
時刻８以降の区間では、繰り返し正規表現“[AC]{4}”の一致判定が途中で失敗するケースを示している。時刻７までの説明で触れていない特徴的な点がある連続一致回数カウント部１１０の状態遷移マシンについてのみ説明する。マッチ情報タイミング調整部１２０およびマッチ情報出力部１３０の動作は上記において説明したとおりである。
【０１６０】
時刻８では、入力照合対象文字１０１が‘Z’であり、着目文字‘A’および‘C’のいずれとも一致しないため、連続一致回数カウント部１１０の状態遷移マシンはMatch状態３１４からIdle状態３１１に遷移する（遷移３１０−８）。
【０１６１】
時刻９では、時刻３と同様、入力照合対象文字１０１が着目文字の一つである‘A’と一致するので、Idle状態３１１からAccept状態３１２への遷移条件が成立し、Ａｃｃｅｐｔ状態３１２に遷移し（３１０−２）、さらにAccept状態３１２での遷移判定も同じ時刻のうちに行われ、最終的にRunniing状態３１３に遷移する（３１０−３）。c{N}-NFA論理回路タイプA２０１の連続一致回数カウント部１１０の状態遷移マシンでは、Idle状態３１１からAccept状態３１２への遷移条件が「入力された照合対象文字１０１が着目文字と一致」だけであるため、時刻９では、１クロック前の時刻８での”[AB]”に対応するNFA論理回路から出力された中間マッチ情報２０８が０であるにも関わらず、入力された照合対象文字１０１が着目文字と一致しただけでIdle状態３１１からAccept状態３１２への遷移が行われる。
【０１６２】
時刻１０では、入力照合対象文字１０１が‘B’であり、着目文字‘A’および‘C’のいずれとも一致しないため、連続一致回数カウント部１１０の状態遷移マシンはRunning状態３１３からIdle状態３１１に遷移する（遷移３１０−５）。
【０１６３】
時刻１１から時刻１３までは、時刻３から時刻５までの動作と全く同様に動作し、c{N}-NFA論理回路タイプA２０１の状態遷移マシン３２５は、あと一回着目文字である‘A’または‘C’が入力されると、一致判定結果１１８として1を出力する状態になっている。時刻１４において、入力照合対象文字１０１が‘Z’なので、Running状態３１３からIdle状態３１１への遷移が発生し、正規表現の照合が失敗し、一致判定結果１１８として0が出力される。
【０１６４】
以上がc{N}-NFA論理回路タイプA２０１を使用する場合の動作である。
【０１６５】
＜従来技術利用型の動作＞
c{N}-NFA論理回路従来技術利用型２０４の動作は非特許文献２において説明されているとおりであり、本発明に適用にするにあたっての特記事項はない。
【０１６６】
＜動作の説明のまとめ＞
上述のように、本発明の第一の実施の形態のＮＦＡ論理回路を利用すると、NFAをハードウェアに直接埋め込む形の文字列照合回路において、繰り返し回数指定の正規表現を実現する際に、繰り返し指定回数と同数の基本エレメント４０を実装することなく、連続一致回数をカウントする回路と、必要により、メモリによるマッチ情報を遅延させる回路を用いるだけで実現でき、回路規模を削減することができる。
【０１６７】
上記の動作の説明では、c{N}-NFA論理回路１００が着目する文字cとして、’A’や’B’などの単一文字の場合（タイプB、タイプC）および“[AC]”のように２種類の文字の場合を例に説明をしたが、文字cとして”[ABC]”や“[A-Za-z0-9]”や“[^ABC]”など複数文字のいずれかを示す表現を使用した場合でも、本発明を適用することが可能である。これに対応するためには、c{N}-NFA論理回路１００のタイプA、タイプB、タイプC内の状態遷移マシンの図５、図８、図１１中の遷移条件「入力照合対象文字＝着目文字」を「入力照合対象文字５３が着目文字のいずれかと一致する」に、遷移条件「入力照合対象文字≠着目文字」を「入力照合対象文字５３が着目文字のいずれとも一致しない」に読み替えればよい。
【０１６８】
[回路規模削減効果]
以下に、回路規模の削減効果について具体的に述べ、本発明の回路規模削減効果の優位性について示す。
【０１６９】
NFAをハードウェア回路に埋め込む方式では、照合ルールとなる正規表現を変更できるようにするという観点から、通常、ハードウェアを実装するデバイスとして、FPGA（Field Programmable Gate Array）などの再構成可能なハードウェアが利用される。そこで、回路規模の見積もりは、FPGAにおける回路規模の指標であるLogic Element（LE）数を単位として行う。有力なFPGAベンダーの一つであるAltera社製FPGAのStratixでは、一つのLogic Element（LE）は、1ビットのF/Fが一つと、4ビット入力のLUT（Look-Up Table）が一つで構成される。
【０１７０】
c{N}-NFA論理回路タイプA２０１を例として本発明の回路規模削減効果を示す。
【０１７１】
c{N}-NFA論理回路タイプA２０１内の回路規模が比較的大きなブロックとしては、連続一致カウント部１１２とＦ／Ｆ１１４より構成されるカウンタ、書き込みアドレス生成部１２１と読み出しアドレス生成部１２２のアドレスカウンタ２つが挙げられる。これらのカウンタはいずれも0〜Ｎまでの値を保持する必要があり、必要なビット数Ｂは
B=ceil(log2(N+1))
（ceil(x)はxより大きな最小の整数）
で定義される。例えば、繰り返し指定回数N=400の場合、
B=ceil(log2(400+1))=9(bits)
となる。通常、9ビットのカウンタは、9LE程度で実装可能である。
【０１７２】
カウンタ以外に回路規模に影響を与えるブロックとしては、比較器１１１と連続一致判定部１１３の組み合わせ回路が挙げられる。これらはc{N}-NFA論理回路内にいずれも一つずつ存在する。照合対象文字１０１としてASCII文字を想定すると、比較器１１１は8ビットの比較回路となる。また、連続一致判定部１１３の比較回路のビット幅はカウンタのビット幅と等しいが、前記の例のN=400の場合、9ビット幅となる。8ビット乃至9ビットの比較回路の実装に必要なLE数は3LE程度である。
c{N}-NFA論理回路２０１の実装に必要なLE数は、
・カウンタ：9LE×3＝27LE
・組み合わせ回路：3LE×2＝6LE
で、合計33LE程度である。
【０１７３】
一方、1個の基本エレメント４０は、主に、入力文字に対する比較器が一つと、１ビットのF/Fが一つから構成される。F/Fは一つなので、LE数に大きく影響を与えるのは比較器であり、比較器のビット幅を照合対象文字により決まるのでc{N}-NFA論理回路２０１の場合と同じく8ビットとすると、必要なLE数は基本エレメント４０一つ当たり3LEとなる。
【０１７４】
従来技術を用いて、繰り返し回数指定の正規表現を実現するNFA論理回路を作成すると、繰り返し回数Nと等しい数の基本エレメントが必要である。N=400の場合、必要なLE数は3×400=1200LEとなる。
【０１７５】
本発明の提案方式で必要な回路規模は、従来技術と比較して、LE数で
本発明適用時のLE数/従来技術でのLE数＝33/1200=2.75％≒=3％程度
に削減することが可能である。
【０１７６】
c{N}-NFA論理回路タイプB２０２、c{N}-NFA論理回路タイプC２０３の場合には、マッチ情報タイミング調整部１２０に相当する回路が不要となるため、マッチ情報タイミング調整部１２０内に存在するカウンタ２個と組み合わせ回路１個が不要となる。結果的に、回路規模に大きく影響を与える要素は、カウンタ１個と組み合わせ回路１個となり、c{N}-NFA論理回路タイプBまたはタイプCを実現するために必要なLE数は、カウンタ１個(9LE)＋組み合わせ回路(3LE)＝12LE程度となる。この場合の回路規模削減効果は、従来技術と比較して、LE数で、N=400の場合で、
本発明適用時のLE数/従来技術でのLE数＝12/1200=1％
となり、本発明の効果がさらに得られることが確認できる。
【０１７７】
『第二の実施の形態』
本発明の第二の実施の形態は、本発明の第一の実施の形態と比較すると、c{N}-NFA論理回路１００のタイプ選択フローのみが異なり、c{N}-NFA論理回路タイプA２０１もしくは従来技術利用型２０４のみをc{N}-NFA論理回路の実現方法として使用する。第二の実施の形態における、c{N}-NFA論理回路１００のタイプ選択フローを図１３に示す。ステップ５０１の判定で、c{N}-NFA論理回路タイプA２０１を使用した方が従来技術を利用する場合よりも有利な場合には、c{N}-NFA論理回路タイプA２０１を使用し（ステップ５０２）、そうでない場合には従来技術を利用して（ステップ５０３）、c{N}-NFA論理回路１００を実現する。c{N}-NFA論理回路タイプA２０１の内部構成、動作については、発明を実施するための最良の形態と全く同一である。
【０１７８】
c{N}-NFA論理回路タイプB２０２およびc{N}-NFA論理回路タイプC２０３は、それぞれ、第一の実施の形態の図２のタイプ選択フローのステップ４０１、ステップ４０３の条件が真となる場合にしか、c{N}-NFA論理回路１００の実現方法として利用できないのに対し、c{N}-NFA論理回路タイプA２０１は、図２においてc{N}-NFA論理回路タイプB２０２やc{N}-NFA論理回路タイプC２０３を使用する条件においても使用することが可能である。これは、c{N}-NFA論理回路タイプA２０１が連続一致回数カウント部１１０とマッチ情報タイミング調整部１２０という、繰り返し回数指定の正規表現を実現する上で必須の機能をそのまま実現しているためである。これに対して、c{N}-NFA論理回路タイプB２０２やc{N}-NFA論理回路タイプC２０３では、c{N}-NFA論理回路１００の実現方法として使用する条件を限定することで、内部構成を簡単にしている。
【０１７９】
c{N}-NFA論理回路の実現方法としてc{N}-NFA論理回路タイプA２０１だけを使用することで、以下のメリットが得られる。本発明の第一の実施の形態のタイプ選択フローである図２では、繰り返し回数指定の正規表現より前の部分正規表現を参照してプレフィックス構成文字を決定し、どのタイプの構成を選択するかを決定しているが、正規表現がサポートするメタ文字の種類によってはプレフィックス構成文字を正確に決定するアルゴリズムが複雑になる可能性がある。第二の実施の形態のようにc{N}-NFA論理回路の実現方法としてc{N}-NFA論理回路タイプA２０１だけを使用することで、従来技術を使用する場合に比べて回路規模を削減するメリットを得つつも、タイプ選択フローを実装するアルゴリズムを単純化することができる。
【０１８０】
『第三の実施の形態』
本発明の第三の実施の形態は、特定文字のN回以上の繰り返しを表す正規表現“c{N,}”の実現方法に関するものである。
【０１８１】
特定文字のN回以上（Nは自然数）の繰り返しを表す正規表現“c{N,}”に対応するNFA論理回路の構成を図１４に示す。正規表現“c{N,}”に対応するNFA論理回路６０１は、c{N}-NFA論理回路１００とc*-NFA論理回路６０２をこの順序で直列に接続したものであり、c{N}-NFA論理回路１００から出力された中間マッチ情報６０３は、c*-NFA論理回路６０２のマッチ情報入力となる。N回以上の繰り返しを表す正規表現“c{N,}”は、特定文字のN回の繰り返しを表す正規表現“c{N}”と特定文字の0回以上の繰り返しを表す“c*”の連結である“c{N}c*”と等価である。この等価性を利用することで、図１４に記載の構成で、特定文字のN回以上の繰り返しを表す正規表現“c{N,}”に対応するNFA論理回路が構成できる。
【０１８２】
c{N}-NFA論理回路１００の具体的な構成は、本発明の第一の実施の形態もしくは第二の実施の形態に記載の方法を用いることができ、その動作も前記実施の形態に記載の通りである。c*-NFA論理回路６０２は従来技術の基本パターンを用いて実現される。例えば、正規表現が“[AB]{50,}”の場合、c*-NFA論理回路６０２の文字cは”[AB]”つまり”(A|B)”であり、具体的な回路構成は図１９の４９−２の枠内の通りとなる。
【産業上の利用可能性】
【０１８３】
本発明の活用例として、ネットワークサービスに対する攻撃や侵入を検知する侵入検知システム（IDS;Intrusion Detection System;）や侵入防止システム（IPS;Intrusion Protection System）において、正規表現などを利用した高度な攻撃・侵入検知ルールによる文字列照合処理を高速に実現するハードウェアに適用できる。
【図面の簡単な説明】
【０１８４】
【図１】本発明の第一の実施の形態の全体構成を示すブロック図
【図２】c{N}-NFA論理回路１００のタイプ選択フローを示す図
【図３】プレフィックス構成文字の具体例を示す図
【図４】c{N}-NFA論理回路タイプA２０１の構成を示す図
【図５】c{N}-NFA論理回路タイプA２０１の連続一致回数カウント部１１０の状態遷移マシンの動作を示す図
【図６】c{N}-NFA論理回路タイプA２０１を用いた構成の動作を説明するためのタイムチャート
【図７】c{N}-NFA論理回路タイプB２０２の構成を示す図
【図８】c{N}-NFA論理回路タイプB２０２の状態遷移マシンの動作を示す図
【図９】c{N}-NFA論理回路タイプB２０２を用いた構成の動作を説明するためのタイムチャート
【図１０】c{N}-NFA論理回路タイプC２０３の構成を示す図
【図１１】c{N}-NFA論理回路タイプC２０３の状態遷移マシンの動作を示す図
【図１２】c{N}-NFA論理回路タイプC２０３を用いた構成の動作を説明するためのタイムチャート
【図１３】本発明の第二の実施の形態におけるc{N}-NFA論理回路１００のタイプ選択フローを示す図
【図１４】本発明の第三の実施の形態における特定文字のN回以上の繰り返しを表す正規表現に対応するc{N}-NFA論理回路６０１の構成を示す図
【図１５】従来技術の正規表現からNFAへの変換を説明するための図
【図１６】従来技術のNFAからハードウェアへのNFA埋め込み回路への変換を説明するための図
【図１７】従来技術のNFA論理回路の基本エレメントの詳細構成を表す図
【図１８】従来技術のNFA論理回路の基本エレメント４０の簡略図
【図１９】従来技術による正規表現からNFA論理回路への変換例を示す図
【図２０】NFA埋め込み型ハードウェアにおける正規表現の部分表現に対応するブロックが持つべき入出力信号を示す図
【図２１】繰り返し回数指定の正規表現を従来技術により変換したNFAを示す図
【図２２】繰り返し回数指定の正規表現を従来技術により変換したNFA論理回路を示す図
【符号の説明】
【０１８５】
１０１…照合対象文字
１０２…マッチ情報入力
１０３…マッチ情報出力
１１０…連続一致回数カウント部
１１１…比較器
１１２…連続一致カウント部
１１３…連続一致判定部
１１４…フリップフロップ
１１５…比較結果
１１６…一致回数
１１７…前回一致回数
１１８…連続一致判定結果
１２０…マッチ情報タイミング調整部
１２１…書き込みアドレス生成部
１２２…読み出しアドレス生成部
１２３…メモリ
１２４…書き込みアドレス
１２５…書き込みデータ
１２６…読み出しアドレス
１２７…読み出しデータ
１３０…マッチ情報出力部
２００…NFA論理回路
２１０…照合対象文字列入力部
２１１…マッチ結果出力部
【図１】
0004957500.tif 000002
【図２】
0004957500.tif 000003
【図３】
0004957500.tif 000004
【図４】
0004957500.tif 000005
【図５】
0004957500.tif 000006
【図６】
0004957500.tif 000007
【図７】
0004957500.tif 000008
【図８】
0004957500.tif 000009
【図９】
0004957500.tif 000010
【図１０】
0004957500.tif 000011
【図１１】
0004957500.tif 000012
【図１２】
0004957500.tif 000013
【図１３】
0004957500.tif 000014
【図１４】
0004957500.tif 000015
【図１５】
0004957500.tif 000016
【図１６】
0004957500.tif 000017
【図１７】
0004957500.tif 000018
【図１８】
0004957500.tif 000019
【図１９】
0004957500.tif 000020
【図２０】
0004957500.tif 000021
【図２１】
0004957500.tif 000022
【図２２】
0004957500.tif 000023