(57)【要約】【課題】状態数や演算量を小さく抑えることができる、有限オートマトン回路生成装置を提供する。【解決手段】本発明に係る有限オートマトン生成装置１は、正規表現および動作文字数の入力を受け付ける入力装置１１と、正規表現に基づいて１文字ＦＡを生成する１文字ＦＡ生成部２１と、動作文字数に基づいて１文字ＦＡに含まれる繰り返し正規表現を多文字変換用の状態遷移に置換する多文字変換前処理部２２と、多文字変換用の状態遷移と動作文字数を用いて１文字ＦＡから多文字ＦＡを生成する多文字ＦＡ変換部２３と、多文字ＦＡ中の動作文字数以上の繰り返し正規表現を動作文字数単位の繰り返し正規表現に置き換える多文字変換後処理部２４とを有する。【選択図】図１
2010018710.tif 000002
【特許請求の範囲】
【請求項１】
入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、前記１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成装置であって、
前記正規表現および前記有限オートマトンの遷移条件に係る動作文字数の入力を受け付ける入力装置と、
前記正規表現に基づいて第１の１文字ＦＡを生成する１文字ＦＡ生成部と、
前記動作文字数に基づいて前記第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する多文字変換前処理部と、
前記多文字変換前処理部によって変換された第２の１文字ＦＡから、前記動作文字数に基づいて第１の多文字ＦＡを生成する多文字ＦＡ変換部と、
前記多文字ＦＡ変換部によって生成された第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を前記動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する多文字変換後処理部と、を有することを特徴とする有限オートマトン生成装置。
【請求項２】
前記多文字変換前処理部が、前記第１の１文字ＦＡに含まれる、繰り返し正規表現の繰り返し回数が前記動作文字数より大きい繰り返し正規表現を表す状態遷移を、前記動作文字数によって決定される繰り返し回数の繰り返し正規表現を表す状態遷移に置換することで第２の１文字ＦＡを生成することを特徴とする、請求項１に記載の有限オートマトン生成装置。
【請求項３】
前記多文字変換後処理部が、前記第１の多文字ＦＡに含まれる、前記繰り返し正規表現に対応する多文字変換用の状態遷移を、前記動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えるための変換手順が、前記繰り返し正規表現の繰り返し文字数と前記動作文字数により決定されることを特徴とする、請求項２に記載の有限オートマトン生成装置。
【請求項４】
前記多文字変換後処理部に、前記第２の多文字ＦＡに基づいて回路記述を生成するＨＤＬ変換部が併設されていることを特徴とする、請求項１に記載の有限オートマトン生成装置。
【請求項５】
前記ＨＤＬ変換部に、予め別に設けられたパターンマッチング装置の主要部であり、入力データに対してパターンマッチング処理を行うパターンマッチング部を前記回路記述に基づいて形成するコンフィグレーション装置が併設されていることを特徴とする、請求項４に記載の有限オートマトン生成装置。
【請求項６】
入力データに対してパターンマッチング処理を行うパターンマッチング装置であって、
前記入力データを受け付けるデータ入力部と、前記パターンマッチング処理の結果を出力する結果出力部とを備え、
前記データ入力部と前記結果出力部との間に前記入力データに対してパターンマッチング処理を行うパターンマッチング部を設け、このパターンマッチング部の動作内容が請求項５に記載の有限オートマトン生成装置によって生成された回路記述に基づいて特定されることを特徴とするパターンマッチング装置。
【請求項７】
入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、前記１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成方法であって、
前記正規表現および当該正規表現に係る動作文字数の入力を受け付け、
前記正規表現に基づいて第１の１文字ＦＡを生成し、
前記動作文字数に基づいて前記第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成し、
前記第２の１文字ＦＡから前記動作文字数に基づいて第１の多文字ＦＡを生成し、
前記第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を前記動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成することを特徴とする有限オートマトン生成方法。
【請求項８】
前記第２の多文字ＦＡを出力する処理は、前記第１の多文字ＦＡに含まれる、前記繰り返し正規表現に対応する多文字変換用の状態遷移を、あらかじめ定められた演算ルールに基づき、前記指定された任意の動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えることを特徴とする、請求項７に記載の有限オートマトン生成方法。
【請求項９】
前記第１の１文字ＦＡを第２の１文字ＦＡに変換する処理は、前記第１の１文字ＦＡに含まれる、繰り返し正規表現の繰り返し回数が前記動作文字数より大きい繰り返し正規表現を表す状態遷移を、前記指定された任意の動作文字数より決定される繰り返し回数の繰り返し正規表現を表す状態遷移に置換することで、第２の１文字ＦＡを生成することを特徴とする、請求項７に記載の有限オートマトン生成方法。
【請求項１０】
入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、前記１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成装置を制御するコンピュータに、
前記正規表現および当該正規表現に係る動作文字数の入力を受け付ける処理と、
前記正規表現に基づいて第１の１文字ＦＡを生成する処理と、
前記動作文字数に基づいて前記第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する処理と、
前記第２の１文字ＦＡから前記動作文字数に基づいて第１の多文字ＦＡを生成する処理と、
前記第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を前記動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する処理とを実行させることを特徴とする有限オートマトン生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列照合用有限オートマトン回路の生成に関し、特に複数文字を同時に処理する文字列照合用有限オートマトン回路の生成に関する。
【背景技術】
【０００２】
ネットワークへの不正侵入の検知、あるいはコンピュータウィルスの検出などでは、文字列データから特定のパターンを検出する文字列照合（パターンマッチング）を、迅速に行う必要がある。そこで、例えば非特許文献２に示されるように、非決定性有限オートマトン（ＮＦＡ：Non-deterministic Finite Automaton）を直接ハードウェア回路として回路化し、ＦＰＧＡ（Field Programmable Gate Array）のような再構成可能なデバイス上に組み込むことで、高速なパターンマッチングを行う手法が提案されている。以後、ＮＦＡを直接変換して得られたハードウェア回路をＮＦＡ回路と呼ぶこととする。また、ＮＦＡとＤＦＡ（決定性有限オートマトン：Deterministic Finite Automaton）とを総称してＦＡ（有限オートマトン：Finite Automaton）という。【０００３】
このようなハードウェアを用いたパターンマッチングは、正規表現を用いて記述された検索対象パターンを表すＮＦＡを生成し、生成されたＮＦＡを直接ハードウェア回路に変換することで、並列動作の特性を生かした高速な処理が可能である。【０００４】
ＮＦＡを直接ハードウェア回路に変換する方法では、正規表現を構成する基本パターンをそれぞれ所定の回路に変換することでハードウェア回路を構成する。全ての正規表現は、「文字」“ｃ”（文字ｃ自身にマッチする）、「連結」“ＸＹ”（正規表現ＸとＹがこの順序で現れる）、「選択」“Ｘ｜Ｙ”（ＸかＹが現れる）、「繰り返し」“Ｘ＊”（Ｘが０回以上現れる）の４種類の基本パターンで構成することができ、非特許文献２では、これらの４種類の基本パターンに対するハードウェア回路の構成方法を開示している。【０００５】
正規表現には、指定文字が指定された回数だけ繰り返し登場することを示す表現がある（以後「指定文字が指定された回数だけ繰り返し登場することを示す表現」を「繰り返し正規表現」という）。例えば、“ｃ｛Ｎ｝”という正規表現は、文字ｃのＮ回繰り返しを表す。非特許文献４のｐｐ．１０５〜１０７では、正規表現“ｃ｛Ｎ｝”を正規表現の４種類の基本パターンの組み合わせに展開することなしに、正規表現“ｃ｛Ｎ｝”に対応するＮＦＡ回路を少ないハードウェア資源で構成する方法が開示されている。【０００６】
しかしながら、非特許文献２や非特許文献４で開示されているＮＦＡ回路は、１クロックサイクルあたり１文字しか処理することができないため、検索スループットは動作周波数に比例した値となる。【０００７】
そこで、１クロックサイクルあたりに処理できる文字数（バイト数）を増加させることで、検索スループットの向上を行う手法が提案されている。１クロックサイクルあたりに複数文字を処理できるＮＦＡ回路を作成するために、遷移条件として複数文字を受け付けるＮＦＡ（以後、多文字ＮＦＡという）を作成する必要がある。【０００８】
非特許文献３では、行列演算を用いて１文字単位のＮＦＡ（以後、１文字ＮＦＡという）から多文字ＮＦＡを生成する方法が開示されている。しかしながら、非特許文献３で開示されている方法を適用するためには、指定された正規表現をあらかじめ前述の４種類の基本パターンに展開する必要がある。【０００９】
【非特許文献１】近藤  嘉雪  著、“定本Ｃプログラマのためのアルゴリズムとデータ構造”、ソフトバンクパブリッシング、１９９８年、第２９７−３３０頁
【非特許文献２】R. Sidhu and V. K. Prasanna, “Fast Regular Expression Matching usingFPGAs," Proceedings of 9th IEEE Symposium on Field-Programmable CustomComputing Machines (FCCM'01), April 2001., pp.227-238.
【非特許文献３】山垣則夫、神谷聡史、電子情報通信学会技術研究報告（リコンフィギャラブルシステム）、Ｖｏｌ．１０７、Ｎｏ．２２５、２００７年、第６５−７０頁
【非特許文献４】“Regular Expression Matching in Reconfigurable Hardware,"IOANNIS SOURDIS AND STAMATIS VASSILIADIS, Journal of Signal Processing Systems51, pp.99-121, 2008 (http://www.springerlink.com/content/ck107775u5443781/)
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、ハードウェアにＮＦＡを直接埋め込んで１クロックサイクルに複数文字に対するパターンマッチングを行う方法で、繰り返し正規表現ｃ｛Ｎ｝を実現する場合、以下のような問題がある。【００１１】
第１の問題点は、非特許文献３にて開示されている方法を用いて、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を作成するためには、繰り返し正規表現“ｃ｛Ｎ｝”をあらかじめ４種類の基本パターンの組み合わせに展開する必要があり、文字の繰り返し回数が多くなると、１文字ＮＦＡや多文字ＮＦＡの状態数や、非特許文献３記載のＮＦＡ記述行列のサイズが大きくなってしまうことである。【００１２】
その理由を以下に述べる。ＮＦＡをハードウェアに直接埋め込む形のパターンマッチング回路の適用例の一つであるネットワーク侵入検知システムにおけるパターンマッチングルールでは、指定文字の繰り返し回数が１０００回以上など、繰り返し回数が非常に多い例もある。例えば、侵入検知システムの一つであるＳｎｏｒｔのルールセットには“￥ｓＣＲＥＡＴＥ￥ｓ［＾￥ｎ］｛１０２４｝”といった正規表現も含まれている。この表現は、空白文字、“ＣＲＥＡＴＥ”という文字列、空白文字が続いた後に、改行文字以外の一文字が１０２４回繰り返すことを表す。【００１３】
図２０は、非特許文献３に記載の方法で、繰り返し正規表現を含む正規表現“ＢＣＤＡ｛９３｝ＳＴＵ”（“ＢＣＤ”の後に、文字Ａの９３回繰り返しが続き、さらに“ＳＴＵ”が続く）を基本パターンの組み合わせに展開した１文字ＮＦＡを示す概念図である。図２１は、図２０と同じ方法で同じ正規表現を表現したＮＦＡ変換行列を示す概念図である。なお、図２１において要素の値が記載されていない要素は０である。【００１４】
図２０の１文字ＮＦＡにおいて、丸印の中の数字はＮＦＡの状態番号を示す。また、図２１のＮＦＡ変換行列Ｓの左側の数字および上側の数字は１文字ＮＦＡにおける状態番号を示す。ＮＦＡ変換行列のｉ行ｊ列は１文字ＮＦＡにおける状態ｉから状態ｊへの遷移条件となる文字集合を表し、例えば３行４列の要素“Ａ”は、１文字ＮＦＡの状態３から状態４への遷移条件“Ａ”を示す。図２０の１文字ＮＦＡにおいて、状態３から状態９６まで文字“Ａ”による遷移が９３回繰り返されている。【００１５】
図２１のＮＦＡ変換行列において、図２０の１文字ＮＦＡにおける状態３から状態９６まで文字“Ａ”による遷移の９３回繰り返しに対応する部分が、３行４列から９５行９６列まで“Ａ”が９３個斜めに並んでいる部分である。全体として、ＮＦＡ変換行列Ｓは１００行１００列となる。【００１６】
このように、ＮＦＡの状態数やＮＦＡ変換行列のサイズは、繰り返し正規表現の指定文字の繰り返し回数に大きく依存する。繰り返し回数が繰り返し正規表現以外の状態数に比べて大きい場合には、繰り返し正規表現の繰り返し回数をＮとすると、ＮＦＡの状態数およびＮＦＡ記述行列のサイズはＯ（Ｎ）となる。一般に、サイズＤ×Ｄの正方行列同士の掛け算の計算量はＯ（Ｄ＾３）であり、繰り返し正規表現における指定文字の繰り返し回数が大きくなると、ＮＦＡ変換行列の演算に要する計算量が急速に増大する。【００１７】
したがって、ＮＦＡの状態数を増加させることなしに、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を作成する方法が必要である。【００１８】
第２の問題点は、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を生成した場合に、繰り返し正規表現が存在する位置を把握するのが難しいことである。【００１９】
その理由を以下に述べる。例えば、繰り返し正規表現“Ａ｛１０００｝”を例にすると、これは文字“Ａ”が１０００回連続することを示すので、遷移条件が４文字のＮＦＡにおいても文字列“ＡＡＡＡ”が２５０回程度連続することが期待される。しかしながら、非特許文献３にて開示されている方法を用いて、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を作成するためには、繰り返し正規表現“ｃ｛Ｎ｝”をあらかじめ４種類の基本パターンの組み合わせに展開する必要があり、一度繰り返し正規表現“ｃ｛Ｎ｝”を基本パターンに展開してしまうと、遷移条件として複数文字を受け付けるＮＦＡにおいて繰り返し正規表現に対応する状態を特定することが困難だからである。【００２０】
第３の問題点は、１クロックサイクルに複数文字を処理できるＮＦＡ回路において、繰り返し正規表現“ｃ｛Ｎ｝”に対応するＮＦＡ回路として効率のよいＮＦＡ回路構成を用いるが困難なことである。【００２１】
その理由を以下に述べる。１クロックサイクルに複数文字を処理できるＮＦＡ回路において、繰り返し正規表現“ｃ｛Ｎ｝”に対応するＮＦＡ回路構成として効率のよいＮＦＡ回路構成を用いるためには、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を生成した場合に、繰り返し正規表現に対応する状態を特定する必要がある。しかしながら、第２の問題点において述べた理由により、非特許文献３にて開示されている方法を用いて、遷移条件として複数文字を受け付けるＮＦＡ（多文字ＮＦＡ）を作成する際には、繰り返し正規表現“ｃ｛Ｎ｝”をあらかじめ４種類の基本パターンの組み合わせに展開する必要があり、遷移条件として複数文字を受け付けるＮＦＡにおいて繰り返し正規表現に対応する状態を特定することが困難だからである。【００２２】
したがって、繰り返し正規表現“ｃ｛Ｎ｝”に対応する効率のよいＮＦＡ回路構成、例えば非特許文献４において開示されているＮＦＡ回路構成、を用いて、１クロックサイクルに複数文字を処理できるＮＦＡ回路を構成することが困難となる。
以上で述べた各々の問題は、ＮＦＡに限られるものではなく、ＤＦＡにおいても起こりうる。【００２３】
本発明の目的は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が多くなった場合でも、正規表現を表現する１文字ＦＡや多文字ＦＡの状態数や、１文字ＦＡから多文字ＦＡへの変換時の演算量を少なく抑えることを可能とする、有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびそのプログラムを提供することにある。
【課題を解決するための手段】
【００２４】
上記目的を達成するため、本発明に係る有限オートマトン生成装置は、入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成装置であって、正規表現および有限オートマトンの遷移条件に係る動作文字数の入力を受け付ける入力装置と、正規表現に基づいて第１の１文字ＦＡを生成する１文字ＦＡ生成部と、動作文字数に基づいて第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する多文字変換前処理部と、多文字変換前処理部によって変換された第２の１文字ＦＡから、動作文字数に基づいて第１の多文字ＦＡを生成する多文字ＦＡ変換部と、多文字ＦＡ変換部によって生成された第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する多文字変換後処理部と、を有することを特徴とする。【００２５】
上記目的を達成するため、本発明に係るパターンマッチング装置は、入力データに対してパターンマッチング処理を行うパターンマッチング装置であって、入力データを受け付けるデータ入力部と、パターンマッチング処理の結果を出力する結果出力部とを備え、データ入力部と結果出力部との間に入力データに対してパターンマッチング処理を行うパターンマッチング部を設け、このパターンマッチング部の動作内容が請求項５に記載の有限オートマトン生成装置によって生成された回路記述に基づいて特定されることを特徴とする。【００２６】
上記目的を達成するため、本発明に係る有限オートマトン生成方法は、入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成方法であって、正規表現および当該正規表現に係る動作文字数の入力を受け付け、正規表現に基づいて第１の１文字ＦＡを生成し、動作文字数に基づいて第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成し、第２の１文字ＦＡから動作文字数に基づいて第１の多文字ＦＡを生成し、第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成することを特徴とする。【００２７】
上記目的を達成するため、本発明に係る有限オートマトン生成プログラムは、入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行う有限オートマトン生成装置を制御するコンピュータに、正規表現および当該正規表現に係る動作文字数の入力を受け付ける処理と、正規表現に基づいて第１の１文字ＦＡを生成する処理と、動作文字数に基づいて第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する処理と、第２の１文字ＦＡから動作文字数に基づいて第１の多文字ＦＡを生成する処理と、第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する処理とを実行させることを特徴とする。
【発明の効果】
【００２８】
本発明は、繰り返し正規表現に対応する状態遷移を、繰り返し回数分の基本要素の連接に展開せず、必要最小限の状態数で構成される状態遷移に置き換えた上で、１文字単位のＦＡから複数文字単位のＦＡへの変換を行うように構成したことによって、正規表現を表現する１文字単位のＦＡや複数文字単位のＦＡの状態数や、１文字ＦＡから多文字ＦＡへの変換時の演算量を少なく抑えることができる。
【発明を実施するための最良の形態】
【００２９】
［第１の実施の形態］
以下、本発明の第１の実施の形態を図１に基づいて説明する。
最初に、本実施の形態の基本的な内容について説明し、その後で具体的な内容について説明する。
本実施の形態に係る有限オートマトン生成装置１は、入力された正規表現を、１文字単位の遷移条件を持つ有限オートマトン（ＦＡ）に変換し、前記１文字単位の遷移条件を持つ有限オートマトンから指定された任意の文字数の遷移条件を持つ有限オートマトンへの変換を行うものであり、正規表現および有限オートマトンの遷移条件に係る動作文字数の入力を受け付ける入力装置１１と、正規表現に基づいて第１の１文字ＦＡを生成する１文字ＦＡ生成部２１と、動作文字数に基づいて第１の１文字ＦＡに含まれる繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する多文字変換前処理部２２と、多文字変換前処理部によって変換された第２の１文字ＦＡから、動作文字数に基づいて第１の多文字ＦＡを生成する多文字ＦＡ変換部２３と、多文字ＦＡ変換部によって生成された第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移を動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する多文字変換後処理部２４と、を有するように構成されている。【００３０】
このうち、多文字変換前処理部２２は、第１の１文字ＦＡに含まれる、繰り返し正規表現の繰り返し回数が動作文字数より大きい繰り返し正規表現を表す状態遷移を、動作文字数によって決定される繰り返し回数の繰り返し正規表現を表す状態遷移に置換することで第２の１文字ＦＡを生成する。
また、多文字変換後処理部２４で、第１の多文字ＦＡに含まれる、繰り返し正規表現に対応する多文字変換用の状態遷移を、動作文字数単位の繰り返し正規表現を表す状態遷移に置き換えるための変換手順は、繰り返し正規表現の繰り返し文字数と動作文字数により決定される。【００３１】
このようにすることにより、必要最小限の状態数で構成される状態遷移に置き換えた上で、１文字単位のＦＡから複数文字単位のＦＡへの変換を行うことによって、正規表現を表現する１文字単位のＦＡや複数文字単位のＦＡの状態数や、１文字ＦＡから多文字ＦＡへの変換時の演算量を少なく抑えることを可能となる。
以下、これをさらに詳述する。なお、以後の実施例はＮＦＡに対する処理について説明しており（「ＮＦＡ」を「ＤＦＡ」に読み替えるだけで、ＤＦＡについても適用できる）、「第１の１文字ＦＡ」は「１文字ＮＦＡ」、「第２の１文字ＦＡ」は「変換用１文字ＮＦＡ」、「第１の多文字ＦＡ」は「変換用多文字ＮＦＡ」、「第２の多文字ＦＡ」は「多文字ＮＦＡ」として記載している。また、「多文字変換用の状態遷移」は、後述する図６のステップＳ２０１〜２０９の繰り返し処理として記載される処理である。【００３２】
図１は本発明の第１の実施の形態に係る有限オートマトン生成装置１の構成を示すブロック図である。有限オートマトン生成装置１は、キーボードなどの入力装置１１と、ＣＰＵ、ＲＡＭ、ＯＳなどによって構成されるコンピュータ装置の中心部であり、プログラムを実行する主体であるデータ処理装置１２と、ＲＡＭなどのような揮発性の記憶手段から構成される記憶装置１４と、ディスプレイ装置やプリンタ装置などの出力装置１３から構成される。【００３３】
記憶装置１４は、繰り返し正規表現記憶部３１、１文字ＮＦＡ記憶部３２、変換用１文字ＮＦＡ記憶部３３と変換用多文字ＮＦＡ記憶部３４と多文字ＮＦＡ記憶部３５とを備える。繰り返し正規表現記憶部３１は、１文字ＮＦＡ生成部２１が入力装置１１より読み込んだ正規表現に含まれる繰り返し正規表現に関する情報を保持し、多文字ＮＦＡ変換前処理部２２および多文字ＮＦＡ変換後処理部２４における多文字ＮＦＡ変換処理において参照される。【００３４】
１文字ＮＦＡ記憶部３２は、１文字ＮＦＡ生成部２１が入力装置１１より読み込んだ正規表現から変換した１文字ＮＦＡを保持する。変換用１文字ＮＦＡ記憶部３３は、多文字ＮＦＡ変換前処理部２２が１文字ＮＦＡ記憶部３２に保持された１文字ＮＦＡから変換した変換用１文字ＮＦＡを保持する。【００３５】
変換用多文字ＮＦＡ記憶部３４は、多文字ＮＦＡ変換部２３が、変換用１文字ＮＦＡ記憶部３３に保持された変換用１文字ＮＦＡから変換して得られた多文字ＮＦＡである変換用多文字ＮＦＡを保持する。【００３６】
多文字ＮＦＡ記憶部３５は、多文字ＮＦＡ変換後処理部２４が、変換用多文字ＮＦＡ記憶部３４に保持された変換用多文字ＮＦＡから変換した最終的な多文字ＮＦＡを保持する。【００３７】
１文字ＮＦＡ記憶部３２、変換用１文字ＮＦＡ記憶部３３、変換用多文字ＮＦＡ記憶部３４、多文字ＮＦＡ記憶部３５に保持されるＮＦＡのデータ構造はＮＦＡを表現可能なデータ構造であればどのようなデータ構造でもよく、具体例としてはリスト構造や行列形式などのデータ構造が挙げられる。【００３８】
データ処理装置１２は、１文字ＮＦＡ生成部２１、と多文字ＮＦＡ変換前処理部２２と、多文字ＮＦＡ変換部２３と、多文字ＮＦＡ変換後処理部２４と、ＨＤＬ変換部２５といった各機能を実行する。これらの機能部は、データ処理装置１２によって実行されるプログラムとして実現されるものであり、これらのプログラムが記録された媒体も特許の範囲として含まれる。【００３９】
１文字ＮＦＡ生成部２１は、入力装置１１から正規表現を読み込み、読み込んだ前記正規表現を１文字ＮＦＡに変換し、変換した１文字ＮＦＡを１文字ＮＦＡ記憶部３２に保存し、多文字ＮＦＡ変換前処理部２２に１文字ＮＦＡへの変換が完了したことを通知する。正規表現を１文字ＮＦＡに変換する際に、繰り返し正規表現“ｃ｛Ｎ｝”を正規表現の基本パターンである「Ｎ個の文字“ｃ”の連接」に展開することは行わない。また、正規表現に含まれる繰り返し正規表現とその繰り返し正規表現に対応する１文字ＮＦＡの状態番号を、繰り返し正規表現情報リストとして繰り返し正規表現記憶部３１に保持する。【００４０】
多文字ＮＦＡ変換前処理部２２は、入力装置１１から動作文字数を読み込む。動作文字数は、生成する多文字ＮＦＡの遷移条件となる文字（列）の長さであり、以後の説明では動作文字数をＭで表す。本発明では、ＮＦＡをハードウェアに直接埋め込んで１クロックサイクルに複数文字に対するパターンマッチングを行う方法で、繰り返し正規表現“ｃ｛Ｎ｝”を含む場合を対象としているため、Ｍは２以上の自然数となる。【００４１】
Ｍ＝１の場合は、１クロックサイクルにおいて１文字しか処理しないことを示すので、繰り返し正規表現“ｃ｛Ｎ｝”に対応するＮＦＡ回路として非特許文献４により開示されているＮＦＡ回路構成を用いることで、少ないハードウェア資源でＮＦＡ回路を構成することができる。【００４２】
多文字ＮＦＡ変換前処理部２２は、１文字ＮＦＡ生成部２１から変換完了の通知を受信すると、１文字ＮＦＡ記憶部３２から繰り返し正規表現“ｃ｛Ｎ｝”が展開されていない１文字ＮＦＡを読み出し、１文字ＮＦＡに含まれる繰り返し正規表現を多文字変換用の状態遷移に置き換え、生成された１文字ＮＦＡを変換用１文字ＮＦＡとして変換用１文字ＮＦＡ記憶部３３に格納し、多文字ＮＦＡ変換部２３に変換用１文字ＮＦＡへの変換が完了したことを通知する。１文字ＮＦＡに含まれる繰り返し正規表現を多文字変換用の状態遷移に置き換える際に、繰り返し正規表現記憶部３１に保持された繰り返し正規表現情報リストに、置き換えた多文字変換用の状態遷移に関する情報を追加する。【００４３】
多文字ＮＦＡ変換部２３は、入力装置１１から動作文字数を読み込む。動作文字数の意味は、上記の多文字ＮＦＡ変換前処理部２２の説明において述べた意味と同じである。多文字ＮＦＡ変換部２３は、多文字ＮＦＡ変換前処理部２２から変換完了の通知を受信すると、非特許文献３にて開示された方法を用いて、変換用１文字ＮＦＡ記憶部３３に保持された変換用１文字ＮＦＡから、多文字ＮＦＡを生成し、生成された多文字ＮＦＡを変換用多文字ＮＦＡとして変換用多文字ＮＦＡ記憶部３４に格納し、多文字ＮＦＡ変換後処理部２４に変換用多文字ＮＦＡへの変換が完了したことを通知する。【００４４】
多文字ＮＦＡ変換後処理部２４は、入力装置１１から動作文字数を読み込む。動作文字数の意味は、多文字ＮＦＡ変換前処理部２２の説明において既に述べた意味と同じである。【００４５】
多文字ＮＦＡ変換後処理部２４は、多文字ＮＦＡ変換部２３から変換完了の通知を受信すると、繰り返し正規表現記憶部３１に保持された繰り返し正規表現情報リストに基づき、変換用多文字ＮＦＡ記憶部３４に保持された変換用多文字ＮＦＡに含まれる多文字変換用の状態遷移を、Ｍ文字単位の繰り返し正規表現に置き換え、生成された多文字ＮＦＡを多文字ＮＦＡ記憶部３５に格納し、ＨＤＬ変換部２５に多文字ＮＦＡへの変換が完了したことを通知する。【００４６】
ＨＤＬ変換部２５は、多文字ＮＦＡ変換後処理部２４から変換完了の通知を受信すると、多文字ＮＦＡ記憶部３５に保持された多文字ＮＦＡから、そのＮＦＡの状態、状態間の遷移、遷移条件等の情報を分析し、各状態をレジスタに、遷移条件を文字（列）比較器に変換し、状態間の遷移に応じて各レジスタの間を接続し、VerilogやVHDLなどのハードウェア記述言語（ＨＤＬ；Hardware Description Language）で記述された、そのＮＦＡ回路を示す回路記述に変換し、出力装置１３に出力する。この回路記述を記述する手段としては、ＨＤＬの他には、ＬＳＩやＦＰＧＡの回路部品の接続関係をテキストで表現するために使われるネットリストなどを用いてもよい。【００４７】
この際、多文字ＮＦＡ記憶部３５に保持された多文字ＮＦＡに含まれるＭ文字単位の繰り返し正規表現に対応するＮＦＡ回路として、非特許文献４により開示されているＮＦＡ回路構成を用いる。繰り返し正規表現に対応する状態遷移に関する部分以外の多文字ＮＦＡをＮＦＡ回路に変換する方法は、非特許文献２、非特許文献３、非特許文献４で開示されている。【００４８】
以下、有限オートマトン生成装置１の動作について、具体例を用いて詳細に説明する。具体的には、正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”、および動作文字数Ｍ＝４が入力装置１１から入力された場合を例にとり説明する。【００４９】
１文字ＮＦＡ生成部２１は、入力装置１１から正規表現を読み込み、読み込んだ前記正規表現を１文字ＮＦＡに変換し、変換した１文字ＮＦＡを１文字ＮＦＡ記憶部３２に保存し、多文字ＮＦＡ変換前処理部２２に１文字ＮＦＡへの変換が完了したことを通知する。正規表現を１文字ＮＦＡに変換する際に、繰り返し正規表現“ｃ｛Ｎ｝”を正規表現の基本パターンである「Ｎ個の文字“ｃ”の連接」に展開することは行わない。【００５０】
また、正規表現に含まれる繰り返し正規表現とその繰り返し正規表現に対応する１文字ＮＦＡの状態番号を、繰り返し正規表現情報として繰り返し正規表現記憶部３１に保持する。【００５１】
一般に、正規表現から１文字ＮＦＡへの変換は、正規表現から構文木（Syntax Tree）への変換と、構文木からＮＦＡへの変換、の２つの処理に分けることができる（例えば、非特許文献１のｐ．３２７参照）。１文字ＮＦＡ生成部２１では、正規表現を１文字ＮＦＡに変換する際に、繰り返し正規表現“ｃ｛Ｎ｝”を正規表現の基本パターンである「Ｎ個の文字“ｃ”の連接」に展開することは行わないが、正規表現から構文木への変換を行う際に、繰り返し正規表現を認識しつつ、構文木を作成する必要がある。【００５２】
図２は、非特許文献４のｐ．１１１にて開示されている、正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”を、繰り返し正規表現を認識しつつ構文木に変換した結果を示す概念図である。図２において、構文木のノードが文字である場合は正規表現内の個々の文字に対応し、構文木のノード「・」は正規表現の連接に、ノード「｜」はオア（ＯＲ）を意味する正規表現のメタキャラクタに、ノード「＊」は０回以上の繰り返しを意味する正規表現のメタキャラクタにそれぞれ対応する。【００５３】
図２の構文木において、ノード「繰り返し正規表現」は繰り返し正規表現に対応するノードであり、子要素として繰り返し文字と繰り返し回数を持つ。図２のノード「繰り返し正規表現」は“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”に含まれる繰り返し正規表現“Ａ｛１００｝”に対応している。後述するように、Ａ｛１００｝は繰り返し文字「Ａ」を繰り返し回数「１００回」繰り返すことを意味する。【００５４】
図３は、図２に示した構文木から得られる１文字ＮＦＡを示す遷移図である。一般的に、構文木を１文字ＮＦＡに変換する一般的な方法として、非特許文献１や非特許文献２などに開示されている。このため、ここでは構文木内の「繰り返し正規表現」を表すノードに対する変換についてのみ説明する。構文木内の「繰り返し正規表現」を表すノードは１文字ＮＦＡにおいて繰り返し正規表現であることを示す１個の状態遷移に変換する。【００５５】
具体的には、図２の“Ａ｛１００｝”に対応する「繰り返し正規表現」は、図３の状態７と状態８を含む実線枠“Ａ｛１００｝”に対応する状態遷移に変換される。【００５６】
また、構文木から１文字ＮＦＡへの変換を行う際に、構文木において「繰り返し正規表現」を表すノードがあった場合、繰り返し正規表現に関する情報を繰り返し正規表現情報リストとして繰り返し正規表現記憶部３１に格納する。【００５７】
図４は、図１に示した繰り返し正規表現記憶部３１に記憶される繰り返し正規表現情報リストの一例を示す表である。リストの各エントリーは繰り返し正規表現の繰り返し文字、繰り返し正規表現の繰り返し回数、繰り返し正規表現に対応する１文字ＮＦＡでの状態遷移の開始番号から構成される。【００５８】
繰り返し正規表現情報リストのエントリーは正規表現内の繰り返し正規表現の個数分用意される。例として用いている正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”では、繰り返し正規表現は“Ａ｛１００｝”の一つだけのため、繰り返し正規表現情報リストのエントリー数は１であり、”Ａ｛１００｝”に対応する繰り返し正規表現情報リストのエントリーの内容は、構文木の「繰り返し正規表現」を示すノードの情報に基づき、繰り返し文字が「Ａ」、繰り返し回数が１００となる。【００５９】
また、図３の１文字ＮＦＡにおいて“Ａ｛１００｝”に対応する状態遷移は状態７から状態８に対応する状態遷移であり、”Ａ｛１００｝”に対応する繰り返し正規表現情報リストのエントリーの開始状態番号には７が格納される。以上が、１文字ＮＦＡ生成部２１の動作である。【００６０】
次に、多文字ＮＦＡ変換前処理部２２の動作について説明する。図５は、多文字ＮＦＡ変換前処理部２２の動作を示すフローチャートである。まず入力装置１１から動作文字数Ｍを読み込む（ステップＳ１０１）。動作文字数Ｍは、生成する多文字ＮＦＡの遷移条件となる文字（列）の長さであり、本発明ではＭが２以上の自然数の場合を対象とする。前述のように、ここではＭ＝４である。次に、１文字ＮＦＡに含まれる全ての繰り返し正規表現を多文字変換用の状態遷移に置き換えを行う（ステップＳ１０２）。【００６１】
図６は、図５のステップＳ１０２として示した繰り返し正規表現の多文字変換用の状態遷移への置き換えの詳細を示すフローチャートである。１文字ＮＦＡに含まれる全ての繰り返し正規表現に関する情報は、１文字ＮＦＡ生成部２１により繰り返し正規表現情報リストに登録されているため、１文字ＮＦＡに含まれる繰り返し正規表現すべてについて変換処理を行うことは、繰り返し正規表現情報リストの全てのエントリーについて処理を行うことと等価である。【００６２】
したがって、ステップＳ１０２では、繰り返し正規表現情報リストの全てのエントリーについて処理を行う（ステップＳ２０１〜２０９の繰り返し処理）。ステップＳ１０２開始時点での繰り返し正規表現情報リストは図４に示す通りである。ステップＳ２０２〜２０８が、繰り返し正規表現情報リストの各エントリーに関する処理である。【００６３】
以下の説明では、繰り返し正規表現情報リストのｉ番目のエントリーの繰り返し文字をＡｉ、繰り返し回数をＣｉ、開始状態番号をＳｉとする。まず、１個目のエントリーについて、ステップＳ２０２〜２０８の処理を行う。最初にステップＳ２０３で、繰り返し回数Ｃｉと動作文字数Ｍの比較を行う。図４に示す繰り返し正規表現情報リストの１個目のエントリーでは繰り返し回数Ｃｉ＝１００なので、Ｃｉ（＝１００）＞Ｍ（＝４）となり、ステップＳ２０４に進む。ステップＳ２０４では、開始状態番号Ｓｉから始まる繰り返し正規表現をＭ＋１個の文字Ａｉの状態遷移で置換する。【００６４】
多文字ＮＦＡ変換前処理部２２が処理を開始する時点で１文字ＮＦＡ記憶部３２に格納されている１文字ＮＦＡは図３に示す通りである。繰り返し正規表現情報リストの１個目のエントリーでは、「開始状態番号Ｓｉから始まる繰り返し正規表現」は、図３の状態７と状態８を含む実線枠“Ａ｛１００｝”に対応する状態遷移である。【００６５】
これを、繰り返し文字Ａｉ（＝“Ａ”）のＭ＋１（＝５）個の状態遷移で置換する。文字“Ａ”の５個の状態遷移は、具体的には図７の状態７→８→９→１０→１１→１２を囲んだ実線枠内の状態遷移に対応する。状態遷移が５回なので、両端の状態を含めて６個の状態から構成されている。【００６６】
次に、ステップＳ２０５において、文字“Ａ”の５個の状態遷移を構成する状態のうち両端を除いた状態のうち、最も先頭に近い状態の番号、つまり置換後のＭ＋１（＝５）個の状態遷移の先頭から２番目の状態の番号を、繰り返し正規表現情報リストの１番目のエントリーの開始状態番号として格納する。図７の例では、置換後のＭ＋１（＝５）個の状態遷移の先頭から２番目の状態は状態８なので、繰り返し正規表現情報リストの１番目のエントリーの開始状態番号として８が格納される。【００６７】
以上で、これで１個目のエントリーに関する処理は終了である。例として用いている正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”では、繰り返し正規表現は“Ａ｛１００｝”の一つだけのため、繰り返し正規表現情報リストに含まれるエントリーは１個であり、この時点で繰り返し正規表現情報リストの全エントリーについての処理が完了する。この時点での生成された１文字ＮＦＡを後述の図７に示す。【００６８】
一方、図６のステップＳ２０３において、繰り返し回数Ｃｉと動作文字数Ｍの比較を行い、Ｃｉ≦Ｍ  の場合には、繰り返し正規表現をそのままＣｉ個の文字Ａｉの連接に展開する（ステップＳ２０６）。Ｃｉ≦Ｍの場合、繰り返し回数Ｃｉの繰り返し正規表現とＣｉ個の文字  Ａｉ  の連接は全く等価であり、多文字生成後処理部１２４において後処理を行う必要がないため、繰り返し正規表現情報リストから対応するエントリーを削除する（ステップＳ２０７）。【００６９】
例として用いている正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”では、繰り返し回数がＭ回以下の繰り返し正規表現は含まれていないため、今回の例ではステップＳ２０６〜７に該当する処理は行われない。以上で、ステップＳ１０２の処理が完了する。【００７０】
図７は、図５のステップＳ１０２まで完了した時点で得られた変換用１文字ＮＦＡを示す遷移図である。また図８は、図５のステップＳ１０２まで完了した時点での繰り返し正規表現記憶部３１に保持されている繰り返し正規表現情報リストを示す概念図である。【００７１】
最後に、ステップＳ１０３において、変換用１文字ＮＦＡを、ε遷移を含まない１文字ＮＦＡに変換する。ε遷移を含むＮＦＡをε遷移を含まないＮＦＡに変換する方法は一般にε−クロージャ（ε−閉包）と呼ばれ、非特許文献１などで開示されている。ε−クロージャにより、繰り返し正規表現に対応する状態遷移、具体的には図７の状態７→８→９→１０→１１→１２を囲んだ実線枠内の状態遷移の番号に変化があった場合には、繰り返し正規表現情報リストの対応するエントリーの開始状態番号を更新する。【００７２】
図９は、図５のステップＳ１０３のε−クロージャ処理を行った後の変換用１文字ＮＦＡ記憶部３３に記憶されている変換用１文字ＮＦＡを示す遷移図である。図９では、繰り返し正規表現“Ａ｛１００｝”に対応する状態遷移は、状態３→４→５→６→７→８に至る実線枠内の状態遷移であり、状態番号に変更が発生しているため、繰り返し正規表現情報リストも更新する。【００７３】
図１０は、図５のステップＳ１０３まで完了した時点での、繰り返し正規表現記憶部３１に保持されている繰り返し正規表現情報リストを示す概念図である。ステップＳ１０３でε遷移を含まない１文字ＮＦＡへの変換を行っているのは、次の多文字ＮＦＡ変換部２３で、（変換用）１文字ＮＦＡを（変換用）多文字ＮＦＡに変換する非特許文献３の方法では、入力としてε遷移を含まないＮＦＡを与える必要があるためである。多文字ＮＦＡ変換部２３で、入力としてε遷移を含むＮＦＡを与えることができる多文字ＮＦＡ変換方法を用いる場合には、ステップＳ１０３のε遷移を含まない１文字ＮＦＡへの変換処理は不要である。また、本実施の形態の説明では、ステップＳ１０２において１文字ＮＦＡに含まれる繰り返し正規表現を多文字変換用の状態遷移に変換した後、ステップＳ１０３において変換用１文字ＮＦＡをε遷移を含まない１文字ＮＦＡに変換するε−閉包を行っているが、ε−閉包を行うタイミングに制約はなく、例えば、１文字ＮＦＡ生成部２１において正規表現から１文字ＮＦＡを生成した直後にε−閉包を行って、ε遷移を含まない１文字ＮＦＡを多文字ＮＦＡ変換前処理部２２に入力してもよい。【００７４】
多文字ＮＦＡ変換前処理部２２の処理では、ステップＳ１０２やステップＳ１０３における変換用１文字ＮＦＡの生成過程の中間データも変換用１文字ＮＦＡ記憶部３３に格納され、ステップＳ１０３まで完了した時点で、変換用１文字ＮＦＡ記憶部３３には完成した変換用１文字ＮＦＡが格納される。以上で、多文字ＮＦＡ変換前処理部２２の処理が完了する。【００７５】
次に、多文字ＮＦＡ変換部２３は、入力装置１１から動作文字数を読み込む。動作文字数の意味は、上記の多文字ＮＦＡ変換前処理部２２の説明において述べた意味と同じである。多文字ＮＦＡ変換部２３は、多文字ＮＦＡ変換前処理部２２から変換完了の通知を受信すると、多文字変換部１２３では、非特許文献３にて開示されているＮＦＡ記述行列による変換方法を用いて、変換用１文字ＮＦＡ記憶部３３に格納された変換用１文字ＮＦＡから、多文字ＮＦＡを生成し、生成された多文字ＮＦＡを変換用多文字ＮＦＡとして変換用多文字ＮＦＡ記憶部３４に格納し、多文字ＮＦＡ変換後処理部２４に変換用多文字ＮＦＡへの変換が完了したことを通知する。【００７６】
ＮＦＡ記述行列による変換方法は非特許文献３に詳細に説明されている。図１１は、図１に示す多文字ＮＦＡ変換部２３による変換処理により生成され、変換用多文字ＮＦＡ記憶部３４に格納された変換用多文字ＮＦＡを示す遷移図である。【００７７】
多文字ＮＦＡ変換部２３で（変換用）１文字ＮＦＡから（変換用）多文字ＮＦＡへの変換に用いる方法としては、変換前と変換後で状態番号の変化が発生しない方法であればどのような方法でも使用することができる。「状態番号の変化が発生しない」とは、例えば、１文字単位のＮＦＡ（図９）から４文字単位のＮＦＡ（図１１）への変換を行う際に、１文字単位のＮＦＡにおいて状態２から文字列“ＤＥＳＡ”と４文字分遷移すると状態４に到達するが、これが４文字のＮＦＡにおいても遷移条件“ＤＥＳＡ”で状態２から状態４へ遷移するというように、遷移先と遷移元の状態番号が変化しないことをいう。非特許文献３で開示されているＮＦＡ記述行列による方法はこの条件を満たす変換方法の一つである。【００７８】
次に、多文字ＮＦＡ変換後処理部２４の動作を説明する。多文字ＮＦＡ変換後処理部２４では、最初に入力装置１１から動作文字数を読み込む。動作文字数の意味は、上記の多文字ＮＦＡ変換前処理部２２の説明において述べた意味と同じである。その後、多文字ＮＦＡ変換部２３から変換完了の通知を受信すると、変換用多文字ＮＦＡ記憶部３４に保持された変換用多文字ＮＦＡに含まれる多文字変換用の状態遷移を、Ｍ文字単位の繰り返し正規表現に置き換える処理を行う。【００７９】
図１２は、図１に示した多文字ＮＦＡ変換後処理部２４が、変換用多文字ＮＦＡ記憶部３４に保持された変換用多文字ＮＦＡに含まれる多文字変換用の状態遷移を、Ｍ文字単位の繰り返し正規表現に置き換える処理の詳細を示すフローチャートである。【００８０】
多文字ＮＦＡ変換後処理部２４において後処理を行う必要のある繰り返し正規表現は、繰り返し文字数がＭより大きい繰り返し正規表現全てであり、繰り返し正規表現記憶部３１に保持されている繰り返し正規表現情報リストのエントリーと過不足なく１：１に対応している。なぜなら、多文字ＮＦＡ変換後処理部２４において後処理を行う必要のない繰り返し正規表現は繰り返し文字数がＭ以下の繰り返し正規表現であり、このような繰り返し正規表現は図６のステップＳ２０６〜２０７において、繰り返し正規表現情報リストから削除されているからである。【００８１】
よって、多文字ＮＦＡ変換後処理部２４では繰り返し正規表現情報リストの全エントリーについて処理を行う（ステップＳ３０１〜３０８の繰り返し）。ステップＳ３０２〜３０７で挟まれた間のステップが繰り返し正規表現情報リストの個々のエントリーに対する処理である。多文字ＮＦＡ変換後処理部２４の処理が開始される時点での繰り返し正規表現記憶部３１に保持されている繰り返し正規表現情報リストの内容は図１０の通りである。繰り返し正規表現情報リストの１個目のエントリーに対する処理を例に図１２のフローチャートの動作を説明する。【００８２】
最初に多文字ＮＦＡ変換後処理部２４は、繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態のコピーを作成する（ステップＳ３０３）。繰り返し正規表現情報リストの１個目のエントリーでは開始状態番号は４であり、今回の動作例では動作文字数Ｍは４なので、「繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態」は状態４、５、６、７のＭ（＝４）個の状態である。これらＭ（＝４）個の状態のコピーを生成する。【００８３】
図１３は、図１２のステップＳ３０３に示したコピー状態の生成まで行った時点での多文字ＮＦＡを示す遷移図である。図１３では、状態４、５、６、７のコピーをそれぞれ状態４−２、５−２、６−２、７−２と表記している。【００８４】
次に多文字ＮＦＡ変換後処理部２４は、作成されたコピー状態へ出力方向の遷移を移動する。具体的には、状態４が遷移元となっている状態遷移があれば、その状態遷移の遷移元を状態４−２に変更する（ステップＳ３０４）。これを状態４が遷移元となっている状態遷移全てについて行う。状態５、６、７が遷移元となっている状態遷移も全て、それぞれ状態５−２、６−２、７−２が遷移元となるように変更する。【００８５】
図１４は、図１２のステップＳ３０４の処理まで完了した時点での多文字ＮＦＡを示す遷移図である。例えば、図１３において状態６から状態８へ遷移条件“ＡＡＳＥ”で遷移する状態遷移は、図１４に示すように状態６−２から状態８への遷移条件“ＡＡＳＥ”で遷移する状態遷移に変更される。また、図１３において状態７から状態５へ遷移条件“ＡＳＡＡ”で遷移する状態遷移は、図１４に示すように状態７−２から状態５への遷移条件“ＡＳＡＡ”で遷移する状態遷移に変更され、遷移先の状態が状態４、５，６、７のいずれかであっても遷移先は変更しない。【００８６】
次に多文字ＮＦＡ変換後処理部２４は、繰り返し正規表現に対応する状態とそのコピー状態に整理番号を割り振る（ステップＳ３０５）。具体的には、繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態には、状態番号Ｓｉから順番に１からＭまでの整理番号を割り当てる。繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態に対応するＭ個のコピーには、状態番号Ｓｉに対応するコピーから順番にＣｉ−ＭからＣｉ−１までの整理番号を割り当てる。【００８７】
図１５は、多文字ＮＦＡ変換後処理部２４の動作の説明に用いている、繰り返し正規表現情報リストの１個目のエントリーに対する図１２のステップＳ３０５の動作を説明する概念図である。繰り返し正規表現情報リストの１個目のエントリーでは、繰り返し回数Ｃｉ＝１００であり、動作文字数Ｍ＝４である。開始状態番号Ｓｉ＝４なので、繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態は、ステップＳ３０３の説明でも述べたとおり状態４、５、６、７に対応する。【００８８】
このＭ（＝４）個の状態に対しては、状態４から順番に１から４までの整理番号を割り当てる。また、繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態に対応するＭ個のコピーは状態４−２、５−２、６−２、７−２である（状態４に対応する状態が状態４−２）。これら４（＝Ｍ）個のコピー状態４−２、５−２、６−２、７−２に対して、状態４−２から順番にＣｉ−Ｍ（＝１００−４＝９６）からＣｉ−１（＝１００−１＝９９）の整理番号を割り当てる。これがステップＳ３０５の動作である。【００８９】
次に多文字ＮＦＡ変換後処理部２４は、擬似番号に基づきＭ文字単位の繰り返し正規表現による遷移に割り当てる（ステップＳ３０６）。具体的には、繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態とそのコピーであるＭ個の状態を、整理番号をＭで割った際の剰余が同じもの同士をペアとするＭ組のペアに分割し、各ペアを構成する状態間で、コピー状態が遷移先となるように、Ｍ文字単位の繰り返し正規表現を表す状態遷移を作成する。【００９０】
Ｍ文字単位の繰り返し正規表現は、繰り返し文字がＭ個の文字Ｃｉであり、繰り返し回数は（コピー状態の整理番号―オリジナル状態の整理番号）÷Ｍとする。図１５において、「繰り返し正規表現に対応する状態番号Ｓｉから始まるＭ個の状態」は状態４、５、６、７に、「そのコピーであるＭ個の状態」は状態４−２、５−２、６−２、７−２に対応する。各状態に割り当てられた整理番号をＭ（＝４）で割った際の剰余を図１５の各状態の傍に記す。状態４、５、６、７と状態４−２、５−２、６−２、７−２のうち、剰余が同じもの同士を選ぶと、図１５の矢印で示すように状態のペアが４つ作成される。このペアの間で、状態４、５、６、７側が遷移元、状態４−２、５−２、６−２、７−２側が遷移先となる、Ｍ文字単位の繰り返し正規表現を表す状態遷移を作成する。【００９１】
例えば、状態４と状態５−２は剰余が１でペアを構成するが、整理番号の差分は９７−１＝９６であり、これをＭ（＝４）で割ると、Ｍ文字単位の繰り返し正規表現の繰り返し回数は２４となる。また、繰り返し正規表現情報リストの１個目のエントリーの繰り返し文字Ａｉは“Ａ”なので、Ｍ文字単位の繰り返し正規表現の繰り返し文字は“ＡＡＡＡ”（“Ａ”がＭ（＝４）個）となる。【００９２】
同様に、状態７と状態４−２は剰余が０でペアを構成するが、整理番号の差分は９６−４＝９２であり、これをＭ（＝４）で割ると、Ｍ文字単位の繰り返し正規表現の繰り返し回数は２３となり、繰り返し正規表現の繰り返し文字は状態４→状態５−２の場合と同様に“ＡＡＡＡ”となる。【００９３】
図１６は、図１２のステップＳ３０６において割り当てられたＭ文字単位の繰り返し正規表現を、図１４の多文字ＮＦＡに追加したものを示す遷移図である。ここで、“ＡＡＡＡ｛２４｝”は、遷移条件“ＡＡＡＡ”が２４回繰り返されることを示す。【００９４】
以上で、繰り返し正規表現情報リストの１個目のエントリーに対する処理は完了する。例として用いている正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”では、繰り返し正規表現は“Ａ｛１００｝”の一つだけのため、繰り返し正規表現情報リストに含まれるエントリーは１個であり、この時点で繰り返し正規表現情報リストの全エントリーについての処理が完了する。以上で、多文字ＮＦＡ変換後処理部２４の動作が完了する。【００９５】
なお、多文字変換後処理部１２４の処理では、多文字ＮＦＡの生成過程の中間データも多文字ＮＦＡ記憶部３５に格納され、ステップＳ３０８まで完了した時点で、多文字ＮＦＡ記憶部３５には完成した多文字ＮＦＡが格納される。【００９６】
ＨＤＬ変換部２５は、多文字ＮＦＡ変換後処理部２４から変換完了の通知を受信すると、多文字ＮＦＡ記憶部３５に保持された多文字ＮＦＡから、そのＮＦＡの状態、状態間の遷移、遷移条件等の情報を分析し、各状態をレジスタに、遷移条件を文字（列）比較器に変換し、状態間の遷移に応じて各レジスタの間を接続し、VerilogやVHDLなどのハードウェア記述言語（ＨＤＬ: Hardware Description Language）で記述された、そのＮＦＡ回路を示す回路記述に変換し、出力装置１３に出力する。【００９７】
この際、多文字ＮＦＡ記憶部３５に保持された多文字ＮＦＡに含まれるＭ文字単位の繰り返し正規表現に対応するＮＦＡ回路として、非特許文献４により開示されているＮＦＡ回路構成を用いる。例えば、４文字単位の繰り返し正規表現“ＡＡＡＡ｛２４｝”を構成するためには、非特許文献４のＦｉｇｕｒｅ．４（ｃ）に記載の回路構成で、左下の入力ａに、連続する４つの入力文字が“ＡＡＡＡ”である場合に１が入力されるような回路構成を使用すればＭ文字単位の繰り返し正規表現に対応するＮＦＡ回路が構成できる。【００９８】
図１７は、４文字単位の繰り返し正規表現“ＡＡＡＡ｛２４｝”を構成するためのＮＦＡ回路構成例を示す概念図である。繰り返し正規表現に対応する状態遷移に関する部分以外の多文字ＮＦＡをＮＦＡ回路に変換する方法は、非特許文献２、非特許文献３、非特許文献４で開示されている。【００９９】
次に、上記の第１の実施の形態の全体的な動作について説明する。本発明の第１の実施の形態に係る有限オートマトン生成装置１は、正規表現および当該正規表現に係る動作文字数Ｍの入力を受け付け（図５：ステップＳ１０１）、入力された正規表現に基づいて第１の１文字ＦＡを生成する。そして入力された動作文字数Ｍに基づいて、前述の第１の１文字ＦＡに含まれるＭ文字単位の繰り返し正規表現を表す状態遷移を多文字変換用の状態遷移に置換して第２の１文字ＦＡを生成する（図５：ステップＳ１０２〜１０３）。これに続いて、この第２の１文字ＦＡから前述の動作文字数Ｍに基づいて、第１の多文字ＦＡを生成し、第１の多文字ＦＡ中の繰り返し正規表現に対応する多文字変換用の状態遷移をＭ文字単位の繰り返し正規表現を表す状態遷移に置き換えて第２の多文字ＦＡを生成する（図１２：ステップＳ３０１〜３０８）という動作を行う。【０１００】
ここで、第２の多文字ＦＡを出力する処理は、第１の多文字ＦＡに含まれる、繰り返し正規表現に対応する多文字変換用の状態遷移を、あらかじめ定められた演算ルールに基づき、図１２〜１６で説明したように、動作文字数Ｍ単位の繰り返し正規表現を表す状態遷移に置き換えるという処理である。
また、第１の１文字ＦＡを第２の１文字ＦＡに変換する処理は、第１の１文字ＦＡに含まれる、繰り返し正規表現の繰り返し回数が動作文字数より大きい繰り返し正規表現を表す状態遷移を、図６〜７で説明したように、動作文字数Ｍより決定される繰り返し回数の繰り返し正規表現を表す状態遷移に置換することで、第２の１文字ＦＡを生成するという処理である。【０１０１】
なお、前述の説明の中で「第１の１文字ＦＡ」は「１文字ＮＦＡ」、「第２の１文字ＦＡ」は「変換用１文字ＮＦＡ」、「第１の多文字ＦＡ」は「変換用多文字ＮＦＡ」、「第２の多文字ＦＡ」は「多文字ＮＦＡ」と表記した。また、「多文字変換用の状態遷移」は、図６のステップＳ２０１〜２０９の繰り返し処理として記載された処理である。
また、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行する有限オートマトン生成装置１が備えているコンピュータに実行させるようにしてもよい。【０１０２】
このように本発明の第１の実施の形態に係る有限オートマトン生成装置１は、繰り返し正規表現を含む正規表現が与えられた場合に、その正規表現を変換した１文字単位のＮＦＡにおいて、繰り返し正規表現に対応する状態遷移を、繰り返し回数分の基本要素の連接に展開せず、必要最小限の状態数で構成される状態遷移に置き換えた上で、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行う。【０１０３】
正規表現を表現する１文字単位のＮＦＡや複数文字単位のＮＦＡの状態数が繰り返し正規表現の繰り返し回数に比例せず、繰り返し正規表現の個数に比例するため、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が多くなった場合でも、正規表現を表現する１文字単位のＮＦＡや複数文字単位のＮＦＡの状態数を小さく抑えることが可能である。【０１０４】
また、１文字単位のＮＦＡの状態数を少なく抑えることができるため、結果的に１文字ＮＦＡから多文字ＮＦＡへの変換時の演算量を小さく抑えることができる。【０１０５】
さらに、１文字単位のＮＦＡにおいて繰り返し正規表現に対応する状態遷移を必要最小限の状態数で構成される状態遷移に置き換える際に、置き換えたＮＦＡの状態番号を繰り返し正規表現に関する情報として、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行う前に保持しておき、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行う際に状態番号の変化を伴わない変換部を用い、複数文字単位のＮＦＡへの変換後に、あらかじめ保持しておいた繰り返し正規表現に対応する状態遷移に対応するＮＦＡの状態番号を参照して、複数文字単位の繰り返し正規表現に変換しているため、１文字単位のＮＦＡを複数文字単位のＮＦＡに変換した後においても、繰り返し正規表現が存在する位置を特定することができる。【０１０６】
さらに、複数文字単位のＮＦＡに変換した後においても、繰り返し正規表現が存在する位置を特定することができるため、１クロックサイクルに複数文字を処理できるＮＦＡ回路を構成する際に、複数文字単位の繰り返し正規表現に対応するＮＦＡ回路として、効率のよい、例えば必要なハードウェア資源が少ない、ＮＦＡ回路構成などを用途に応じて選択して適用することができる。【０１０７】
上記の実施の形態の説明では、繰り返し文字は‘Ａ’、‘Ｂ’といった単一文字を例に説明したが、マッチする文字の長さが１文字の正規表現であればどのような正規表現を繰り返し文字として指定しても良い。例えば、“（Ａ｜Ｂ）”や“［Ａ−Ｚａ−ｚ０−９］”など複数文字のいずれかを表す正規表現を繰り返し正規表現の繰り返し文字として指定することもできる。【０１０８】
以上、説明した本発明の第１の実施の形態では、以下のような効果を得ることができる。第１の効果は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が多くなった場合でも、正規表現を表現する１文字単位のＮＦＡや複数文字単位のＮＦＡの状態数や、１文字ＮＦＡから多文字ＮＦＡへの変換時の演算量を小さく抑えることができることである。【０１０９】
その理由は、繰り返し正規表現を含む正規表現が与えられた場合に、その正規表現を変換した１文字単位のＮＦＡにおいて、繰り返し正規表現に対応する状態遷移を、繰り返し回数分の基本要素の連接に展開せず、必要最小限の状態数で構成される状態遷移に置き換えた上で、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行うためである。また、複数文字単位のＮＦＡを生成した後、複数文字単位の繰り返し正規表現を含む状態遷移を再生する際にも、繰り返し正規表現に関連する状態間の関係を参照することで、状態数の増加を動作文字数の２倍程度に抑える変換方法を採用しているため、複数文字単位のＮＦＡの状態数の増加を小さく抑えることができる。【０１１０】
第２の効果は、１文字単位のＮＦＡを複数文字単位のＮＦＡに変換した後においても、繰り返し正規表現が存在する位置を特定できることである。【０１１１】
その理由は、１文字単位のＮＦＡにおいて繰り返し正規表現に対応する状態遷移を必要最小限の状態数で構成される状態遷移に置き換える際に、置き換えたＮＦＡの状態番号を繰り返し正規表現に関する情報として、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行う前に保持しておき、１文字単位のＮＦＡから複数文字単位のＮＦＡへの変換を行う際に状態番号の変化を伴わない変換部を用い、複数文字単位のＮＦＡへの変換後に、あらかじめ保持しておいた繰り返し正規表現に対応する状態遷移に対応するＮＦＡの状態番号を参照して、複数文字単位の繰り返し正規表現に変換しているためである。【０１１２】
第３の効果は、１クロックサイクルに複数文字を処理できるＮＦＡ回路において、繰り返し正規表現に対応するＮＦＡ回路として効率のよいＮＦＡ回路構成を適用することが可能な点である。【０１１３】
その理由は、第２の効果により、１文字単位のＮＦＡを複数文字単位のＮＦＡに変換した後においても、繰り返し正規表現が存在する位置を特定できるため、１クロックサイクルに複数文字を処理できるＮＦＡ回路を構成する際に、複数文字単位の繰り返し正規表現に対応するＮＦＡ回路として効率のよいＮＦＡ回路構成を選択して適用することができるためである。【０１１４】
なお、一般に、有限オートマトン（ＦＡ、Finite Automaton）にはＮＦＡ（非決定性有限オートマトン）とＤＦＡ（決定性有限オートマトン、Deterministic Finite Automaton）の２種類に分類される。上記の本発明の実施の形態はＮＦＡを用いて説明したが、本実施の形態と同様の構成をＤＦＡに対して適用することもができる。具体的には、１文字ＮＦＡ生成手段１２１において、１文字単位のＮＦＡを生成する代わりに１文字単位のＤＦＡを生成し、１文字単位のＤＦＡを生成する際に繰り返し正規表現に対応する状態遷移の開始状態番号を保持するようにすれば、ＮＦＡに限らずＤＦＡに対しても、行列サイズの小さな縮小版の記述行列を用いて、同時に複数文字を処理できるＭ文字単位のＤＦＡを生成することができる。この場合の有限オートマトン生成装置の構成は、ここまでで説明したものと同一で、ただ「ＮＦＡ」を「ＤＦＡ」に読み替えるだけでよい。【０１１５】
［第２の実施の形態］
図１８は本発明の第２の実施の形態に係る有限オートマトン生成装置４０１の構成を示すブロック図である。有限オートマトン生成装置４０１は、第１の実施の形態に係る有限オートマトン生成装置１と同様に、入力装置４１１、データ処理装置４１８、記憶装置４１４、出力装置４１３を備える。データ処理装置４１８は、ＣＰＵ、ＲＡＭ、ＯＳなどによって構成されるコンピュータ装置の中心部であり、プログラムを実行する主体である。【０１１６】
本実施の形態においては、第１の実施の形態のデータ処理装置１２における１文字ＮＦＡ生成部２１、多文字ＮＦＡ変換前処理部２２、多文字ＮＦＡ変換部２３、多文字ＮＦＡ変換後処理部２４、およびＨＤＬ変換部２５に相当する処理を、データ処理装置４１８で実行される正規表現―ＨＤＬ変換プログラム４１５で実現したものである。【０１１７】
正規表現―ＨＤＬ変換プログラム４１５は、データ処理装置４１８に読み込まれ、データ処理装置４１８の動作を制御し、記憶装置４１４内に繰り返し正規表現記憶部４３１、１文字ＮＦＡ記憶部４３２、変換用１文字ＮＦＡ記憶部４３３、変換用多文字ＮＦＡ記憶部４３４、多文字ＮＦＡ記憶部４３５を生成する。各々の機能は、前述した第１の実施の形態のデータ処理装置１２における同名の機能部と各々同一となっている。【０１１８】
データ処理装置４１８は、正規表現―ＨＤＬ変換プログラム４１５の制御により、第１の実施の形態におけるデータ処理装置１２による処理と同一の処理を行うことができ、同一の効果を得ることができる。
なお、第２の実施の形態も、第１の実施の形態と同様に、ＮＦＡに限らずＤＦＡに対しても適用することが可能である。その他の構成および作用効果については、前述した第１の実施の形態と同一である。【０１１９】
［第３の実施の形態］
図１９は本発明の第３の実施の形態に係る有限オートマトン生成装置５０１の構成を示すブロック図である。有限オートマトン生成装置５０１は、本発明の第１の実施の形態に係る有限オートマトン生成装置１の構成に加えて、ＦＰＧＡ等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするためコンフィグレーション装置５４１、パターンマッチングの対象となるデータパターンマッチング装置に入力する入力装置５５０と、ＦＰＧＡ等の再構成可能なハードウェアデバイスを有するパターンマッチング装置５６０と、パターンマッチングの結果を出力するためのディスプレイ装置や印刷装置等の出力装置５７０を備える。これら以外の構成および作用効果については、前述した第１の実施の形態と同一である。【０１２０】
データ処理装置５１６は、図１に示した第１の実施の形態のデータ処理装置１２に、コンフィグレーションデータ変換部５２６を加えたものである。その他は、前記第１の実施の形態と同じである。また、記憶装置５１４は、図１に示した第１の実施の形態の記憶装置１４内の各々の記憶部の他に、ＨＤＬ記憶部５３６が記憶されている。ＨＤＬ記憶部５３６には、ＨＤＬ変換部２５によって変換されたＨＤＬ回路記述が記憶される。【０１２１】
コンフィグレーションデータ変換部５２６は、ＨＤＬ変換部２５から正規表現からＨＤＬ回路記述への変換が完了したことを示す信号を受け取ると、ＨＤＬ変換部２５から受信した多文字ＮＦＡを記述するＨＤＬ回路記述から、パターンマッチング装置５６０が有する再構成可能なハードウェアデバイスの構成情報となるコンフィグレーションデータへ変換し、変換が終了すると、コンフィグレーション装置５４１に出力する。なお、ＨＤＬ回路記述からコンフィグレーションデータへの変換については、例えばＦＰＧＡであれば、そのベンダーが提供している開発ツールを使用することができる。【０１２２】
コンフィグレーション装置５４１は、コンフィグレーションデータ変換部５２６からコンフィグレーションデータを受信すると、パターンマッチング装置５６０のパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスを構成・設定する。【０１２３】
コンフィグレーション装置５４１は、ＦＰＧＡ等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするための制御プログラムや、ハードウェアデバイスにデータを転送するための書き込みケーブルなどで構成され、これらの構成要素は、例えばＦＰＧＡであれば、デバイスベンダーが提供している開発ツールに含まれる。コンフィグレーションデータを用いて再構成可能なハードウェアデバイスを構成・設定する詳細な手順については、ＦＰＧＡなどのデバイスベンダーの提供する開発ツールを使用する。【０１２４】
パターンマッチング装置５６０は、データ入力部５６１と、パターンマッチング部５６２と、結果出力部５６３とを備えている。データ入力部５６１、パターンマッチング部５６２、結果出力部５６３は、別々の再構成可能なハードウェアデバイス上に構成されるものとする。【０１２５】
データ入力部５６１は、データ入力装置１７４から入力されたパケットデータや、テキストデータ等のパターンマッチング対象データ（これを被検索データと呼ぶ）を整形し、データ処理装置５１６で生成された同時動作数に等しい同時処理文字数に並列化し、前記同時処理文字数単位に被検索データをパターンマッチング部５６２へ入力する。【０１２６】
パターンマッチング部５６２は、コンフィグレーション装置５４１を経由して入力された、データ処理装置１６で生成したコンフィグレーションデータにより構成される回路であり、データ処理装置１６にて生成した多文字ＮＦＡ回路そのものである。【０１２７】
パターンマッチング部５６２に構成されたＮＦＡ回路は、データ入力部５６１から被検索データが入力されるたびに状態遷移が起こり、パターンに一致した場合にはその信号が終了状態を構成しているレジスタからパターンに一致した旨を示す信号とパターンに一致した被検索データに関する情報（例えば、パターンに一致した被検索データの位置など）が結果出力部５６３へと出力される。【０１２８】
結果出力部５６３は、パターンマッチング部５６２から入力されたパターンに一致したことを示す信号とパターンに一致した被検索データに関する情報を受け取る。結果出力部５６３は、入力された被検索データがどの入力文字列でどのパターンに一致したのか等の情報を処理して、結果出力装置１７５へ出力する。なお、どのパターンに一致したかは、予め定義しておいたパターン番号等により通知するといった方法がある。【０１２９】
本実施の形態では、正規表現そのものを入力することで、１文字ＮＦＡから指定された処理文字数で遷移を行う多文字ＮＦＡの変換を行い、そのＮＦＡ回路を記述するＨＤＬ記述を生成した後に、ＨＤＬ記述により記述されたＮＦＡ回路をパターンマッチング装置内のハードウェアデバイス上に構成し、それを用いたパターンマッチング装置を実現することができる。【０１３０】
第１の実施の形態の説明において述べたように、本発明では１文字単位のＮＦＡの状態数を少なく抑えることができるため、結果的に１文字ＮＦＡから多文字ＮＦＡへの変換時の演算量を小さく抑えることができるため、正規表現が入力されてからＭ文字単位のＮＦＡを得て、最終的に指定された正規表現を検索する回路のＨＤＬ記述を得るための所用時間を削減することができる。【０１３１】
そのため、入力装置１１より新たな正規表現が入力された際に、短い時間で多文字ＮＦＡ回路を記述したＨＤＬ回路記述を得ることができるため、そのＮＦＡ回路を記述したＨＤＬ回路記述を変換したコンフィグレーションデータを短い時間で得ることができ、入力装置１１より新たな正規表現が入力されてからその正規表現がパターンマッチング部５６２の構成を反映されるまでの時間を短縮することができる。【０１３２】
また、複数文字単位のＮＦＡに変換した後においても、繰り返し正規表現が存在する位置を特定することができるため、１クロックサイクルに複数文字を処理できるＮＦＡ回路を構成する際に、複数文字単位の繰り返し正規表現に対応するＮＦＡ回路として、例えばＮＦＡ回路構成などを用途に応じて選択して適用することができる。【０１３３】
このため、繰り返し正規表現の繰り返し回数が非常に大きい場合であっても、必要なハードウェア資源が少なく、多数の正規表現を収容可能なＮＦＡ回路を構成することが可能となり、パターンマッチング装置において照合可能なパターン数の増加を図ることが可能となる。【０１３４】
なお、第２の実施の形態における正規表現−ＨＤＬ変換プログラム４１５で制御されるデータ処理装置で生成された多文字ＮＦＡを記述するＨＤＬ回路記述を、コンフィグレーションデータ変換部５２６に入力し、前記ＨＤＬ回路記述からコンフィグレーションデータを生成してもよい。【０１３５】
さらに、本実施の形態では、パターンマッチング装置５６０において、データ入力部５６１と、パターンマッチング部５６２と、結果出力部５６３は別々の再構成可能ハードウェアデバイス上に構成されるとしたが、これら３つを同じ再構成可能ハードウェアデバイス上に構成してもよい。【０１３６】
また、例えばデータ入力部５６１と結果出力部５６３を同じ再構成可能ハードウェアデバイス上に、パターンマッチング部５６２を別の再構成可能ハードウェアデバイス上に構成する等、データ入力部５６１と、パターンマッチング部５６２と、結果出力部５６３と、これらを配備する再構成可能ハードウェアデバイスの関係には制約はない。【０１３７】
また、データ入力部５６１と結果出力部５６３については、ＡＳＩＣ（Application Specific Integrated Circuit）などの再構成できないハードウェアデバイスに構成することもできる。また、ハードウェアデバイスの一部のみが再構成可能であり、他の部分は再構成できないハードウェアデバイスを用いて、パターンマッチング部５６２を再構成可能な部分に、データ入力部５６１と結果出力部５６３を再構成できないハードウェアデバイスとして構成してもよい。【０１３８】
ここで、データ入力部５６１、結果出力部５６３の両方、または、いずれかを、パターンマッチング部５６２と同じ再構成可能ハードウェアデバイス上に構成する場合、コンフィグレーションデータ変換部５２６は、ＨＤＬ変換部２５にて生成されたＮＦＡ回路を記述するＨＤＬ回路記述のみでなく、データ入力部５６１や結果出力部５６３の回路を記述するＨＤＬ回路記述も読み込んでコンフィグレーションデータを生成することにより対応できる。【０１３９】
上記の実施の形態の動作の説明では、コンフィグレーション装置５４１はコンフィグレーションデータ変換部５２６からコンフィグレーションデータを受信すると、受信したコンフィグレーションデータを使用して、パターンマッチング装置５６０のパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスを構成・設定するとしたが、コンフィグレーション装置５４１に記憶装置を配備し、いったん受信したコンフィグレーションデータをコンフィグレーション装置５４１に配備した記憶装置内に記憶させた後、記憶装置内からコンフィグレーションデータを読み出して、パターンマッチング装置５６０のパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスを構成・設定してもよい。【０１４０】
また、上記の実施の形態の動作の説明では、コンフィグレーション装置５４１は、コンフィグレーションデータ変換部５２６からコンフィグレーションデータを受信するとパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスの構成を開始するとしたが、コンフィグレーションデータ変換部５２６からコンフィグレーションデータを受信した際にパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスの構成を開始する必要はなく、コンフィグレーション装置５４１に記憶装置を配備し、コンフィグレーションデータ変換部５２６から受信したコンフィグレーションデータをコンフィグレーション装置５４１に配備した記憶装置内に記憶された後、パターンマッチング装置５６０のパターンマッチング部５６２の動作状況を考慮し、パターンマッチング装置５６０のパターンマッチング部５６２の動作に都合のよいタイミングでパターンマッチング部５６２を実現する再構成可能なハードウェアデバイスの構成を開始してもよい。【０１４１】
なお、第３の実施の形態も、第１、第２の実施の形態と同様に、ＮＦＡに限らずＤＦＡに対しても適用することが可能である。【０１４２】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。【０１４３】
この出願は２００８年８月１３日に出願された日本出願特願２００８−２０８４８１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１４４】
本発明の活用例として、正規表現を用いたパターンマッチング処理を行うためのＮＦＡ回路を記述したＨＤＬ生成システム、生成プログラムといった用途に適用できる。また、本発明を用いて生成したＨＤＬによりＮＦＡ回路を構成することで、正規表現を用いた高速なパターンマッチング処理を行うためのパターンマッチング装置といった用途に適用できる。【０１４５】
さらに、パターンマッチング装置にパケット処理回路を加えることにより、ネットワーク侵入検知システム（NIDS: Network Intrusion Detection System）やネットワーク侵入防止システム（NIPS:
Network Intrusion Prevention System）、あるいはコンピュータウィルス検出システムなどにも適用でき、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理の代替となるハードウェアアクセラレータ用ＮＦＡ回路生成システム、生成プログラム、及び、正規表現検索ハードウェアアクセラレータ装置等にも適用できる。
【図面の簡単な説明】
【０１４６】
【図１】本発明の第１の実施の形態に係る有限オートマトン生成装置１の構成を示すブロック図である。
【図２】非特許文献４のｐ．１１１にて開示されている、正規表現“ＢＣＤ（（Ａ｛１００｝｜Ｅ）Ｓ）＊ＴＵ”を、繰り返し正規表現を認識しつつ構文木に変換した結果を示す概念図である。
【図３】図２に示した構文木から得られる１文字ＮＦＡを示す遷移図である
【図４】図１に示した正規表現情報記憶部に記憶される繰り返し正規表現情報リストの一例を示す表である。
【図５】図１で示した多文字ＮＦＡ変換前処理部の動作を示すフローチャートである。
【図６】図５のステップＳ１０２として示した繰り返し正規表現の多文字変換用の状態遷移への置き換えの詳細を示すフローチャートである。
【図７】図５のステップＳ１０２まで完了した時点で得られた変換用１文字ＮＦＡを示す遷移図である。
【図８】図５のステップＳ１０２まで完了した時点での繰り返し正規表現記憶部に保持されている繰り返し正規表現情報リストを示す概念図である
【図９】図５のステップＳ１０３のε−クロージャ処理を行った後の変換用１文字ＮＦＡ記憶部に記憶されている変換用１文字ＮＦＡを示す遷移図である。
【図１０】図５のステップＳ１０３まで完了した時点での、繰り返し正規表現記憶部に保持されている繰り返し正規表現情報リストを示す概念図である。
【図１１】図１に示す多文字ＮＦＡ変換部による変換処理により生成され、変換用多文字ＮＦＡ記憶部に格納された変換用多文字ＮＦＡを示す遷移図である
【図１２】図１に示した多文字ＮＦＡ変換後処理部が、変換用多文字ＮＦＡ記憶部に保持された変換用多文字ＮＦＡに含まれる多文字変換用の状態遷移を、Ｍ文字単位の繰り返し正規表現に置き換える処理の詳細を示すフローチャートである。
【図１３】図１２のステップＳ３０３に示したコピー状態の生成まで行った時点での多文字ＮＦＡを示す遷移図である。
【図１４】図１２のステップＳ３０４の処理まで完了した時点での多文字ＮＦＡを示す遷移図である。
【図１５】多文字ＮＦＡ変換後処理部の動作の説明に用いている、繰り返し正規表現情報リストの１個目のエントリーに対する図１２のステップＳ３０５の動作を説明する概念図である。
【図１６】図１２のステップＳ３０６において割り当てられたＭ文字単位の繰り返し正規表現を、図１４の多文字ＮＦＡに追加したものを示す遷移図である。
【図１７】４文字単位の繰り返し正規表現“ＡＡＡＡ｛２４｝”を構成するためのＮＦＡ回路構成例を示す概念図である。
【図１８】本発明の第２の実施の形態に係る有限オートマトン生成装置の構成を示すブロック図である。
【図１９】本発明の第３の実施の形態に係る有限オートマトン生成装置の構成を示すブロック図である。
【図２０】非特許文献３に記載の方法で、繰り返し正規表現を含む正規表現“ＢＣＤＡ｛９３｝ＳＴＵ”を基本パターンの組み合わせに展開した１文字ＮＦＡを示す概念図である。
【図２１】図２０と同じ方法で同じ正規表現を表現したＮＦＡ変換行列を示す概念図である。
【符号の説明】
【０１４７】
１、４０１、５０１  有限オートマトン生成装置
１１、４１１  入力装置
１２、４１８、５１６  データ処理装置
１３、４１３  出力装置
１４、４１４、５１４  記憶装置
２１  １文字ＮＦＡ生成部
２２  多文字ＮＦＡ変換前処理部
２３  多文字ＮＦＡ変換部
２４  多文字ＮＦＡ変換後処理部
２５  ＨＤＬ変換部
３１、４３１  繰り返し正規表現記憶部
３２、４３２  １文字ＮＦＡ記憶部
３３、４３３  変換用１文字ＮＦＡ記憶部
３４、４３４  変換用多文字ＮＦＡ記憶部
３５、４３５  多文字ＮＦＡ記憶部
４１５  正規表現−ＨＤＬ変換プログラム
５２６  コンフィグレーションデータ変換部
５３６  ＨＤＬ記憶部
５４１  コンフィグレーション装置
５５０  入力装置
５６０  パターンマッチング装置
５６１  データ入力部
５６２  パターンマッチング部
５６３  結果出力部
５７０  出力装置
【図１】
2010018710.tif 000003
【図２】
2010018710.tif 000004
【図３】
2010018710.tif 000005
【図４】
2010018710.tif 000006
【図５】
2010018710.tif 000007
【図６】
2010018710.tif 000008
【図７】
2010018710.tif 000009
【図８】
2010018710.tif 000010
【図９】
2010018710.tif 000011
【図１０】
2010018710.tif 000012
【図１１】
2010018710.tif 000013
【図１２】
2010018710.tif 000014
【図１３】
2010018710.tif 000015
【図１４】
2010018710.tif 000016
【図１５】
2010018710.tif 000017
【図１６】
2010018710.tif 000018
【図１７】
2010018710.tif 000019
【図１８】
2010018710.tif 000020
【図１９】
2010018710.tif 000021
【図２０】
2010018710.tif 000022
【図２１】
2010018710.tif 000023
【国際調査報告】
2010018710.tif 000024
2010018710.tif 000025