(57)【特許請求の範囲】
【請求項１】
テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを設定する設定用制御回路（Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ）と、
前記構成データに基づいて、前記正規表現に対応する設定を再設定可能に行い、前記正規表現とのパターンマッチングを行うためのオートマトン回路と、
を具備し、
前記オートマトン回路は、
前記正規表現におけるキャラクタに対応するデータを格納するキャラクタノード回路部と、
前記正規表現におけるメタキャラクタに対応するデータを格納し、前記キャラクタノード回路部との接続関係の設定を行うメタキャラクタノード回路部と、前記メタキャラクタノード回路部は、他のメタキャラクタノード回路部との接続関係の設定をも行い、
前記メタキャラクタノード回路部同士の接続関係の設定を行うスイッチノード回路部とを具備する
パターンマッチング装置。
【請求項２】
請求項１に記載のパターンマッチング装置において、
前記キャラクタノード回路部の総数は、前記メタキャラクタノード回路部の総数より１つだけ多く、
前記キャラクタノード回路部と、前記メタキャラクタノード回路部とは、１つずつ交互に直列に配置されており、
前記メタキャラクタノード回路部のそれぞれは、左右に配置された２つの前記キャラクタノード回路部に相互に接続されており、
同一のキャラクタノード回路部に接続された２つの前記メタキャラクタノード回路部同士は相互に接続されている
パターンマッチング装置。
【請求項３】
請求項２に記載のパターンマッチング装置において、
前記スイッチノード回路部は、同一のキャラクタノード回路部に接続された前記メタキャラクタノード回路部同士の接続以外の、前記メタキャラクタノード回路部同士の接続を行い、
前記スイッチノード回路部における接続関係は、
前記メタキャラクタノード回路部を葉ノードとするＭ分木の形状
を具備し、
前記メタキャラクタノード回路部の総数をＮと置くとき、前記Ｍ分木の総数は
ｌｏｇ２（Ｎ＋１）−１を下回らない最小の整数の２倍
である
パターンマッチング装置。
【請求項４】
請求項３に記載のパターンマッチング装置において、
前記Ｍ分木において、異なるスイッチノード回路部から同一のメタキャラクタノードに向けて出力される複数の信号をまとめるためのマルチプレクサ回路部
をさらに具備し、
前記マルチプレクサ回路部のそれぞれは、前記メタキャラクタノード回路部のそれぞれに一対一に対応する
パターンマッチング装置。
【請求項５】
請求項４に記載のパターンマッチング装置において、
前記メタキャラクタノード回路部は、
対応するマルチプレクサ回路部と、左側に接続されたメタキャラクタノード回路部と、右側に接続されたメタキャラクタノード回路部と、左側に接続されたキャラクタノード回路部と、右側に接続されたキャラクタノード回路部とからの５つの入力信号をそれぞれ入力するための５つの入力部と、
対応するスイッチノード回路部と、左側に接続されたメタキャラクタノード回路部と、右側に接続されたメタキャラクタノード回路部と、左側に接続されたキャラクタノード回路部と、右側に接続されたキャラクタノード回路部とへの信号をそれぞれ出力するための５個の出力部と、
前記５個の出力部にそれぞれ接続された５個のスイッチ回路部と
を具備し、
前記５個のスイッチ回路部は、前記５つの入力信号の論理演算結果を出力し、
前記構成データは、
前記５個のスイッチ回路部がそれぞれ行う論理演算に係る設定値
を具備する
パターンマッチング装置。
【請求項６】
請求項３〜５のいずれかに記載のパターンマッチング装置において、
所定の整数ｎにおいて、前記メタキャラクノード回路部の総数がＭｎ−１より大きく、かつ、Ｍｎ以下であるときに、１つの前記Ｍ分木における前記スイッチノード回路部の総数は
（Ｍｎ−１）／（Ｍ−１）以下
である
パターンマッチング装置。
【請求項７】
請求項６に記載のパターンマッチング装置において、
前記スイッチノード回路部は、
前段のスイッチノード回路部およびＭ個のメタキャラクタノード回路部からの信号、または前段のスイッチノード回路部およびＭ個の後段のスイッチノード回路部からの信号をそれぞれ入力するためのＭ＋１個の入力部と、
前段のスイッチノード回路部およびＭ個のメタキャラクタノード回路部に対応するＭＵＸとへの信号、または前段のスイッチノード回路部およびＭ個の後段のスイッチノード回路部とへの信号をそれぞれ出力するためのＭ＋１個の出力部と、
前記Ｍ＋１個の出力部にそれぞれ接続されたＭ＋１個のスイッチ回路部と
を具備し、
前記Ｍ＋１個のスイッチ回路部は、対応する出力部に接続された先の回路部以外からの入力信号のいずれか１つを選択的に出力し、
前記構成データは、
前記Ｍ＋１個のスイッチ回路部がそれぞれ行う選択の設定値
を具備する
パターンマッチング装置。
【請求項８】
請求項６または７に記載のパターンマッチング装置において、
前記Ｍ分木は、２分木である
パターンマッチング装置。
【請求項９】
請求項６または７に記載のパターンマッチング装置において、
前記Ｍ分木は、４分木である
パターンマッチング装置。
【請求項１０】
請求項２〜９のいずれかに記載のパターンマッチング装置において、
前記キャラクタノード回路部は、
左側に接続されたメタキャラクタノード回路部の出力信号を入力するための第１の入力部と、
右側に接続されたメタキャラクタノード回路部の出力信号を入力するための第２の入力部と、
前記第１の入力部で入力する第１の入力信号と、前記第２の入力部で入力する第２の入力信号とのいずれかを選択的に出力する第１のスイッチ回路部と、
前記第１のスイッチ回路部の出力信号を記憶するためのフリップフロップ回路部と、
パターンマッチングを行うためのテキスト文字データを入力する第３の入力部と、
前記テキスト文字データと、前記キャラクタノード回路部が記憶するキャラクタとを比較する比較回路部と、
前記比較回路部の出力信号と、前記記憶回路部の出力信号との論理積を算出する論理積回路部と、
前記論理積回路部の出力信号と、前記第１の入力信号と、第２の入力信号とのいずれかを選択的に出力する第２のスイッチ回路部と、
前記第２のスイッチ回路部の出力信号を出力する出力部と
を具備し、
前記構成データは、
前記第１のスイッチ回路部が行う選択の設定値と、
前記第２のスイッチ回路部が行う選択の設定値と、
前記キャラクタノード回路部が記憶するキャラクタのデータと
を具備する
パターンマッチング装置。
【請求項１１】
請求項２〜９のいずれかに記載のパターンマッチング装置において、
前記キャラクタノード回路部は、
左側に接続されたメタキャラクタノード回路部の出力信号を入力するための第１の入力部と、
右側に接続されたメタキャラクタノード回路部の出力信号を入力するための第２の入力部と、
前記第１の入力部で入力する第１の入力信号と、前記第２の入力部で入力する第２の入力信号と、第３の信号とのいずれかを選択的に出力する第１のスイッチ回路部と、
前記第１のスイッチ回路部の出力信号を記憶するためのフリップフロップ回路部と、
パターンマッチングを行うためのテキスト文字データを入力する第３の入力部と、
前記テキスト文字データと、前記キャラクタノード回路部が記憶するキャラクタとを比較する比較回路部と、
前記比較回路部の出力信号と、前記記憶回路部の出力信号との論理積を前記第３の信号として算出する論理積回路と、
前記論理積回路の出力信号と、前記第１の入力信号と、第２の入力信号とのいずれかを選択的に出力する第２のスイッチ回路部と、
前記第２のスイッチ回路部の出力信号を出力する出力部と
を具備し、
前記構成データは、
前記第１のスイッチ回路部が行う選択の設定値と、
前記第２のスイッチ回路部が行う選択の設定値と、
前記キャラクタノード回路部が記憶するキャラクタのデータと
を具備する
パターンマッチング装置。
【請求項１２】
請求項１１に記載のパターンマッチング装置において、
前記第１のスイッチ回路部は、
前記第１の入力部または前記第２の入力部のいずれかを選択するための設定値を格納するための第１の記憶回路部と、
前記第１の記憶回路部に格納された設定値に基づいて、前記第１の入力部または前記第２の入力部のいずれかを選択的に出力する第３のスイッチ回路部と、
前記キャラクタノード回路部が記憶するキャラクタに「０回以上マッチ」を意味するメタキャラクタ「＊」がマージされているかどうかに係る情報を記憶する第２の記憶回路部と、
前記第３の信号と、前記第２の記憶回路部からの出力信号との論理積を算出するための論理積回路部と、
前記論理積回路部の出力信号との論理和を演算し、前記フリップフロップ回路部に向けて出力するための論理和回路部と
を具備し、
前記第２のスイッチ回路部は、
前記第２のスイッチ回路が行う選択の設定値を格納し、前記第２のスイッチ回路部に接続されている第３の記憶回路部
を具備し、
前記キャラクタノード回路部が記憶するキャラクタのデータを格納し、前記比較回路部に接続されている第４の記憶回路部
をさらに具備する
パターンマッチング装置。
【請求項１３】
請求項１〜１２のいずれかに記載のパターンマッチング装置において、
前記設定用制御回路に接続されて、前記構成データを記憶するための記憶装置
をさらに具備する
パターンマッチング装置。
【請求項１４】
請求項１〜１３のいずれかに記載のパターンマッチング装置における
オートマトン回路。
【請求項１５】
（ａ）テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを、オートマトン回路に再設定可能に行うステップと、
（ｂ）前記オートマトン回路を用いてパターンマッチングを行うステップと
を具備し、
前記ステップ（ａ）は、
（ａ−１）前記オートマトン回路におけるキャラクタノード回路部に、前記正規表現におけるキャラクタに対応するデータを格納するステップと、
（ａ−２）前記オートマトン回路におけるメタキャラクタノード回路部に、前記正規表現におけるメタキャラクタに対応するデータを格納し、前記キャラクタノードまたは他のメタキャラクタノードとの接続関係の設定を行うステップと、
（ａ−３）前記オートマトン回路におけるスイッチノード回路部に、前記メタキャラクタノード同士の接続関係の設定を行うステップと
を具備する
パターンマッチング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オートマトン回路と、この回路を用いるパターンマッチ（文字列照合）装置と、この装置を用いるパターンマッチ方法とに係り、特に、正規表現を再構成可能な有限オートマトン回路と、この回路を用いるパターンマッチ装置と、この装置を用いるパターンマッチ方法とに係る。
【背景技術】
【０００２】
正規表現とは、通常の文字と、メタキャラクタ（ｍｅｔａｃｈａｒａｃｔｅｒ）と呼ばれる特定の意味を持った特殊な記号を組み合わせて、任意の文字列をパターンとして表現する記法である。【０００３】
この正規表現を用いた文字列照合（パターンマッチ）は、様々な分野で用いられている。例えば、ある文書ファイルからの文字列検索や、ネットワークセキュリティの分野においてネットワーク中のパケットペイロードから特定の文字列を検索する、等の場面で用いられている。【０００４】
近年、ネットワーク帯域は急速に増加している。このため、特に、ネットワーク中においてパケットペイロード等に対する正規表現を用いたパターンマッチを行う場合には、ネットワーク帯域に合う高速な検索スループットで処理を行う必要がある。【０００５】
一般的に、マイクロプロセッサ上では、正規表現を用いたパターンマッチは、与えられた正規表現の検索対象パターンから生成したＮＦＡ（Ｎｏｎ−ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｆｉｎｉｔｅ  Ａｕｔｏｍａｔｏｎ：非決定性有限オートマトン）、又は、ＤＦＡ（Ｄｅｔｅｒｍｉｎｉｓｔｉｃ  Ｆｉｎｉｔｅ  Ａｕｔｏｍａｔｏｎ：決定性有限オートマトン）を用いて行われる。【０００６】
正規表現からＮＦＡ、ＤＦＡへの変換方法については、例えば、非特許文献１（近藤  嘉雪  著、「定本Ｃプログラマのためのアルゴリズムとデータ構造」、ソフトバンクパブリッシング、１９９８年、第２９７−３３０頁）に記載されている。非特許文献１には、正規表現を構文木（Ｓｙｎｔａｘ  Ｔｒｅｅ）に変換し、この構文木からＮＦＡを生成し、このＮＦＡからＤＦＡを生成できることが記載されている。【０００７】
図１は、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”の構文木の一例である。図２は、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”の構文木を変換して得られるＮＦＡの一例である。なお、図２のＮＦＡは、ε遷移（ｅｐｓｉｌｏｎ−ｔｒａｎｓｉｔｉｏｎ）を含まないＮＦＡの一例である。ε遷移とは、入力を待たずに遷移が可能な特殊な遷移である。【０００８】
ある状態における入力文字に対して状態遷移先が１つしか存在しないＤＦＡでは、１文字あたり一定の速度、つまり、Ｏ（１）の処理時間で、パターンマッチングを行うことができる。このため、長さｍの入力ストリーム（検索対象の文字列）に対してはＯ（ｍ）の処理時間が必要となる。ＤＦＡの状態数は、正規表現の長さｎに対して、最悪の場合、Ｏ（２ｎ）で増加する恐れがある。したがって、状態を保持するために必要なメモリ量が爆発的に増大する可能性がある。このことは、特許文献１（特表２００５−５３７５５０号公報）、非特許文献１、非特許文献２（Ｒｅｅｔｉｎｄｅｒ  Ｓｉｄｈｕ、Ｖｉｋｔｏｒ  Ｋ．  Ｐｒａｓａｎｎａ、「Ｆａｓｔ  Ｒｅｇｕｌａｒ  Ｅｘｐｒｅｓｓｉｏｎ  Ｍａｔｃｈｉｎｇ  ｕｓｉｎｇ  ＦＰＧＡｓ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ９ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｃｕｓｔｏｍ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｓ、２００１年、第２２７−２３８頁）にも記載されている。【０００９】
一方、ＮＦＡには、ある状態における入力文字に対して状態遷移先が複数存在する場合がある。この場合のＮＦＡは、逐次処理を行うマイクロプロセッサ上において、１文字あたりＯ（ｎ）の処理時間でパターンマッチングを行う。ここで、ｎは正規表現の長さである。このため、長さｍの入力ストリームに対しては、Ｏ（ｍｎ）の処理時間が必要となるが、その状態数は、Ｏ（ｎ）でしか増加せず、ＤＦＡに比べて小さいことが知られている。【００１０】
近年、例えば、非特許文献２では、ＮＦＡを直接回路化し、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）のような再構成可能なデバイス上に組み込むことで、高速なパターンマッチングを行う手法が提案されている。【００１１】
図３は、非特許文献２において、ＮＦＡを直接回路化するために用いられる基本ブロックの回路図である。この単位回路は、Ｆｌｉｐ−Ｆｌｏｐ（Ｆ／Ｆ）５０２と、Ｃｏｍｐａｒａｔｏｒ（比較器、または比較回路部）６０２と、ＡＮＤゲート８０３とを具備する。ここで、Ｆｌｉｐ−Ｆｌｏｐ５０２は、ＮＦＡの各状態を構成するためのものである。Ｃｏｍｐａｒａｔｏｒ６０２は、当該状態からの遷移条件である文字と入力されるテキスト文字を比較するためのものである。ＡＮＤゲート８０３は、Ｆｌｉｐ−Ｆｌｏｐの出力とＣｏｍｐａｒａｔｏｒの出力を入力して状態遷移信号を生成するためのものである。【００１２】
非特許文献２では、このような構成の基本ブロックを複数用意し、これら複数の基本ブロックを適宜に配置し、さらにＡＮＤゲート、ＯＲゲート等の組み合わせ回路を接続することによって、対象となるＮＦＡを回路化している。【００１３】
図４は、非特許文献２における、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”に対応するパターンマッチング回路の回路図である。このような手法では、ハードウェアによる並列処理の特徴を活かし、ＮＦＡの状態数はＯ（ｎ）のままで、１文字あたりの処理時間をＤＦＡと同じＯ（１）に減少させることが可能である。このため、長さｍの入力ストリームに対してＯ（ｍ）の処理時間でパターンマッチングを行うことが可能となる。【００１４】
一方で、上記のような手法は、ＦＰＧＡ上に組み込む正規表現パターンの変更・追加・削除等の更新を行う場合、ｖｅｒｉｌｏｇ−ＨＤＬやＶＨＤＬ（Ｖｅｒｙ  ｈｉｇｈ−ｓｐｅｅｄ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ  Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）等のＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ：ハードウェア記述言語）の修正、その合成（Ｓｙｎｔｈｅｓｉｓ）、ＦＰＧＡに対するＰＡＲ（Ｐｌａｃｅ  ａｎｄ  Ｒｏｕｔｅ：配置配線）、プログラミングといったＦＰＧＡの再構成処理（以下、ＦＰＧＡのコンパイルと呼ぶ）が必要となる。したがって、１つのパターンだけを更新するためであっても、当該ＦＰＧＡを含むシステム全体の処理を、再構成の間、停止する必要がある。また、上記の理由から、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）化による専用回路化にも適していないという課題がある。【００１５】
そこで、上記の課題を解決する目的で、非特許文献３（Ｄｉｖｙａｓｒｅｅ  Ｊ、Ｒａｊａｓｈｅｋａｒ  Ｈ、Ｋｕｒｕｖｉｌｌａ  Ｖａｒｇｈｅｓｅ、「Ｄｙｎａｍｉｃａｌｌｙ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｒｅｇｕｌａｒ  Ｅｘｐｒｅｓｓｉｏｎ  Ｍａｔｃｈｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １９ｔｈ  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｓｙｓｔｅｍｓ，Ａｒｃｈｉｔｅｃｔｕｒｅｓ  ａｎｄ  Ｐｒｏｃｅｓｓｏｒｓ、２００８年、第１２０−１２５頁）、特許文献１に記載されているような、回路アーキテクチャが提案されている。【００１６】
非特許文献３に示された手法でも、非特許文献２と同様に、複数の基本ブロック（非特許文献３では、Ｂａｓｉｃ  Ｂｌｏｃｋと呼ぶ）を用いてＮＦＡの状態を回路化している。ただし、非特許文献３における回路は、Ｆｌｉｐ−Ｆｌｏｐ、Ｃｏｍｐａｒａｔｏｒからの出力信号等の接続関係において、非特許文献２のものとは若干異なる。【００１７】
また、非特許文献３は、正規表現“Ｒ｛ｎ｝”（正規表現Ｒのｎ回繰り返し）、“Ｒ｛ｎ，ｍ｝”（正規表現Ｒのｎ回以上、ｍ回以下の繰り返し）等の一定回数のＣＲ（Ｃｏｎｓｔｒａｉｎｅｄ  Ｒｅｐｅｔｉｔｉｏｎ：繰り返し）を実現するための８ｂｉｔカウンタ、ＣＲの回数判定を行うＣｏｕｎｔ  Ｄｅｃｏｄｅｒを含み、複数の信号線を選択するＭＵＸ（ＭＵｌｔｉｐｌｅＸｅｒ：マルチプレクサ）をもったＧｅｎｅｒｉｃ  Ｂｌｏｃｋを一列の配列状に並べ、各入出力信号を接続したアーキテクチャを提案している。【００１８】
このアーキテクチャは、ＦＰＧＡ上に構成することを前提としている。また、各Ｇｅｎｅｒｉｃ  ＢｌｏｃｋにおけるＭＵＸやＣｏｕｎｔ  Ｄｅｃｏｄｅｒは、ＦＰＧＡの回路構成を決定するメモリ（ＳＲＡＭ：Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されたＬＵＴ（Ｌｏｏｋ−Ｕｐ  Ｔａｂｌｅ）の内容を変更することで、その動作を決定する。【００１９】
非特許文献３では、Ｘｉｌｉｎｘ社のＦＰＧＡを想定しており、ＳＲＬ（Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ  ＬＵＴ）を用いて、ＬＵＴの内容を変更することを想定している。ただし、ＳＲＬ相当のレジスタやメモリを用意することでＡＳＩＣ化することも可能であると考えられる。【００２０】
本手法では、上記のようにＦＰＧＡ上に実装されたＧｅｎｅｒｉｃ  Ｂｌｏｃｋの中に構成されたＭＵＸの動作を変更する。こうすることで、ＦＰＧＡをコンパイルすることなく、所望の正規表現を構成する動的再構成を実現している。【００２１】
このアーキテクチャでは、Ｇｅｎｅｒｉｃ  Ｂｌｏｃｋが一列の配列状に接続されている。また、あるＧｅｎｅｒｉｃ  Ｂｌｏｃｋから前のＧｅｎｅｒｉｃ  Ｂｌｏｃｋに対するフィードバック信号が１本しか存在しない。これらのこと等から、このアーキテクチャには、構成できる正規表現に制限があるという課題が存在する。例えば、“ａ（ｂｃｄ）＊ｅ”のような正規表現は構成可能であるが、“ａ（ｂ＋ｃｄ）＊ｅ”のようにネスト内にもメタキャラクタが存在するような正規表現は構成できない。【００２２】
また、特許文献１でも、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことができる再構成可能なＮＦＡ回路アーキテクチャが示されている。本アーキテクチャは、ＡＳＩＣ化することを想定しているが、前述のアーキテクチャ同様、ＦＰＧＡでも構成可能であると考えられる。【００２３】
特許文献１のアーキテクチャには、ＮＦＡの状態の役割をもつレジスタ配列と、その状態を表す各レジスタからそれぞれの状態を表す全てのレジスタへの配線が用意されている。さらに、状態間の接続を設定するためのレジスタ配列が用意されており、そのレジスタに設定する値を用いたスイッチ構成により、状態を示すレジスタ間の接続が設定される。また、各状態からその遷移先への状態遷移情報を設定するレジスタ群も用意されており、例えば正規表現のような文字で遷移する際には、このレジスタ群の対応する箇所に遷移条件である文字を設定する。この設定した値は、入力されたテキスト文字と比較され、これが一致していれば、対応する状態遷移に相当する信号と論理積（ＡＮＤ）を取り、状態遷移が成立する。本手法では、状態間の接続情報（スイッチ）を設定するレジスタ配列と、状態遷移情報を設定するレジスタ群を書き換えることで、所望の正規表現が示すＮＦＡを動的に再構成することが可能となる。【００２４】
このアーキテクチャでは、動的にあらゆるＮＦＡを構成することが可能なアーキテクチャとなっている。その一方で、汎用性のために各状態間の配線を用意しているため、状態数Ｎに対して、Ｏ（Ｎ２）で配線数、状態間の接続情報（スイッチ）を設定するレジスタ配列、状態遷移情報を設定するレジスタ群が増加してしまう。つまり、状態数に対してスケーラビリティの面で課題があると考えられる。【００２５】
まとめると、上記のような、正規表現を示すＮＦＡや汎用的なＮＦＡの再構成可能な回路アーキテクチャには、以下のような問題点がある。【００２６】
第１の問題点は、特定の正規表現の一部を構成できるブロック（モジュール）を用意し、それを１次元の配列状に接続した再構成可能ＮＦＡ回路において現れている。このような再構成可能ＮＦＡ回路では、例えば、“ａ（ｂ＋ｃｄ）＊ｅ”のようなネスト内にもメタキャラクタを用いた正規表現は構成することができない。つまり、構成する正規表現に制約条件が存在するというのが第１の問題点である。【００２７】
その理由は、特定の正規表現の一部を構成できるブロック（モジュール）（非特許文献３では、Ｇｅｎｅｒｉｃ  Ｂｌｏｃｋ）は１次元の配列状に接続されており、構成できる正規表現に制約条件が生じるためである。これは、あるブロックから前段のブロックへのフィードバック信号がただ１つしか存在しないためであり、同様に、複数ブロック先へ直接接続すべき信号が複数存在した場合にも、後段のブロックを通過させる信号線の数が限定されているためである。【００２８】
第２の問題点は、状態を表すレジスタから全てのレジスタへの配線を有し、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことで、動的にＮＦＡを構成することが可能なアーキテクチャに現れている。このようなアーキテクチャでは、どのような遷移をもつＮＦＡでも構成できる一方、状態数Ｎに対してそのハードウェア量がＯ（Ｎ２）で増加するため、状態数に対するスケーラビリティの面で課題がある、というのが第２の問題点である。【００２９】
その理由は、本アーキテクチャの特徴でもある、汎用的なＮＦＡを構成可能な回路であることにある。すなわち、各状態間の全ての配線、その状態間の接続情報（スイッチ）を設定するレジスタ配列、状態遷移情報を設定するレジスタ群を用意する必要があるためである。【００３０】
その他、非特許文献４（Ｒｅｅｔｉｎｄｅｒ  Ｓｉｄｈｕ、「Ｅｆｆｉｃｉｅｎｔ  Ｃｏｍｐｕｔａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｅｌｆ−Ｒｅｃｏｎｆｉｇｕｒａｔｉｏｎ」、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｓｏｕｔｈｅｒｎ  Ｃａｌｉｆｏｒｎｉａ  博士論文（Ｐｈ．Ｄ  Ｔｈｅｓｉｓ）、２００５年、第１５９−１６２頁）には、「ノード数ｎ（ｎ＞０）の任意の２分木ｔは、ｎ×（ｌａｙｅｒｓ（ｔ）＋１）個のセル（ｃｅｌｌ）で位置できる」こと、「ノード数２ｎ−１（ｎ＞１）の任意の２分木ｔにおけるｌａｙｅｒｓ（ｔ）は、高々ｎ−１である」ことが示されており、これらのことから、「ノード数２ｎ−１（ｎ＞１）の任意の２分木ｔは、高々（２ｎ−１）×ｎ個のセルで配置できる」ことが示されている。
【先行技術文献】
【特許文献】
【００３１】
【特許文献１】特表２００５−５３７５５０号公報
【非特許文献】
【００３２】
【非特許文献１】近藤  嘉雪  著、「定本Ｃプログラマのためのアルゴリズムとデータ構造」、ソフトバンクパブリッシング、１９９８年、第２９７−３３０頁
【非特許文献２】Ｒｅｅｔｉｎｄｅｒ  Ｓｉｄｈｕ、Ｖｉｋｔｏｒ  Ｋ．  Ｐｒａｓａｎｎａ、「Ｆａｓｔ  Ｒｅｇｕｌａｒ  Ｅｘｐｒｅｓｓｉｏｎ  Ｍａｔｃｈｉｎｇ  ｕｓｉｎｇ  ＦＰＧＡｓ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ９ｔｈ  Ａｎｎｕａｌ  ＩＥＥＥ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｃｕｓｔｏｍ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｓ、２００１年、第２２７−２３８頁
【非特許文献３】Ｄｉｖｙａｓｒｅｅ  Ｊ、Ｒａｊａｓｈｅｋａｒ  Ｈ、Ｋｕｒｕｖｉｌｌａ  Ｖａｒｇｈｅｓｅ、「Ｄｙｎａｍｉｃａｌｌｙ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｒｅｇｕｌａｒ  Ｅｘｐｒｅｓｓｉｏｎ  Ｍａｔｃｈｉｎｇ  Ａｒｃｈｉｔｅｃｔｕｒｅ」、Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １９ｔｈ  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ａｐｐｌｉｃａｔｉｏｎ−Ｓｐｅｃｉｆｉｃ  Ｓｙｓｔｅｍｓ，Ａｒｃｈｉｔｅｃｔｕｒｅｓ  ａｎｄ  Ｐｒｏｃｅｓｓｏｒｓ、２００８年、第１２０−１２５頁
【非特許文献４】Ｒｅｅｔｉｎｄｅｒ  Ｓｉｄｈｕ、「Ｅｆｆｉｃｉｅｎｔ  Ｃｏｍｐｕｔａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｅｌｆ−Ｒｅｃｏｎｆｉｇｕｒａｔｉｏｎ」、Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｓｏｕｔｈｅｒｎ  Ｃａｌｉｆｏｒｎｉａ  博士論文（Ｐｈ．Ｄ  Ｔｈｅｓｉｓ）、２００５年、第１５９−１６２頁
【発明の概要】
【００３３】
本発明の目的は、構成できる正規表現に制約の少ないオートマトン回路と、この回路を用いたパターンマッチング装置と、この装置を用いるパターンマッチング方法とを提供することにある。
【００３４】
本発明によるパターンマッチング装置は、設定用制御回路（Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ）と、オートマトン回路とを具備する。ここで、設定用制御回路は、テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データをオートマトン回路に設定するものである。構成データに基づいて、正規表現に対応する設定を行い、正規表現とのパターンマッチングを行うためのものである。なお、この設定は再設定可能である。また、オートマトン回路は、キャラクタノード回路部と、メタキャラクタノード回路部と、スイッチノード回路部とを具備する。ここで、キャラクタノード回路部は、正規表現におけるキャラクタに対応するデータを格納するものである。メタキャラクタノード回路部は、正規表現におけるメタキャラクタに対応するデータを格納し、キャラクタノード回路部との接続関係の設定を行うものである。なお、このメタキャラクタノード回路部は、他のメタキャラクタノード回路部との接続関係の設定をも行う。スイッチノード回路部は、メタキャラクタノード回路部同士の接続関係の設定を行うものである。
【００３５】
本発明によるパターンマッチング方法は、（ａ）テキスト文字であるキャラクタと、所定の機能的意味を持つメタキャラクタとを組み合わせた任意の正規表現に対応する、所定の形式を有する構成データを生成するステップと、（ｂ）構成データに基づいて、オートマトン回路に正規表現に対応する設定を行うステップと、（ｃ）オートマトン回路を用いてパターンマッチングを行うステップとを具備する。なお、ステップ（ｂ）の設定は、再設定可能である。また、ステップ（ｂ）は、（ｂ−１）オートマトン回路におけるキャラクタノード回路部に、正規表現におけるキャラクタに対応するデータを格納するステップと、（ｂ−２）オートマトン回路におけるメタキャラクタノード回路部に、正規表現におけるメタキャラクタに対応するデータを格納し、キャラクタノードまたは他のメタキャラクタノードとの接続関係の設定を行うステップと、（ｂ−３）オートマトン回路におけるスイッチノード回路部に、メタキャラクタノード同士の接続関係の設定を行うステップとを具備する。
【００３６】
本発明のオートマトン回路と、パターンマッチング装置と、パターンマッチング方法とによれば、所定の形式を有する構成データに変換することで、以下の条件を満たす正規表現を入力できる。すなわち、‘｜’、‘＊’、‘・’の３種類のメタキャラクタだけを用いて表現可能な正規表現であり、かつ、含まれるテキスト文字、メタキャラクタの総数が、オートマトン回路における１つのＧｅｎｅｒｉｃ  Ｌｏｇｉｃにおけるｃｈａｒ＿ｎｏｄｅとｍｃｈａｒ＿ｎｏｄｅの総数に依存する長さ以内で記述できる正規表現である。また、オートマトン回路の内部における接続関係を、構成データに応じて変更するので、本発明によるオートマトン回路は再構成可能である。
【図面の簡単な説明】
【００３７】
上記発明の目的、効果、特徴は、添付される図面と連携して実施の形態の記述から、より明らかになる。【００３８】
【図１】図１は、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”の構文木の一例である。
【図２】図２は、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”の構文木を変換して得られるＮＦＡの一例である。
【図３】図３は、非特許文献２において、ＮＦＡを直接回路化するために用いられる基本ブロックの回路図である。
【図４】図４は、非特許文献２における、正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”に対応するパターンマッチング回路の回路図である。
【図５】図５は、本発明の第１の実施形態によるパターンマッチング装置の構成を説明するためのブロック図である。
【図６】図６は、本発明の第１の実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃの構成を説明するためのブロック図である。
【図７】図７は、本発明によるｃｈａｒ＿ｎｏｄｅの入出力部について説明するためのブロック図である。
【図８】図８は、本発明によるｍｃｈａｒ＿ｎｏｄｅの入出力部を説明するためのブロック図である。
【図９】図９は、本発明の第１の実施形態によるｓｎｏｄｅの入出力部について説明するためのブロック図である。
【図１０Ａ】図１０Ａは根ノードの左の子ノードを根とする部分木ｌのｌａｙａｒｓ（ｌ）と根ノードの右の子ノードを根とする部分木ｒのｌａｙｅｒｓ（ｒ）が異なるノード数ｎの２分木ｔを配置した場合の概念図である。
【図１０Ｂ】図１０Ｂは根ノードの左の子ノードを根とする部分木ｌのｌａｙａｒｓ（ｌ）と根ノードの右の子ノードを根とする部分木ｒのｌａｙｅｒｓ（ｒ）が等しいノード数ｎの２分木ｔを配置した場合の概念図である。
【図１１】図１１は、ノード数が１５である２分木の一例について説明するためのグラフである。
【図１２Ａ】図１２Ａは、図１１の２分木に基づいて、本発明で用いる配置方法に従ってセルを配置した結果を示す図である。
【図１２Ｂ】図１２Ｂは、図１２Ａに示した配置をＧｅｎｅｒｉｃ  Ｌｏｇｉｃに当てはめた場合の概念図を示す図である。
【図１３Ａ】図１３Ａは、本発明によるノード配置方法を正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”に適用して得られる構文木の一例について説明するためのグラフである。
【図１３Ｂ】図１３Ｂは、本発明によるノード配置方法を正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”に適用して得られる構文木の一例について説明するためのグラフである。
【図１４】図１４は、本発明の第１の実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃで図１３Ａの構文木を具現化した例について説明するためのブロック図である。
【図１５】図１５は、本発明の実施例１におけるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャを説明するための回路図である。
【図１６】図１６は、本発明によるｍｃｈａｒ＿ｎｏｄｅの内部構造を説明するためのブロック図である。
【図１７】図１７は、本発明の第１の実施形態によるｓｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。
【図１８】図１８は、本発明の実施例２によるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。
【図１９】図１９は、本発明の実施例１によるノード配置方法を正規表現“ａｂ＊（ｃ｜ｄ）ｅ”に適用して得られる構文木の一例について説明するためのグラフである。
【図２０】図２０は、本発明の実施例２によるノード配置方法を正規表現“ａｂ＊（ｃ｜ｄ）ｅ”に適用して得られる構文木の一例について説明するためのグラフである。
【図２１】図２１は、本発明の実施例３によるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。
【図２２】図２２は、本発明の第２の実施形態によるパターンマッチング装置の構成について説明するためのブロック図である。
【図２３】図２３は、本発明の第２の実施形態による４分木を再構成可能なＧｅｎｅｒｉｃ  Ｌｏｇｉｃの構成について説明するためのブロック図である。
【図２４】図２４は、本発明の第２の実施形態によるＭ＋１入力Ｍ＋１出力ｓｎｏｄｅにおいて、Ｍ＝４とし、ＦＰＧＡ上に実装するとした場合の構成例について説明するための回路図である。
【発明を実施するための形態】
【００３９】
以下、添付図面を参照して、本発明によるオートマトン回路と、この回路を用いたパターンマッチング装置と、この装置を用いたパターンマッチング方法とを実施するための形態を以下に説明する。
【００４０】
（第１の実施形態）
図５は、本発明の第１の実施形態によるパターンマッチング装置の構成を説明するためのブロック図である。本実施形態によるパターンマッチング装置は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１と、記憶装置２と、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３とを具備する。ここで、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、ＮＦＡを構成するハードウェア回路であるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３内に存在する設定レジスタ、又は設定メモリの設定値を書き換えることで、構文木で表現できる任意の正規表現を設定する設定用制御回路である。記憶装置２は、設定する構成データ（Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａ）を記憶するものである。Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａとして伝達される構文木で表現できる任意の正規表現を構成する再構成可能有限オートマトン回路である。
【００４１】
Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、記憶装置２と、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３の双方に接続されている。
【００４２】
図５には、１つの有限オートマトンを構成することができるＧｅｎｅｒｉｃ  Ｌｏｇｉｃが１つだけ描かれている。しかし、本実施形態によるパターンマッチング装置は、この構成に限定されない。すなわち、本実施形態によるパターンマッチング装置は、このＧｅｎｅｒｉｃ  Ｌｏｇｉｃを複数個含むことができる。さらに、各Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃは、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒによってその構成を変更できるものである。
【００４３】
また、本実施形態によるパターンマッチング装置は、上記以外にも、その動作を制御するためのクロック信号（ｃｌｏｃｋ）、有限オートマトン等の初期化を行うリセット信号（ｒｅｓｅｔ）、さらに評価結果を示す追加の制御信号を用いる。
【００４４】
記憶装置２は、メモリ等の記憶媒体を具備する。記憶装置２は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１からの制御信号に応じて、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａの記憶、又は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａの読み出しを行う。
【００４５】
Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、外部からのコマンド信号（Ｃｏｍｍａｎｄ）に応じて、その動作を決定する。本Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１の動作機能としては、以下の機能が挙げられる。
【００４６】
（１）外部から入力されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを記憶装置２へ記憶させる。
【００４７】
（２）外部から入力されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを直接Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに設定する。
【００４８】
（３）記憶装置２に記憶されているＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを読み出し、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに設定する。
【００４９】
（４）記憶装置２に記憶されているＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを読み出し、外部へ出力する。
【００５０】
（５）記憶装置２に記憶されているＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを読み出し、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに設定すると共に、同時に外部へ出力する。
【００５１】
（６）Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに設定されているＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを読み出し、外部へ出力する。
【００５２】
外部からのコマンド信号は、上記に示すＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１の６つの動作機能のうちのどれを実行するのかを示す動作制御信号と、その動作の開始を知らせるタイミング信号を含む。また、複数のＧｅｎｅｒｉｃ  Ｌｏｇｉｃを含む構成である場合には、本コマンド信号には、どのＧｅｎｅｒｉｃ  Ｌｏｇｉｃに対する動作を行うのかを示す指定制御情報を含む。
【００５３】
Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、コマンド信号に応じて、記憶装置２の所定のアドレス範囲にＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを記憶し、また、所定のアドレス範囲に記憶されているＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを読み出す、などの制御を行う。
【００５４】
Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１により設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって特定の正規表現を表す有限オートマトンを構成する再構成可能な有限オートマトン回路である。正規表現を用いたパターンマッチは、本回路に入力される文字列に対して行われる。この文字列は、１クロックサイクルに１文字（＝８ｂｉｔ）ずつ入力される。
【００５５】
図６は、本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃの構成を説明するためのブロック図である。図６のＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、キャラクタノード（ｃｈａｒ＿ｎｏｄｅ）１００〜１０４と、メタキャラクタノード（ｍｃｈａｒ＿ｎｏｄｅ）２００〜２０３と、３入力３出力のスイッチノード（ｓｎｏｄｅ）３００〜３０５と、マルチプレクサ（ＭＵＸ）４００〜４０３とを具備する。ここで、ｃｈａｒ＿ｎｏｄｅ１００〜１０４はそれぞれ、正規表現におけるテキスト文字に対応する。また、ｍｃｈａｒ＿ｎｏｄｅ２００〜２０３はそれぞれ、メタキャラクタに対応する。
【００５６】
ここで、ｃｈａｒ＿ｎｏｄｅ１００〜１０４と、ｍｃｈａｒ＿ｎｏｄｅ２００〜２０３と、ｓｎｏｄｅ３００〜３０５と、ＭＵＸ４００〜４０３とにおける接続関係について説明する。
【００５７】
ｓｎｏｄｅ３０１の第１の出力部は、ｓｎｏｄｅ３００の第１の入力部に接続されている。ｓｎｏｄｅ３０１の第２の出力部は、ｓｎｏｄｅ３０２の第１の入力部に接続されている。
【００５８】
ｓｎｏｄｅ３００の第１の出力部は、ｓｎｏｄｅ３０１の第１の入力部に接続されている。ｓｎｏｄｅ３００の第２の出力部は、ＭＵＸ４００の第１の入力部に接続されている。ｓｎｏｄｅ３００の第３の出力部は、ＭＵＸ４０１の第１の入力部に接続されている。
【００５９】
ｓｎｏｄｅ３０２の第１の出力部は、ｓｎｏｄｅ３０１の第２の入力部に接続されている。ｓｎｏｄｅ３０２の第２の出力部は、ＭＵＸ４０２の第１の入力部に接続されている。ｓｎｏｄｅ３０２の第３の出力部は、ＭＵＸ４０３の第１の入力部に接続されている。
【００６０】
ｓｎｏｄｅ３０４の第１の出力部は、ｓｎｏｄｅ３０３の第１の入力部に接続されている。ｓｎｏｄｅ３０４の第２の出力部は、ｓｎｏｄｅ３０５の第１の入力部に接続されている。
【００６１】
ｓｎｏｄｅ３０３の第１の出力部は、ｓｎｏｄｅ３０４の第１の入力部に接続されている。ｓｎｏｄｅ３０３の第２の出力部は、ＭＵＸ４００の第２の入力部に接続されている。ｓｎｏｄｅ３０３の第３の出力部は、ＭＵＸ４０１の第２の入力部に接続されている。
【００６２】
ｓｎｏｄｅ３０５の第１の出力部は、ｓｎｏｄｅ３０４の第２の入力部に接続されている。ｓｎｏｄｅ３０５の第２の出力部は、ＭＵＸ４０２の第２の入力部に接続されている。ｓｎｏｄｅ３０５の第３の出力部は、ＭＵＸ４０３の第２の入力部に接続されている。
【００６３】
ＭＵＸ４００の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２００の第１の入力部に接続されている。
【００６４】
ＭＵＸ４０１の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０１の第１の入力部に接続されている。
【００６５】
ＭＵＸ４０２の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０２の第１の入力部に接続されている。
【００６６】
ＭＵＸ４０３の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０３の第１の入力部に接続されている。
【００６７】
ｍｃｈａｒ＿ｎｏｄｅ２００の第１の出力部は、ｓｎｏｄｅ３００の第２の入力部およびｓｎｏｄｅ３０３の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２００の第２の出力部は、ｃｈａｒ＿ｎｏｄｅ１００の第１の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２００の第３の出力部は、ｃｈａｒ＿ｎｏｄｅ１０１の第１の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２００の第４の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０１の第２の入力部に接続されている。
【００６８】
ｍｃｈａｒ＿ｎｏｄｅ２０１の第１の出力部は、ｓｎｏｄｅ３００の第３の入力部およびｓｎｏｄｅ３０３の第３の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０１の第２の出力部は、ｃｈａｒ＿ｎｏｄｅ１０１の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０１の第３の出力部は、ｃｈａｒ＿ｎｏｄｅ１０２の第１の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０１の第４の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２００の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０１の第５の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０２の第２の入力部に接続されている。
【００６９】
ｍｃｈａｒ＿ｎｏｄｅ２０２の第１の出力部は、ｓｎｏｄｅ３０２の第２の入力部およびｓｎｏｄｅ３０５の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０２の第２の出力部は、ｃｈａｒ＿ｎｏｄｅ１０２の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０２の第３の出力部は、ｃｈａｒ＿ｎｏｄｅ１０３の第１の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０２の第４の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０１の第３の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０２の第５の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０３の第２の入力部に接続されている。
【００７０】
ｍｃｈａｒ＿ｎｏｄｅ２０３の第１の出力部は、ｓｎｏｄｅ３０２の第３の入力部およびｓｎｏｄｅ３０５の第３の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０３の第２の出力部は、ｃｈａｒ＿ｎｏｄｅ１０３の第２の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０３の第３の出力部は、ｃｈａｒ＿ｎｏｄｅ１０４の第１の入力部に接続されている。ｍｃｈａｒ＿ｎｏｄｅ２０３の第４の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０２の第３の入力部に接続されている。
【００７１】
ｃｈａｒ＿ｎｏｄｅ１００の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２００の第３の入力部に接続されている。
【００７２】
ｃｈａｒ＿ｎｏｄｅ１０１の第１の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２００の第４の入力部に接続されている。ｃｈａｒ＿ｎｏｄｅ１０１の第２の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０１の第４の入力部に接続されている。
【００７３】
ｃｈａｒ＿ｎｏｄｅ１０２の第１の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０１の第５の入力部に接続されている。ｃｈａｒ＿ｎｏｄｅ１０２の第２の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０２の第４の入力部に接続されている。
【００７４】
ｃｈａｒ＿ｎｏｄｅ１０３の第１の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０２の第５の入力部に接続されている。ｃｈａｒ＿ｎｏｄｅ１０３の第２の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０３の第３の入力部に接続されている。
【００７５】
ｃｈａｒ＿ｎｏｄｅ１０４の出力部は、ｍｃｈａｒ＿ｎｏｄｅ２０３の第４の入力部に接続されている。
【００７６】
以上の接続関係を言い換えれば、本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、ｍｃｈａｒ＿ｎｏｄｅを葉、ｓｎｏｄｅを葉でないノードとした２分木（ｂｉｎａｒｙ  ｔｒｅｅ）が複数（図６では２つ）存在する形で構成される。より具体的には、葉ノードであるｍｃｈａｒ＿ｎｏｄｅは各２分木に共通であり、ＭＵＸはこの葉ノードを複数の２分木で共通に使用するための役割を果たす。
【００７７】
なお、図６のＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、５文字以内のテキスト文字と、４文字以内のメタキャラクタから構成される正規表現を構成できる有限オートマトン回路である。図６のＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、２つの２分木を具備する。ここで、第１の２分木は、ｓｎｏｄｅ３０１を根ノードとして、ｓｎｏｄｅ３００、３０２、ｍｃｈａｒ＿ｎｏｄｅ２００〜２０３を具備する。また、第２の２分木は、ｓｎｏｄｅ３０４を根ノードとして、ｓｎｏｄｅ３０３、３０５、ｍｃｈａｒ＿ｎｏｄｅ２００〜２０３を具備する。
【００７８】
より多くのテキスト文字、メタキャラクタを含む正規表現を構成することができるＧｅｎｅｒｉｃ  Ｌｏｇｉｃについても構成可能である。すなわち、本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、図６の例とは異なる数のｃｈａｒ＿ｎｏｄｅおよびｍｃｈａｒ＿ｎｏｄｅを具備しても良い。その場合、ＭＵＸの数はｍｃｈａｒ＿ｎｏｄｅの数と同様に変化する。さらに、ｓｎｏｄｅの総数はＭＵＸの数に応じて変化し、多段式に接続されているｓｎｏｄｅの段数はｓｎｏｄｅの総数に応じて変化する。その構成方法については後ほど説明する。
【００７９】
図７は、本発明によるｃｈａｒ＿ｎｏｄｅの入出力部について説明するためのブロック図である。このｃｈａｒ＿ｎｏｄｅ１０は、ｌｉ信号入力部と、ｒｉ信号入力部と、テキスト文字入力部と、ｌｏ信号出力部と、ｒｏ信号出力部とを具備する。
【００８０】
ここで、ｌｉ信号は、そのｃｈａｒ＿ｎｏｄｅの左に隣接するｍｃｈａｒ＿ｎｏｄｅから入力する１ｂｉｔの入力信号である。ｒｉ信号は、そのｃｈａｒ＿ｎｏｄｅの右に隣接するｍｃｈａｒ＿ｎｏｄｅから入力する１ｂｉｔの入力信号である。ｌｏ信号は、そのｃｈａｒ＿ｎｏｄｅの左に隣接するｍｃｈａｒ＿ｎｏｄｅへ出力する１ｂｉｔの出力信号である。ｒｏ信号は、そのｃｈａｒ＿ｎｏｄｅの右に隣接するｍｃｈａｒ＿ｎｏｄｅへ出力する１ｂｉｔの出力信号である。
【００８１】
また、テキスト文字入力部には、パターンマッチングを行う対象となるテキスト文字が１クロックサイクル毎に１文字ずつ供給される。
【００８２】
なお、左右一列に並んで配置されている複数のｃｈａｒ＿ｎｏｄｅのうち、左端のｃｈａｒ＿ｎｏｄｅは、当然ながらｌｉ信号入力部とｌｏ信号出力部とを必要としない。同様に、右端のｃｈａｒ＿ｎｏｄｅは、当然ながらｒｉ信号入力部とｒｏ信号出力部とを必要としない。これら必要とされない入出力部は、省略可能である。
【００８３】
本実施形態によるｃｈａｒ＿ｎｏｄｅ１０の内部構成は、図３に示すＮＦＡを直接埋め込んだハードウェア回路における基本ブロックと同様の構成である。すなわち、本実施形態によるｃｈａｒ＿ｎｏｄｅは、Ｆｌｉｐ−Ｆｌｏｐ５０２と、Ｃｏｍｐａｒａｔｏｒ（比較器）６０２と、ＡＮＤゲート８０３とを具備する。ここで、Ｆｌｉｐ−Ｆｌｏｐ５０２の出力部およびＣｏｍｐａｒａｔｏｒ６０２の出力部は、ＡＮＤゲート８０３の両入力部にそれぞれ接続されている。
【００８４】
ただし、本実施形態によるｃｈａｒ＿ｎｏｄｅ１０は、ｌｉ信号と、ｒｉ信号の２つの信号を入力する。したがって、図３の信号入力部（Ｉｎｐｕｔ）の前段において、２つの入力信号の一方を選択する必要がある。この入力信号の選択は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって構成される有限オートマトンに依存する。
【００８５】
また、本実施形態によるｃｈａｒ＿ｎｏｄｅ１０の出力信号については、図３の出力信号（Ｏｕｔｐｕｔ）がそのままｌｏとｒｏの両出力信号として同時に出力されてもよい。または、選択された入力信号と同じｍｃｈａｒ＿ｎｏｄｅへの出力信号としてのみ出力するための選択回路を後段に追加しても良い。
【００８６】
図８は、本発明によるｍｃｈａｒ＿ｎｏｄｅの入出力部を説明するためのブロック図である。このｍｃｈａｒ＿ｎｏｄｅ２０は、ｐｉ信号入力部と、Ｌｉ信号入力部と、Ｒｉ信号入力部と、ｌｉ信号入力部と、ｒｉ信号入力部と、ｐｏ信号出力部と、Ｌｏ信号出力部と、Ｒｏ信号出力部と、ｌｏ信号出力部と、ｒｏ信号出力部とを具備する。
【００８７】
ここで、ｐｉ信号は、そのｍｃｈａｒ＿ｎｏｄｅの上部にあるＭＵＸから供給される１ｂｉｔの入力信号である。Ｌｉ信号およびＲｉ信号は、そのｍｃｈａｒ＿ｎｏｄｅの左右に隣接する２つのｍｃｈａｒ＿ｎｏｄｅからそれぞれ供給される１ｂｉｔの入力信号である。ｌｉ信号およびｒｉ信号は、そのｍｃｈａｒ＿ｎｏｄｅの左右に隣接する２つのｃｈａｒ＿ｎｏｄｅからそれぞれ供給される１ｂｉｔの入力信号である。
【００８８】
また、ｐｏ信号は、そのｍｃｈａｒ＿ｎｏｄｅの上部にある対応する複数のｓｎｏｄｅへ出力される１ｂｉｔの出力信号である。Ｌｏ信号およびＲｏ信号は、そのｍｃｈａｒ＿ｎｏｄｅの左右に隣接する２つのｍｃｈａｒ＿ｎｏｄｅへそれぞれ出力される１ｂｉｔの出力信号である。ｌｏ信号およびｒｏ信号は、そのｍｃｈａｒ＿ｎｏｄｅの左右に隣接する２つのｃｈａｒ＿ｎｏｄｅへそれぞれ出力される１ｂｉｔの出力信号である。
【００８９】
なお、左右一列に配置された複数のｍｃｈａｒ＿ｎｏｄｅのうち、左端のｍｃｈａｒ＿ｎｏｄｅは、当然ながら、Ｌｉ信号入力部、Ｌｏ信号出力部を必要としない。同様に、右端のｍｃｈａｒ＿ｎｏｄｅも、当然ながら、Ｒｉ信号入力部、Ｒｏ信号出力部を必要としない。これら必要とされない入出力部は、省略可能である。
【００９０】
ｍｃｈａｒ＿ｎｏｄｅ２０の内部では、５つの入力信号の論理演算によって各出力信号が生成される。この論理演算は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって構成される有限オートマトンに依存する。
【００９１】
図９は、本実施形態によるｓｎｏｄｅの入出力部について説明するためのブロック図である。このｓｎｏｄｅ３０は、ｉ０信号入力部と、ｉ１信号入力部と、ｉ２信号入力部と、ｏ０信号出力部と、ｏ１信号出力部と、ｏ２信号出力部とを具備する。
【００９２】
ここで、ｉ０信号は、そのｓｎｏｄｅの上部にあるｓｎｏｄｅから供給される１ｂｉｔの入力信号である。ｉ１信号は、そのｓｎｏｄｅの左に隣接するｓｎｏｄｅ、又はｍｃｈａｒ＿ｎｏｄｅから供給される１ｂｉｔの入力信号である。ｉ２信号は、そのｓｎｏｄｅの右に隣接するｓｎｏｄｅ、又はｍｃｈａｒ＿ｎｏｄｅから供給される１ｂｉｔの入力信号である。
【００９３】
また、ｏ０信号は、そのｓｎｏｄｅの上部にあるｓｎｏｄｅへ出力される１ｂｉｔの出力信号である。ｏ１信号は、そのｓｎｏｄｅの左に隣接するｓｎｏｄｅ、又はＭＵＸへ出力される１ｂｉｔの出力信号である。ｏ２信号は、そのｓｎｏｄｅの右に隣接するｓｎｏｄｅ、又はＭＵＸへ出力される１ｂｉｔの出力信号である。
【００９４】
ｓｎｏｄｅ３０は、その内部において、３つの入力信号のうちのいずれかを各出力信号に接続するスイッチを具備する。各出力信号のそれぞれがどの入力信号を選択的に出力するかは、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって構成される有限オートマトンに依存する。
【００９５】
次に、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３の動作の説明を行う前段階として、まず、２分木の各ノードを一列に並べた際の配置方法について説明する。非特許文献４には、この配置方法を用いると、「ノード数ｎ（ｎ＞０）の任意の２分木ｔは、ｎ×（ｌａｙｅｒｓ（ｔ）＋１）個のセル（ｃｅｌｌ）で位置できる」こと、「ノード数２ｎ−１（ｎ＞１）の任意の２分木ｔにおけるｌａｙｅｒｓ（ｔ）は、高々ｎ−１である」ことが示されており、これらのことから、「ノード数２ｎ−１（ｎ＞１）の任意の２分木ｔは、高々（２ｎ−１）×ｎ個のセルで配置できる」ことが示されている。以下では、上記の非特許文献４が示している配置方法について説明する。
【００９６】
図１０Ａ、図１０Ｂは、２分木の変換における、セルとｌａｙｅｒｓ（ｔ）について説明するための概念図である。この図に基づいて、上記のセルとｌａｙｅｒｓ（ｔ）について、以下に補足する。なお、図１０Ａ、図１０Ｂは、非特許文献４で示されている図に、補足説明を加えた図である。
【００９７】
セルは、ノード自身と、ノードを中心に上下左右の４方向に接続ポートを持ち得るブロックとして定義される。すなわち、ノードを含まず、ノード間の接続のために配置されるセルも存在し得る。
【００９８】
セルがノードを含む場合、そのセルは最下位層に配置されるものとする。このため、ノードを含むセルは、４方向のうち、上と左右の３方向の接続ポートのみを使用できる。
【００９９】
また、ノードを含まないセルが、例えば、上下のポートを接続した配線と左右のポートを接続した配線とを具備する場合、これら２本の配線はお互いに交差することはできないものとする。
【０１００】
通常、２分木では、任意の１ノードは最大で３ノードと接続する。ここで、使用されていない上方向のポートが存在する場合は、この上方向のポートを、隣接するノードが上方向のセルと接続するためのポートとして使用しても良い。
【０１０１】
本配置方法では、２分木ｔの根ノードを右端に配置する。また、根ノードの左の子ノードを根とする部分木（Ｌｅｆｔ−Ｓｕｂｔｒｅｅ）ｌと、根ノードの右の子ノードを根とする部分木（Ｒｉｇｈｔ−Ｓｕｂｔｒｅｅ）ｒを左から順に配置する。
【０１０２】
各部分木についても同様に、根ノードを右端に配置し、根ノードの左の子ノードを根とする部分木と、根ノードの右の子ノードを根とする部分木を、左から順に配置していく。
【０１０３】
このとき、ノード数ｎ（ｎ＞０）の任意の２分木ｔは、ｎ×（ｌａｙｅｒｓ（ｔ）＋１）個のセル（ｃｅｌｌ）で配置できることが知られている。
【０１０４】
非特許文献４では、これらの縦横に並んだセルに２分木ｔを配置する際、ノードを含まないセルの高さをもってｌａｙｅｒｓ（ｔ）と定義している。また、その算出方法は以下のように定義されている。
１．２分木ｔがノード数０の場合、ｌａｙｅｒｓ（ｔ）＝−１
２．２分木ｔが根ノードの左の子ノードを根とする部分木ｌ、根ノードの右の子ノードを根とする部分木ｒで構成されるとき、
２．１  ｌａｙｅｒｓ（ｌ）とｌａｙｅｒｓ（ｒ）が異なる場合、
ｌａｙｅｒｓ（ｔ）＝ｍａｘ｛ｌａｙｅｒｓ（ｌ），ｌａｙｅｒｓ（ｒ）｝
２．２  ｌａｙｅｒｓ（ｌ）とｌａｙｅｒｓ（ｒ）が等しい場合、
ｌａｙｅｒｓ（ｔ）＝ｌａｙｅｒｓ（ｌ）＋１
例えば、図１０Ａは根ノードの左の子ノードを根とする部分木ｌのｌａｙａｒｓ（ｌ）と根ノードの右の子ノードを根とする部分木ｒのｌａｙｅｒｓ（ｒ）が異なるノード数ｎの２分木ｔを配置した場合の概念図である。また、図１０Ｂは根ノードの左の子ノードを根とする部分木ｌのｌａｙａｒｓ（ｌ）と根ノードの右の子ノードを根とする部分木ｒのｌａｙｅｒｓ（ｒ）が等しいノード数ｎの２分木ｔを配置した場合の概念図である。図１０Ａの場合、２分木ｔは、ｎ×（ｌａｙｅｒｓ（ｌ）＋１）セルで配置されており、ｌａｙｅｒｓ（ｔ）はｌａｙｅｒｓ（ｌ）と等しくなるため、ｎ×（ｌａｙｅｒｓ（ｔ）＋１）セルで配置可能である。また、図１０Ｂの場合、２分木ｔは、ｎ×（ｌａｙｅｒｓ（ｌ）＋２）セルで配置されており、ｌａｙｅｒｓ（ｔ）はｌａｙｅｒｓ（ｌ）＋１と等しくなるため、ｎ×（ｌａｙｅｒｓ（ｔ）＋１）セルで配置可能となる。
【０１０５】
なお、本配置方法では、基本的には帰りがけ順（ｐｏｓｔｏｒｄｅｒ  ｔｒａｖｅｒｓａｌ）によって２分木ｔを辿ればノードの配置順が決まる。ただし、部分木ｌと部分木ｒに対するｌａｙｅｒｓの値、ｌａｙｅｒｓ（ｌ）とｌａｙｅｒｓ（ｒ）のうち、大きなｌａｙｅｒｓの値をもつ部分木を左の部分木としている。つまり、ｌａｙｅｒｓ（ｌ）よりもｌａｙｅｒｓ（ｒ）の方が大きければ、左の部分木ｌと右の部分木ｒを入れ替える。
【０１０６】
図１１は、ノード数が１５である２分木の一例について説明するためのグラフである。図１２Ａは、図１１の２分木に基づいて、本発明で用いる配置方法に従ってセルを配置した結果を示す図である。
【０１０７】
ここで、１５＝２４−１なので、ｎ＝４が得られる。この場合、最大１５×４個のセルで配置できることが分かる。実際に、図１１に示す２分木ｔに対してはｌａｙｅｒｓ（ｔ）＝２であり、１５×３個のセルで配置できる。したがって、上記に示した必要セル数の条件を満たしている。詳細は省略するが、ノード数１５の完全２分木を考えた場合、ｌａｙｅｒｓ（ｔ）＝３となり、これも上記条件を満たす。
【０１０８】
図１０Ａ、図１０Ｂ、図１１、図１２Ａより、このｌａｙｅｒｓは、２分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルであることが分かる。このため、以降、これを“Ｒｏｕｔｉｎｇ  Ｌａｙｅｒ”と呼ぶ。
【０１０９】
上記を踏まえて、Ｍ文字のメタキャラクタと、Ｎ文字のテキスト文字を含む正規表現を表す有限オートマトン回路であるＧｅｎｅｒｉｃ  Ｌｏｇｉｃの構成方法を考える。
【０１１０】
本発明において扱うことができる正規表現は、ＯＲを意味する‘｜’、０回以上マッチすることを意味する‘＊’に加え、連結（Ｃｏｎｃａｔｅｎａｔｉｏｎ）を意味する記号‘・’を用いて構文木で表現できる正規表現である。以降、この連結を意味する記号‘・’もメタキャラクタとして扱う。
【０１１１】
例えば、Ｎ１、Ｎ２がそれぞれ正規表現だとすると、正規表現“Ｎ１｜Ｎ２”はＮ１、もしくは、Ｎ２に一致することを意味する。同様に、正規表現“Ｎ１＊”は、Ｎ１が０回以上一致することを意味する。さらに、正規表現“Ｎ１・Ｎ２”は、Ｎ１の次にＮ２が連続することを意味する。
【０１１２】
これ以外のメタキャラクタを含む正規表現は、これらのメタキャラクタのみを含む正規表現に書き換えることで対応する。
【０１１３】
図６に示すように、本実施形態のＧｅｎｅｒｉｃ  Ｌｏｇｉｃにおいて、テキスト文字に対応するｃｈａｒ＿ｎｏｄｅは、メタキャラクタに対応するｍｃｈａｒ＿ｎｏｄｅの下位層に配置されている。また、ｃｈａｒ＿ｎｏｄｅの数はｍｃｈａｒ＿ｎｏｄｅの数よりも１つ多い。つまり、Ｎ＝ｍｃｈａｒ＿ｎｏｄｅの数と置き、Ｍ＝ｃｈａｒ＿ｎｏｄｅの数と置くと、Ｍ＝Ｎ＋１の関係が得られる。本Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃは、メタキャラクタをＮ文字、テキスト文字をＮ＋１文字含む正規表現に対応することができる。
【０１１４】
このとき、ノード数Ｎの２分木に必要なＲｏｕｔｉｎｇ  Ｌａｙｅｒ数は、上記の非特許文献４より、最大ｌｏｇ２（Ｎ＋１）−１となる。なお、ノード数２ｎ−１＝Ｎとすると、ｎ＝ｌｏｇ２（Ｎ＋１）であることから、ｌａｙｅｒ数は最大ｎ−１＝ｌｏｇ２（Ｎ＋１）−１であることは明らかである。
【０１１５】
上述したように、このＲｏｕｔｉｎｇ  Ｌａｙｅｒは、２分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルであり、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃにおけるｍｃｈａｒ＿ｎｏｄｅを葉ノード、ｓｎｏｄｅをノードとした２分木の必要数に関連する。本２分木には、あるｍｃｈａｒ＿ｎｏｄｅ間を接続した場合に利用するため、当該ｍｃｈａｒ＿ｎｏｄｅ間において双方向の信号線が具備されている。しかし、同じレイヤ番号に相当するｍｃｈａｒ＿ｎｏｄｅ間の接続が、同一ｓｎｏｄｅ間の信号線を利用しなければならない場合がある。例えば、図１２Ｂは、図１２Ａに示した配置方法をＧｅｎｅｒｉｃ  Ｌｏｇｉｃに当てはめた場合の概念図を示している。但し、正規表現の構文木においては、葉ノードはテキスト文字を示すため、図１２Ａの配置とは若干異なっている。図１２Ｂにおいて、丸で表したノードはｃｈａｒ＿ｎｏｄｅ、四角で表したノードはｍｃｈａｒ＿ｎｏｄｅ、三角形で表したノードはｓｎｏｄｅに相当する。図１２Ｂでは、ノード１とノード３のｍｃｈａｒ＿ｎｏｄｅの実線で示した接続（図では、ノード４を経由させて接続している）と、ノード３とノード６の波線で示した接続は、図中では太線で示した同一ｓｎｏｄｅ間の接続を利用している。このため、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃにおけるｍｃｈａｒ＿ｎｏｄｅを葉ノード、ｓｎｏｄｅをノードとした２分木の数は、Ｒｏｕｔｉｎｇ  Ｌａｙｅｒの２倍の数が必要となる。厳密に言えば、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに具備されるｍｃｈａｒ＿ｎｏｄｅの数が少ない場合には、Ｒｏｕｔｉｎｇ  Ｌａｙｅｒと同数でも良いが、一般的には、２倍の数だけ必要となる。
【０１１６】
以上をまとめると、本発明において、Ｎ文字のメタキャラクタと、Ｎ＋１文字のテキスト文字を含む正規表現を構築する場合、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃは、以下の方法で構築することができる。
（１）ｍｃｈａｒ＿ｎｏｄｅをＮ個、ｃｈａｒ＿ｎｏｄｅをＮ＋１個配置する。
（２）Ｎ個のｍｃｈａｒ＿ｎｏｄｅを葉ノードとし、ｓｎｏｄｅを葉ではないノードとする２分木をＢ個用意する。ここで、２分木の必要数Ｂは、Ｂ＝［ｌｏｇ２（Ｎ＋１）−１］×２であり、［ｘ］は、ｘを下回らない最小の整数を意味する。
（３）各ＭＵＸはＢ入力のＭＵＸとする。
なお、図５、図６に示すＧｅｎｅｒｉｃ  Ｌｏｇｉｃでは、ｍｃｈａｒ＿ｎｏｄｅを葉ノードとし、ｓｎｏｄｅを葉ではないノードとする２分木が２個しか表示していないが、実際は同様の２分木がさらに２個、合計４個必要である。これは、上記（２）より、必要数Ｂがｌｏｇ２５−１を下回らない最小の整数である２の２倍、つまり４となることから明らかである。但し、上述したように、ｍｃｈａｒ＿ｎｏｄｅ数が少ない場合、特に、図５、図６では、あるｍｃｈａｒ＿ｎｏｄｅ間を、同一の２分木上で同一のｓｎｏｄｅ間の接続信号を用いて接続する場合は考えられないため、事実上２個あれば問題はないが、一般的に上記Ｂ個用意すれば良い。
【０１１７】
最後に、本Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ回路に実際の正規表現を構成する方法について説明する。一般的に、Ｎ＋１文字のテキスト文字を含む正規表現には、最大Ｎ＋１文字のメタキャラクタ‘｜’、‘＊’、‘・’が含まれる可能性がある。これは、メタキャラクタ‘＊’が１つの子ノードしか持たないためであり、メタキャラクタ‘＊’を含む正規表現の構文木は全２分木にならない場合がある。一方、本Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ回路では、Ｎ文字のメタキャラクタと、Ｎ＋１文字のテキスト文字から成る正規表現しか構成できない。そこで、本発明においては、メタキャラクタ‘＊’を他のメタキャラクタとマージする、もしくは、メタキャラクタ‘＊’に空のテキスト文字を子ノードとして追加することで構文木を生成することにより、上記の課題を解決する。
【０１１８】
図１３Ａ、図１３Ｂは、本発明によるノード配置方法を正規表現“ａ（ｂｃ）＊（ｄ｜ｅ）ｆ”に適用して得られる構文木の一例について説明するためのグラフである。図１３Ａでは、メタキャラクタ‘＊’とその子ノードであるメタキャラクタ‘・’とをマージし、“＊・”というメタキャラクタノードを生成している。なお、このメタキャラクタのマージによって本来の正規表現の意味が変わることは無い。また、図１３Ｂでは、‘＊’の子ノードである‘・’を左の子ノードとし、空のキャラクタを意味する‘φ’を右の子ノードとして生成している。上記、図１３Ａ、図１３Ｂでは、メタキャラクタ‘＊’の子ノードがメタキャラクタ‘・’である場合に、マージする方法、及び、空（‘φ’）のテキスト文字を追加する方法を示したが、一般的には、メタキャラクタ‘＊’の子ノードがメタキャラクタである場合にはマージし、子ノードがテキスト文字の場合にのみ、空のテキスト文字を追加する方法を採用した方が、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃのｍｃｈａｒ＿ｎｏｄｅ、及びｃｈａｒ＿ｎｏｄｅを効率よく利用できる。
【０１１９】
このような２分木のノード配置を行った後、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃの各ノードにそれぞれのメタキャラクタ、テキスト文字を割り当てる。さらに、必要な接続を行うためのＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを生成する。最後に、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒによって、生成したＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを設定する。このようにすることで、その長さや利用可能なメタキャラクタに制約はあるものの、任意の正規表現に対応する構文木を本発明によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃとして具現化することが可能である。
【０１２０】
図１４は、本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃで図１３Ａの構文木を構成した例について説明するためのブロック図である。但し、図１４のＧｅｎｅｒｉｃ  Ｌｏｇｉｃは、７個のｍｃｈａｒ＿ｎｏｄｅと、８個のｃｈａｒ＿ｎｏｄｅを具備する場合の構成例である。したがって、この例では、ｃｈａｒ＿ｎｏｄｅの数も、ｍｃｈａｒ＿ｎｏｄｅの数も、ＭＵＸの数も、ｓｎｏｄｅの数も、ｓｎｏｄｅの段数も、図６のＧｅｎｅｒｉｃ  Ｌｏｇｉｃのものより多くなっている。但し、実際にはｍｃｈａｒ＿ｎｏｄｅを葉ノードとし、ｓｎｏｄｅを葉ではないノードとする２分木が２個しか表示していないが、実際は同様の２分木がさらに２個、合計４個必要である。これは、必要数ｌｏｇ２８−１を下回らない最小の整数である２の２倍、つまり４となることから明らかである。
【０１２１】
なお、このＧｅｎｅｒｉｃ  Ｌｏｇｉｃでは、パターンマッチング対象となるテキスト文字の入力信号が省略されている。また、本正規表現を構成するのに不要な配線等は点線で示されている。
【０１２２】
図１４のように、各ノードに適切なメタキャラクタ、テキスト文字を割り当て、ｓｎｏｄｅの接続を行った後の、パターンマッチングを行う方法について説明する。
【０１２３】
パターンマッチングは、正規表現の先頭の文字‘ａ’を割り当てているｃｈａｒ＿ｎｏｄｅ１０７から始める。
【０１２４】
なお、各ｃｈａｒ＿ｎｏｄｅの内部の基本的な動作は、非特許文献２や非特許文献３と同様であるが、念のために再度図３に基づいて簡単に説明する。すなわち、Ｆｌｉｐ−Ｆｌｏｐ５０２は、ＮＦＡの各状態を構成する。Ｃｏｍｐａｒａｔｏｒ（比較器）６０２は、当該状態からの遷移条件である文字と入力されるテキスト文字を比較する。ＡＮＤゲート８０３は、Ｆｌｉｐ−Ｆｌｏｐ５０２の出力と、Ｃｏｍｐａｒａｔｏｒ６０２の出力を入力して、状態遷移信号を生成する。また、図３以外に、空のキャラクタ‘φ’が割り当てられた場合の動作として、入力された状態遷移信号をそのまま内部の処理を通さずに出力することもできる。
【０１２５】
各ｍｃｈａｒ＿ｎｏｄｅでは、その接続に応じて、入力信号から出力信号線を生成する論理演算をためのＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａが設定される。
【０１２６】
例として、ｍｃｈａｒ＿ｎｏｄｅ２０５の動作を、図８と図１４を参照して説明する。
【０１２７】
ｍｃｈａｒ＿ｎｏｄｅ２０５は、自分から見て右に隣接するｃｈａｒ＿ｎｏｄｅ１０７から出力される信号を、ｒｉ信号として入力する。ｍｃｈａｒ＿ｎｏｄｅ２０５はさらに、このｒｉ信号を、自分から見て左に隣接するｍｃｈａｒ＿ｎｏｄｅ２０４に向けて、Ｌｏ信号として出力する。このとき、ｍｃｈａｒ＿ｎｏｄｅ２０５の内部では、ｒｉ信号入力部とｌｏ信号出力部とを接続されている。
【０１２８】
同時に、ｍｃｈａｒ＿ｎｏｄｅ２０５は、自分から見て左に隣接するｍｃｈａｒ＿ｎｏｄｅ２０４が出力する信号をＬｉ信号として入力する。ｍｃｈａｒ＿ｎｏｄｅはさらに、この入力信号Ｌｉを、ｓｎｏｄｅ３１３に向けて、出力信号ｐｏとして出力する。このとき、ｍｃｈａｒ＿ｎｏｄｅの内部では、Ｌｉ信号入力部と、ｐｏ信号出力部とが接続されている。
【０１２９】
このとき、ｍｃｈａｒ＿ｎｏｄｅ２０５の各出力信号の論理は以下のように設定されている。
＜ｍｃｈａｒ＿ｎｏｄｅ２０５の出力信号＞
ｐｏ＝Ｌｉ
Ｌｏ＝ｒｉ
Ｒｏ＝Ｌｏｗ
ｌｏ＝Ｌｏｗ
ｒｏ＝Ｌｏｗ
【０１３０】
同様に、ｍｃｈａｒ＿ｎｏｄｅ２０４では、自分から見て右に隣接するｍｃｈａｒ＿ｎｏｄｅ２０５が出力する信号をＲｉ信号として入力する。その後、文字列“ｂｃ”が０回以上マッチするための出力信号を生成するためのＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａが設定される。ここで、文字列“ｂｃ”は、ｍｃｈａｒ＿ｎｏｄｅ２０４に接続された２つのｃｈａｒ＿ｎｏｄｅ１０５、１０６にそれぞれ格納されたテキスト文字‘ｂ’および‘ｃ’と、ｍｃｈａｒ＿ｎｏｄｅ２０５に格納されたメタキャラクタ‘・’を組み合わせて得られるものである。また、「０回以上マッチ」することは、ｍｃｈａｒ＿ｎｏｄｅ２０４に格納されたメタキャラクタ‘＊’が意味するものである。
【０１３１】
この場合の、各出力信号の論理は、以下のように設定される。
＜ｍｃｈａｒ＿ｎｏｄｅ２０４の出力信号＞
ｐｏ＝Ｌｏｗ
Ｒｏ＝Ｒｉ＋ｒｉ
ｌｏ＝Ｒｉ＋ｒｉ
ｒｏ＝ｌｉ
【０１３２】
なお、ｍｃｈａｒ＿ｎｏｄｅ２０４は、左右一列に配置された複数のｍｃｈａｒ＿ｎｏｄｅ２０４〜２１０の左端に配置されているので、ｍｃｈａｒ＿ｎｏｄｅ２０４において入力信号Ｌｉ、出力信号Ｌｏは当然ながら存在し得ない。
【０１３３】
他のｍｃｈａｒ＿ｎｏｄｅについての詳細な説明は省略するが、上記の例と同様に、各ｍｃｈａｒ＿ｎｏｄｅの出力信号を生成する論理がＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａにより設定される。また、ｓｎｏｄｅ３１３、３１４、３１６、３１７、３１８、ＭＵＸ４０９についても、図１４に実線で示された接続の通りに設定が行われるが、出力信号の論理は自明なため詳細な説明は省略する。
【０１３４】
正規表現の先頭の文字‘ａ’を割り当てているｃｈａｒ＿ｎｏｄｅ１０７からマッチングが開始され、正規表現の最後の文字‘ｆ’が割り当てられているｃｈａｒ＿ｎｏｄｅ１１０の内部にあるＦｌｉｐ−ＦｌｏｐがＨｉｇｈになると、本正規表現のパターンが見つかったと判断できる。なお、このマッチング結果を示す制御信号は別に具備されているものとする。
【０１３５】
上記のような方法により、所望する任意の正規表現をＧｅｎｅｒｉｃ  Ｌｏｇｉｃ上に構成することができる。
（実施例１）
【０１３６】
次に、本発明の実施例１を、図面を参照して説明する。かかる実施例は本発明を実施するための第１の実施形態に対応するものである。
【０１３７】
本実施例では、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１とＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３のハードウェア回路をＦＰＧＡ上に実装する。
【０１３８】
記憶装置２は、ＦＰＧＡ上のＯｎ−Ｃｈｉｐ  ＲＡＭでも良いし、ＦＰＧＡとは別のチップ上に存在する外部メモリ等の記憶素子でも構わない。
【０１３９】
Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、外部から入力されるコマンドによって上記（１）〜（６）の動作を行うハードウェア回路として実現される。
【０１４０】
Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３は、所望のメタキャラクタ数Ｎに応じて、上述した構成方法により、各ノードが適切な数備えた回路が構成される。なお、テキスト文字数は、メタキャラクタ数Ｎに依存して決定される。
【０１４１】
本実施例におけるパターンマッチング装置をＦＰＧＡ上で構成する場合、各組み合わせ回路は、ＬＵＴ（Ｌｏｏｋ−Ｕｐ  Ｔａｂｌｅ）と呼ばれる論理演算テーブルによって構築される。ＬＵＴの入力信号数は、ＦＰＧＡデバイスによって異なるが、例えば、Ｘｉｌｉｎｘ社のＶｉｒｔｅｘ−５  ＦＰＧＡでは、６入力ＬＵＴが実装されている。この場合の各ノードのアーキテクチャについて以下に説明する。
【０１４２】
図１５は、本実施例におけるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャを説明するための回路図である。このｃｈａｒ＿ｎｏｄｅ４０は、ＬＵＴ７００と、Ｆｌｉｐ−Ｆｌｏｐ（Ｆ／Ｆ）５００と、ｃｏｍｐａｒａｔｏｒ６００と、ＡＮＤゲート８００と、ＬＵＴ７０１と、ｌｉ信号入力部と、ｒｉ信号入力部と、パターンマッチング対象となる入力テキスト文字の入力部と、ｏ信号出力部とを具備する。
【０１４３】
なお、比較器６００もＬＵＴから構成されるが、ここでは簡単化のため、比較器６００として記載している。比較器６００をＬＵＴで構成する方法については、非特許文献２に記載されているので、ここでは詳細な説明を省略する。
【０１４４】
また、ＡＮＤゲート８００もＦＰＧＡではＬＵＴによって構成されるが、ここでは静的な論理素子であるため、ＡＮＤゲートとして記載している。このＡＮＤゲートは単独のＬＵＴで構成してもよいし、ＬＵＴ７０１にマージして構成してもよい。
【０１４５】
このｃｈａｒ＿ｎｏｄｅ４０の内部における各構成要素間の接続関係について説明する。ｌｉ信号入力部は、ＬＵＴ７００の第１の入力部と、ＬＵＴ７０１の第１の入力部とに接続されている。ｒｉ信号入力部は、ＬＵＴ７００の第２の入力部と、ＬＵＴ７０１の第２の入力部とに接続されている。ＬＵＴ７００の出力部は、Ｆｌｉｐ−Ｆｌｏｐ５００の入力部に接続されている。Ｆｌｉｐ−Ｆｌｏｐ５００の出力部は、ＡＮＤゲート８００の第１の入力部に接続されている。テキスト文字入力部は、ｃｏｍｐａｒａｔｏｒ６００の入力部に接続されている。ｃｏｍｐａｒａｔｏｒ６００の出力部は、ＡＮＤゲート８００の第２の入力部に接続されている。ＡＮＤゲート８００の出力部は、ＬＵＴ７０１の第３の入力部に接続されている。ＬＵＴ７０１の出力部は、ｏ信号出力部に接続されている。
【０１４６】
この信号ｏは、出力信号ｌｏおよび出力信号ｒｏとして、ｃｈａｒ＿ｎｏｄｅ４０の左右に隣接するｍｃｈａｒ＿ｎｏｄｅに向けて出力される。
【０１４７】
図１５のように構成されたｃｈａｒ＿ｎｏｄｅは、２つの信号ｌｉ、ｒｉを入力すると、そのどちらかをＬＵＴ７００の設定により選択することができる。選択された入力信号は、ＬＵＴ７００の出力信号となり、Ｆｌｉｐ−Ｆｌｏｐ５００に保持される。Ｆｌｉｐ−Ｆｌｏｐ５００は、保持する内容を、ＡＮＤゲート８００に向けた信号として出力する。
【０１４８】
比較器６００には、構成データによって比較する対象となる文字が設定される。比較器６００は、この設定された文字と、入力されたパターンマッチング対象となるテキスト文字とを比較する。比較器６００は、この比較による結果を、ＡＮＤゲート８００に向けた信号として出力する。
【０１４９】
ＡＮＤゲート８００は、Ｆｌｉｐ−Ｆｌｏｐ５００が出力する信号と、比較器６００が出力する信号とを入力し、ＡＮＤ（論理積）演算してその結果を出力する。
【０１５０】
ＬＵＴ７０１は、ＡＮＤゲート８００が出力する信号と、入力信号ｌｉと、入力信号ｒｉとを入力する。ＬＵＴ７０１は、３つの入力信号のうち、ＬＵＴ７０１の設定に応じて選択されたいずれかを出力する。
【０１５１】
なお、図１５では、ｃｈａｒ＿ｎｏｄｅ４０の出力信号ｌｏ、ｒｏとして、共に、出力信号ｏがそのまま出力される。しかし、ｃｈａｒ＿ｎｏｄｅ４０の内部でそれぞれの出力信号を選択するＬＵＴを用意し、それらのＬＵＴの設定により、個別に出力してもよい。この場合、ＬＵＴ７０１と同じ接続関係をもったＬＵＴが別途１つ必要となる。
【０１５２】
図１６は、本発明によるｍｃｈａｒ＿ｎｏｄｅ５０の内部構造を説明するためのブロック図である。このｍｃｈａｒ＿ｎｏｄｅ５０は、５つの入力部と、５つの５入力１出力ＬＵＴ７０２〜７０６と、５つの出力部とを具備する。
【０１５３】
ＬＵＴ７０２の５つの入力部には、ｐｉ信号入力部と、Ｌｉ信号入力部と、Ｒｉ信号入力部と、ｌｉ信号入力部と、ｒｉ信号入力部とがそれぞれ接続されている。この、ｍｃｈａｒ＿ｎｏｄｅ５０における５つの信号入力部が、ＬＵＴにおける５つの信号入力部にそれぞれ接続されている構成は、他のＬＵＴ７０３〜７０６においても同様である。また、ＬＵＴ７０２〜７０６の出力部は、それぞれ、ｐｏ信号出力部と、Ｌｏ信号出力部と、Ｒｏ信号出力部と、ｌｏ信号出力部と、ｒｏ信号出力部とに接続されている。
【０１５４】
このｍｃｈａｒ＿ｎｏｄｅ５０において、どの入力信号がどの出力信号として出力されるかは、ＬＵＴ７０２〜７０６の設定に応じた論理演算によって任意に設定可能である。
【０１５５】
図１７は、本発明の第１の実施形態によるｓｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。このｓｎｏｄｅ６０は、３つのＬＵＴ７０７〜７０９と、ｉ０信号入力部と、ｉ１信号入力部と、ｉ２信号入力部と、ｏ０信号出力部と、ｏ１信号出力部と、ｏ２信号出力部とを具備する。
【０１５６】
ＬＵＴ７０７は、ｉ１信号入力部に接続された入力部と、ｉ２信号入力部に接続された入力部と、ｏ０信号出力部に接続された出力部とを具備する。ＬＵＴ７０７の設定に応じて、入力信号ｉ１またはｉ２のいずれかが、信号ｏ０として出力される。
【０１５７】
同様に、ＬＵＴ７０８は、ｉ０信号入力部に接続された入力部と、ｉ２信号入力部に接続された入力部と、ｏ１信号出力部に接続された出力部とを具備する。ＬＵＴ７０８の設定に応じて、入力信号ｉ０またはｉ２のいずれかが、信号ｏ１として出力される。
【０１５８】
さらに、ＬＵＴ７０９は、ｉ０信号入力部に接続された入力部と、ｉ１信号入力部に接続された入力部と、ｏ２信号出力部に接続された出力部とを具備する。ＬＵＴ７０９の設定に応じて、入力信号ｉ０またはｉ１のいずれかが、信号ｏ２として出力される。
【０１５９】
本実施例によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３における各ＭＵＸは、各ｍｃｈａｒ＿ｎｏｄｅに供給される信号を、複数の候補の中から選択するための回路である。これら複数の候補の数は、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３が具備する、ｓｎｏｄｅで構成された２分木と同じである。各ＭＵＸの構成は、いわゆる当業者にとって自明であるので、詳細な説明を省略する。
【０１６０】
このようなノード回路によって構成されるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３の各ＬＵＴの内部データを、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって書き換えることで、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３上に構成する正規表現を動的に再構成することが可能となる。なお、このようなＦＰＧＡに存在するＬＵＴの内容を変更する具体的な方法については、非特許文献３でも利用されているが、例えば、Ｘｉｌｉｎｘ社のＦＰＧＡでは、ＬＵＴをＳｈｉｆｔ  Ｒｅｇｉｓｔｅｒとして利用することが可能なＬＵＴが存在するため、このような既知の方法を利用することになる。
【０１６１】
なお、実施例１で示した各ノードの構成はあくまでも一例であって、これに限定されない。つまり、ここに記載されているものと同じ個数のＬＵＴを使って構成する必要はなく、同様の機能を複数のＬＵＴを使って構成しても良いし、レジスタ等の記憶素子を用いてＬＵＴを構成しても良い。
（実施例２）
【０１６２】
続いて、本発明の第２の実施例を、図面を参照して説明する。かかる実施例は本発明を実施するための第１の実施の形態に対応するものである。
【０１６３】
本実施例を実施例１と比較すると、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３のｃｈａｒ＿ｎｏｄｅの構成が異なる。その他の構成について、本実施例は実施例１と同じである。
【０１６４】
図１８は、本実施例によるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。このｃｈａｒ＿ｎｏｄｅ７０は、実施例１におけるｃｈａｒ＿ｎｏｄｅ４０の構成におけるＬＵＴ７００の代わりにＬＵＴ７１０が配置されている。また、ＬＵＴ７００が入力する２つの信号ｌｉ、ｒｉに加えて、ＬＵＴ７１０は、ＡＮＤゲート８００からの出力信号をも入力する。したがって、ＬＵＴ７１０がＦｌｉｐ−Ｆｌｏｐ５００に向けて出力する信号は、入力信号ｌｉと、入力信号ｒｉと、ＡＮＤゲート８００の出力信号とに基づく論理演算により生成される。なお、このｃｈａｒ＿ｎｏｄｅ７０におけるその他の構成については、実施例１におけるｃｈａｒ＿ｎｏｄｅ１０の構成と同じであるので、その詳細な説明を省略する。
【０１６５】
実施例１では、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３上に構成する正規表現に含まれるメタキャラクタ‘＊’は、他のメタキャラクタとマージする、あるいは、空のテキスト文字を子ノードに追加することで構文木を生成し、ｍｃｈａｒ＿ｎｏｄｅに割り当てられている。しかし、本実施例２では、図１８のように構成されたｃｈａｒ＿ｎｏｄｅを用いることにより、メタキャラクタ‘＊’が１文字のテキスト文字の０回以上繰り返しを意味する場合、つまり、メタキャラクタ‘＊’の子ノードがテキスト文字である場合に限り、そのテキスト文字とマージして、ｃｈａｒ＿ｎｏｄｅに割り当てることが可能となる。
【０１６６】
例として、正規表現“ａｂ＊（ｃ｜ｄ）ｅ”を扱う場合について、本実施例と実施例１との違いを説明する。
【０１６７】
図１９は、実施例１によるノード配置方法を正規表現“ａｂ＊（ｃ｜ｄ）ｅ”に適用して得られる構文木の一例について説明するためのグラフである。実施例１では、メタキャラクタ‘＊’と、その親ノードであるメタキャラクタ‘・’とをマージして、“・＊”というメタキャラクタノードを生成し、それをｍｃｈａｒ＿ｎｏｄｅに割り当て、その意味を考慮してＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａを生成する必要があった。
【０１６８】
図２０は、本実施例によるノード配置方法を正規表現“ａｂ＊（ｃ｜ｄ）ｅ”に適用して得られる構文木の一例について説明するためのグラフである。本実施例２では、メタキャラクタ‘＊’と文字‘ｂ’とをマージしてｃｈａｒ＿ｎｏｄｅに割り当てることが可能となる。これより、当該ｃｈａｒ＿ｎｏｄｅが左に隣接するｍｃｈａｒ＿ｎｏｄｅと接続されている場合には、ｃｈａｒ＿ｎｏｄｅ７０のＬＵＴ７１０は、入力信号ｌｉ、またはＡＮＤゲート８００の出力信号のうち、いずれか１つがＨｉｇｈ状態であれば、その出力をＨｉｇｈとすれば良い。また、当該ｃｈａｒ＿ｎｏｄｅが右に隣接するｍｃｈａｒ＿ｎｏｄｅと接続されている場合には、ｃｈａｒ＿ｎｏｄｅ７０のＬＵＴ７１０は、入力信号ｒｉ、またはＡＮＤゲート８００の出力信号のうち、いずれか１つがＨｉｇｈ状態であれば、その出力をＨｉｇｈとすればよい。この際、ｍｃｈａｒ＿ｎｏｄｅの各出力信号の論理演算は、メタキャラクタ‘＊’の示す意味を考慮して行う必要はない。
【０１６９】
このように、本実施例２では、メタキャラクタ‘＊’が１文字のテキスト文字に対する０回以上マッチを意味する場合に限り、そのテキスト文字とマージして、ｃｈａｒ＿ｎｏｄｅへ割り当てることが可能である。その結果、ｍｃｈａｒ＿ｎｏｄｅの各出力信号の論理演算を生成するＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａの生成をより簡単化することが可能である。
【０１７０】
なお、本実施例２においても、実施例１と同様に、メタキャラクタ‘＊’を他のメタキャラクタとマージして、ｍｃｈａｒ＿ｎｏｄｅに割り当てることは可能である。また、実施例１と同様、実施例２で示した各ノードの構成はあくまでも一例であって、これに限定されない。ここに記載されているものと同じ個数のＬＵＴを使って構成する必要はなく、同様の機能を複数のＬＵＴを使って構成しても良い。
（実施例３）
【０１７１】
続いて、本発明の第３の実施例を、図面を参照して説明する。かかる実施例は本発明を実施するための第１の実施の形態に対応するものである。
【０１７２】
本実施例におけるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１とＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３のハードウェア回路は、ＡＳＩＣのように専用ハードウェア化して、チップ上に実装される。
【０１７３】
また、本実施例における記憶装置２は、上記のチップとは別のチップ上に存在する外部メモリ等の記憶素子で構成される。
【０１７４】
本実施例におけるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、実施例１、又は実施例２と同じ機能を有する。すなわち、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１は、その内部がＬＵＴによる論理真理値表を用いた論理演算がＡＮＤゲートやＯＲゲート等の論理素子によって演算処理を行うハードウェア回路として実現される。
【０１７５】
本実施例におけるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３は、上記Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１と同様に、実施例１、又は実施例２と同じ構成、動作機能を持つ。すなわち、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３は、その内部がＬＵＴによる論理真理値表による論理演算がＡＮＤゲートやＯＲゲート等の論理素子によって演算されるハードウェア回路として実現される。但し、本Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃの各構成ノードの論理演算は、レジスタ、レジスタ配列等によって信号線の選択や論理を書き換えることができる。つまり、これらの設定レジスタは、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって書き換えることができるアーキテクチャとなる。
【０１７６】
図２１は、本実施例によるｃｈａｒ＿ｎｏｄｅの詳細なアーキテクチャについて説明するための回路図である。このｃｈａｒ＿ｎｏｄｅ８０は、ｌｉ信号入力部と、ｒｉ信号入力部と、設定レジスタ９１と、ＭＵＸ４１１と、設定レジスタ９０と、ＡＮＤゲート８０１と、ＯＲゲート９００と、Ｆｌｉｐ−Ｆｌｏｐ（Ｆ／Ｆ）５０１と、パターンマッチング対象となる入力テキスト文字の入力部と、設定レジスタ９２と、比較器６０１と、ＯＲゲート８０２と、設定レジスタ９３と、ＭＵＸ４１２と、ｏ信号出力部とを具備する。
【０１７７】
このｃｈａｒ＿ｎｏｄｅ８０における、各構成要素間の接続関係について説明する。ｌｉ信号入力部は、ＭＵＸ４１１の第１の入力部と、ＭＵＸ４１２の第１の入力部とに接続されている。ｒｉ信号入力部は、ＭＵＸ４１１の第２の入力部と、ＭＵＸ４１２の第２の入力部とに接続されている。設定レジスタ９１の出力部は、ＭＵＸ４１１の第３の入力部に接続されている。設定レジスタ９０の出力部は、ＡＮＤゲート８０１の第１の入力部に接続されている。ＭＵＸ４１１の出力部は、ＯＲゲート９００の第１の入力部に接続されている。ＡＮＤゲート８０１の出力部は、ＯＲゲート９００の第２の入力部に接続されている。ＯＲゲート９００の出力部は、Ｆｌｉｐ−Ｆｌｏｐ５０１の入力部に接続されている。入力テキスト文字の入力部は、比較器６０１の第１の入力部に接続されている。設定レジスタ９２の出力部は、比較器６０１の第２の入力部に接続されている。Ｆｌｉｐ−Ｆｌｏｐ５０１の出力部は、ＡＮＤゲート８０２の第１の入力部に接続されている。比較器６０１の出力部は、ＡＮＤゲート８０２の第２の入力部に接続されている。ＡＮＤゲート８０２の出力部は、ＡＮＤゲート８０１の第２の入力部と、ＭＵＸ４１２の第３の入力部とに接続されている。設定レジスタ９３の出力部は、ＭＵＸ４１２の第４の入力部に接続されている。ＭＵＸ４１２の出力部は、ｏ信号出力部に接続されている。
【０１７８】
なお、本実施例のｃｈａｒ＿ｎｏｄｅ８０における信号入出力部については、図１５で示した実施例１や、図１８で示した実施例２と同じである。
【０１７９】
本実施例によるｃｈａｒ＿ｎｏｄｅの動作について、以下に説明する。まず、各設定時レジスタに記録される値は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって書き換えることができる。これら設定レジスタの値を書き換えることによって、ｃｈａｒ＿ｎｏｄｅが行う論理演算を任意に構成することが可能となる。
【０１８０】
ＭＵＸ４１１は、設定レジスタ９１によって設定された値に従って、入力信号ｌｉおよびｒｉのいずれかを選択的に出力する。
【０１８１】
本実施例では、実施例２と同様に、メタキャラクタ‘＊’をテキスト文字１文字とマージし、ｃｈａｒ＿ｎｏｄｅに割り当てることができる。このマージが行われているかどうか、に応じた値を設定レジスタ９０に設定する。例えば、マージされていれば、設定レジスタ９０に‘１’を設定し、マージされていなければ、設定レジスタに‘０’を設定する。
【０１８２】
ＡＮＤゲート８０１は、ＡＮＤゲート８０２の結果と、設定レジスタ９０に設定されている値とのＡＮＤ（論理積）を取って出力する。ＯＲゲート９００は、このＡＮＤ出力と、ＭＵＸ４１１で選択された入力信号とのＯＲ（論理和）を取って出力する。Ｆｌｉｐ−Ｆｌｏｐ５０１は、このＯＲ出力を入力する。
【０１８３】
同様に、設定レジスタ９３は、ＭＵＸ４１２が、入力信号ｌｉと、入力信号ｒｉと、ＡＮＤゲート８０２の演算結果とのうちいずれかを選択するために用いる値を設定する。
【０１８４】
設定レジスタ９２は複数ビット分のレジスタ群から構成され、当該ｃｈａｒ＿ｎｏｄｅでマッチングを行う文字が設定されている。比較器６０１は、設定レジスタ９２に設定された値と、入力されたテキスト文字とを比較して、その結果を出力する。
【０１８５】
なお、図２１の例では、出力信号ｏが、ｃｈａｒ＿ｎｏｄｅ８０の出力信号ｌｏおよびｒｏとしてそのまま用いられる。しかし、ｃｈａｒ＿ｎｏｄｅ８０の内部で、出力信号ｌｏおよびｒｏにそれぞれ異なる出力信号を選択するための論理素子や設定レジスタなどを用意してもよい。
【０１８６】
また、本実施例におけるｃｈａｒ＿ｎｏｄｅ８０は、実施例２におけるｃｈａｒ＿ｎｏｄｅ７０を論理素子によってハードウェア回路化する構成である。なお、実施例１におけるｃｈａｒ＿ｎｏｄｅ４０を同様にハードウェア回路化する構成としても良い。ただし、この場合、メタキャラクタ‘＊’は、必ず他のメタキャラクタとマージされるか、空を表す文字を子ノードとして追加されることで、ｍｃｈａｒ＿ｎｏｄｅに割り当てられる。
【０１８７】
また、本実施例のＧｅｎｅｒｉｃ  Ｌｏｇｉｃにおける他のノード構成も、同様に構成してよい。すなわち、実施例１または実施例２と同様の機能を、設定レジスタ群をノードの内部に用意し、その内容をＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａに応じて書き換えることで変更できる構成であれば良い。
【０１８８】
実施例１および実施例２のＧｅｎｅｒｉｃ  Ｌｏｇｉｃでは、ＦＰＧＡにおけるＬＵＴの論理真理値表を用いた論理演算を行っていた。しかし、本実施例３のＧｅｎｅｒｉｃ  Ｌｏｇｉｃでは、上記のように、ＬＵＴを用いず、設定レジスタ群と、論理素子によって直接ハードウェア化する。これにより、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによってそれらの設定レジスタ群を書き換えることで、所望の有限オートマトンを構成することが可能となる。
【０１８９】
次に、本発明の第１の実施の形態の作用効果について説明する。
【０１９０】
本実施の形態においては、メタキャラクタ‘｜’および‘＊’、連結を示す記号‘・’並びにテキスト文字のみを用いる構文木として表現できる正規表現を、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ上に動的に構成することができる。
【０１９１】
前述した通り、従来の手法を用いると、正規表現を動的に再構成することができるものの、そのメタキャラクタを含む正規表現をネスト内にも含むような正規表現は構成することができない。すなわち、従来の手法には、正規表現に制約条件が存在するという課題がある。例えば、従来の手法では、“ａ（ｂ＋ｃｄ）＊ｅ”のような正規表現は構成することができない。
【０１９２】
一方、本実施の形態では、上記のような正規表現を、メタキャラクタ‘｜’、‘＊’のみを使った正規表現“ａ（ｂｂ＊ｃｄ）＊ｅ”として書き換えた後、これを構文木で表現することによって、本実施の形態におけるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ上に構成することが可能である。また、一般的に、メタキャラクタ‘｜’、‘＊’以外のメタキャラクタを用いた正規表現も、これら２つのメタキャラクタのみを含む正規表現に書き換えることができるため、本実施の形態によって、より柔軟な表現をもつ正規表現に対応することができる。
【０１９３】
また、従来の手法では、状態を表すレジスタから全てのレジスタへの配線を有し、レジスタ配列に設定する値によって状態間の接続構成や状態遷移条件の再設定を行うことで、動的にＮＦＡを構成することが可能である。つまり、従来の手法では、どのような遷移をもつＮＦＡでも構成できる。その一方で、従来の手法には、状態数Ｎに対してそのハードウェア量がＯ（Ｎ２）で増加するため、状態数に対するスケーラビリティの面で課題がある。
【０１９４】
転じて、本実施の形態において、Ｎ個の状態を有するＧｅｎｅｒｉｃ  Ｌｏｇｉｃについて考える。このとき、Ｎ個のｃｈａｒ＿ｎｏｄｅが存在することになるので、ｍｃｈａｒ＿ｎｏｄｅの数はＮ−１個、ＭＵＸの数はＮ−１個になる。すると、ｍｃｈａｒ＿ｎｏｄｅを葉とし、ｓｎｏｄｅと構成するチャネルの役割を担う２分木の必要数は、最大でｌｏｇ２Ｎ−１個となる。また、このとき、１つの２分木に存在するｓｎｏｄｅの増加量は、Ｏ（Ｎ）である。このため、全体として状態数Ｎに対して、ハードウェア量がＯ（Ｎｌｏｇ２Ｎ）で増加することになる。つまり、本実施の形態では、従来の手法よりもハードウェア量の増加を抑えることが可能である。
【０１９５】
（第２の実施形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。
【０１９６】
図２２は、本発明の第２の実施の形態によるパターンマッチング装置の構成について説明するためのブロック図である。本実施形態によるパターンマッチング装置と、図５に示した第１の実施形態によるパターンマッチング装置とは、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ３とＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４とが違う以外は同じ構成である。なお、本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４も、第１の実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃと同じく、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａにより構文木で表現できる任意の正規表現を構成する再構成可能有限オートマトン回路である。
【０１９７】
本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４は、Ｃｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１により設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａによって特定の正規表現を表す有限オートマトンを構成する再構成可能な有限オートマトン回路である。これは、実施の形態１において、ｍｃｈａｒ＿ｎｏｄｅとｓｎｏｄｅで構成される２分木が任意のＭ分木に置き換えられた構成であり、その他の条件は全て実施の形態１によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３と同じである。図２２では、４分木を再構成可能に構成したＧｅｎｅｒｉｃ  Ｌｏｇｉｃの例を示している。
【０１９８】
図２３は、本実施形態による４分木を再構成可能なＧｅｎｅｒｉｃ  Ｌｏｇｉｃの構成について説明するためのブロック図である。本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４は、第１の実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３における３入力３出力のスイッチノードを、５入力５出力のスイッチノード（ｓｎｏｄｅ）３２０、３２１に置き換えた構成である。本実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４におけるその他の条件は、全て第１の実施形態によるＧｅｎｅｒｉｃ  Ｌｏｇｉｃ３と同じである。本実施形態では、ｍｃｈａｒ＿ｎｏｄｅとｓｎｏｄｅで構成される２分木を、任意の自然数Ｍを用いるＭ分木として構成している。
【０１９９】
本実施形態による、Ｍ分木として構成したｓｎｏｄｅは、Ｍ＋１個の信号入力部と、Ｍ＋１個の信号出力部とを具備するスイッチを用いて構成される。本Ｍ分木は、第１の実施形態の説明で述べたとおり、２分木の各ノードを一列に配置した場合に、その接続を正しく行うために必要な水平方向のチャネルである。したがって、必要なＭ分木の数は、第１の実施形態における２分木構成の必要数に等しい。つまり、Ｍ分木構成のチャネルの数は、Ｍの値に関わらず、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ４におけるｍｃｈａｒ＿ｎｏｄｅ数Ｎに依存する。そして、その必要数Ｂは、Ｂ＝［ｌｏｇ２（Ｎ＋１）−１］×２となる。なお、［ｘ］は、ｘを下回らない最小の整数を意味する。なお、第１の実施形態における２分木構成の必要数と同様、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃに具備されるｍｃｈａｒ＿ｎｏｄｅの数が少ない場合には、Ｒｏｕｔｉｎｇ  Ｌａｙｅｒと同数でも良いが、一般的には、２倍の数だけ必要となる。ここで、図２２、図２３に示すＭ＝４の場合のＧｅｎｅｒｉｃ  Ｌｏｇｉｃ４では、ｍｃｈａｒ＿ｎｏｄｅを葉ノードとし、ｓｎｏｄｅを葉ではないノードとする４分木を２個しか表示していない。この場合、あるｍｃｈａｒ＿ｎｏｄｅ間を、同一の２分木上で同一のｓｎｏｄｅ間の接続信号を用いて接続する場合は考えられないため、事実上２個あれば問題はないが、一般的には上記Ｂ個用意すれば良い。
【０２００】
図２４は、本実施形態によるＭ＋１入力Ｍ＋１出力ｓｎｏｄｅにおいて、Ｍ＝４とし、ＦＰＧＡ上に実装するとした場合の構成例について説明するための回路図である。このｓｎｏｄｅ１０００は、ｉ０信号入力部と、ｉ１信号入力部と、ｉ２信号入力部と、ｉ３信号入力部と、ｉ４信号入力部と、５つのＬＵＴ７１１〜７１５と、ｏ０信号出力部と、ｏ１信号出力部と、ｏ２信号出力部と、ｏ３信号出力部と、ｏ４信号出力部とを具備する。５つのＬＵＴ７１１〜７１５のそれぞれは、４つの入力部と、１つの出力部とを具備する。
【０２０１】
ＬＵＴ７１１の４つの入力部には、ｉ１信号入力部と、ｉ２信号入力部と、ｉ３信号入力部と、ｉ４信号入力部とがそれぞれ接続されている。ＬＵＴ７１２の４つの入力部には、ｉ０信号入力部と、ｉ２信号入力部と、ｉ３信号入力部と、ｉ４信号入力部とがそれぞれ接続されている。ＬＵＴ７１３の４つの入力部には、ｉ０信号入力部と、ｉ１信号入力部と、ｉ３信号入力部と、ｉ４信号入力部とがそれぞれ接続されている。ＬＵＴ７１４の４つの入力部には、ｉ０信号入力部と、ｉ１信号入力部と、ｉ２信号入力部と、ｉ４信号入力部とがそれぞれ接続されている。ＬＵＴ７１５の４つの入力部には、ｉ０信号入力部と、ｉ１信号入力部と、ｉ２信号入力部と、ｉ３信号入力部とがそれぞれ接続されている。５つのＬＵＴ７１１〜７１５の入力部には、ｏ０信号出力部と、ｏ１信号出力部と、ｏ２信号出力部と、ｏ３信号出力部と、ｏ４信号出力部とがそれぞれ接続されている。
【０２０２】
ＬＵＴ７１１〜７１５のそれぞれは、その設定に応じて、４つの入力信号のうちいずれか１つを選択的に出力する。
【０２０３】
また、第１の実施形態の場合と同様、本実施形態によるパターンマッチング装置でも、ＦＰＧＡではなく、ＡＳＩＣのように専用ハードウェア化し、チップ上に実装することができる。この場合においても、Ｇｅｎｅｒｉｃ  Ｌｏｇｉｃ４におけるｍｃｈａｒ＿ｎｏｄｅ、ｃｈａｒ＿ｎｏｄｅおよびＭＵＸの構成は、第１の実施形態と同様である。ｓｎｏｄｅについても、第１の実施形態と同様に、設定レジスタ群を用い、その内容をＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｃｏｎｔｒｏｌｌｅｒ１から設定されるＣｏｎｆｉｇｕｒａｔｉｏｎ  Ｄａｔａに応じて書き換えることで変更できる構成であれば良い。
【０２０４】
次に、本発明の第２の実施形態における作用効果について説明する。
【０２０５】
本実施の形態においても、第１の実施形態と同様、柔軟な表現をもつ正規表現に対応することができる。
【０２０６】
また、本実施の形態においては、Ｍ分木におけるＭの値が２よりも大きければ、ｍｃｈａｒ＿ｎｏｄｅの数の増加に伴うｓｎｏｄｅの増加量が、第１の実施形態よりも少なくなる。
【０２０７】
一般的に、２以上の整数Ｍと、１以上の整数ｎにおいて、Ｍ分木の葉ノードの総数がＭｎ−１より大きく、かつ、Ｍｎ以下であるときに、葉でないノードの総数は（Ｍｎ−１）／（Ｍ−１）以下である。すなわち、本発明によるパターンマッチング装置では、メタキャラクノード回路部の総数がＭｎ−１より大きく、かつ、Ｍｎ以下であるときに、１つのＭ分木におけるスイッチノード回路部の総数は（Ｍｎ−１）／（Ｍ−１）以下である。例えば、２２ｎ個のｍｃｈａｒ＿ｎｏｄｅを含むＧｅｎｅｒｉｃ  Ｌｏｇｉｃについて考える。このとき、２分木構成のチャネルブロック内にあるｓｎｏｄｅの数は、２２ｎ−１であるのに対し、４分木で構成した場合には、（４ｎ−１）／３＝（２２ｎ−１）／３となる。すなわち、４分木で構成すると、ｓｎｏｄｅの必要数が、２分木で構成した場合の１／３となる。このように、本実施形態では、第１の実施形態に比べて、ハードウェア量の増加をより抑えることが可能である。
【０２０８】
本発明は、正規表現を用いたパターンマッチング処理をハードウェア回路にて高速に行い、かつ、動的にその正規表現を再構成するためのハードウェア回路、及びパターンマッチング装置の分野に適用できる。
【０２０９】
さらに、本発明によるハードウェア回路３、４またはこれらの回路を用いたパターンマッチング装置は、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理におけるオフロードエンジンやアクセラレーションの分野にも適用できる。
【０２１０】
また、本発明では、有限オートマトンを用いてパターンマッチングを行い、構文木、つまり２分木で表現できる正規表現を例として扱った。しかし、本発明によれば、同様に、２分木で表現することによってパターンマッチングを行うことができるアプリケーション全般に適用することができる。本発明は、例えば、通信機器におけるＩＰアドレスの検索、ＡＣＬ（Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ｌｉｓｔ）におけるＩＰアドレスの検索、ポート番号等の検索、等の分野にも適用可能である。
【０２１１】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０２１２】
この出願は、２００９年３月１９日に出願された日本出願特願２００９−０６８０１１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
0005440812.tif 000002
【図２】
0005440812.tif 000003
【図３】
0005440812.tif 000004
【図４】
0005440812.tif 000005
【図５】
0005440812.tif 000006
【図６】
0005440812.tif 000007
【図７】
0005440812.tif 000008
【図８】
0005440812.tif 000009
【図９】
0005440812.tif 000010
【図１０Ａ】
0005440812.tif 000011
【図１０Ｂ】
0005440812.tif 000012
【図１１】
0005440812.tif 000013
【図１２Ａ】
0005440812.tif 000014
【図１２Ｂ】
0005440812.tif 000015
【図１３Ａ】
0005440812.tif 000016
【図１３Ｂ】
0005440812.tif 000017
【図１４】
0005440812.tif 000018
【図１５】
0005440812.tif 000019
【図１６】
0005440812.tif 000020
【図１７】
0005440812.tif 000021
【図１８】
0005440812.tif 000022
【図１９】
0005440812.tif 000023
【図２０】
0005440812.tif 000024
【図２１】
0005440812.tif 000025
【図２２】
0005440812.tif 000026
【図２３】
0005440812.tif 000027
【図２４】
0005440812.tif 000028