JP5429164B2 - 有限オートマトン生成システム - Google Patents

有限オートマトン生成システム Download PDF

Info

Publication number
JP5429164B2
JP5429164B2 JP2010515745A JP2010515745A JP5429164B2 JP 5429164 B2 JP5429164 B2 JP 5429164B2 JP 2010515745 A JP2010515745 A JP 2010515745A JP 2010515745 A JP2010515745 A JP 2010515745A JP 5429164 B2 JP5429164 B2 JP 5429164B2
Authority
JP
Japan
Prior art keywords
matrix
nfa
regular expression
finite automaton
char
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010515745A
Other languages
English (en)
Other versions
JPWO2009147794A1 (ja
Inventor
顕弘 元木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2010515745A priority Critical patent/JP5429164B2/ja
Publication of JPWO2009147794A1 publication Critical patent/JPWO2009147794A1/ja
Application granted granted Critical
Publication of JP5429164B2 publication Critical patent/JP5429164B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、文字列照合用有限オートマトン回路生成技術に関し、特に、複数文字を同時に処理する文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置に関する。
従来、正規表現を用いた文字列照合(パターンマッチ)が、有限オートマトン(FA:Finite Automaton)と呼ばれる状態遷移マシンを用いて行われている(例えば特許文献1、2等。)。このFAは、非決定性有限オートマトン(NFA:Non-deterministic Finite Automaton)と、決定性有限オートマトン(DFA:Deterministic Finite Automaton)とに大きく分類することができる。非決定性有限オートマトン(NFA)は、ある状態における入力文字に対して状態遷移先が複数存在する有限オートマトンである。決定性有限オートマトン(DFA)は、状態遷移先が1つしか存在しない有限オートマトンである。通常、NFAは、非特許文献1に記載されているように、与えられた正規表現等の検索対象条件から構文木を構築し、これに基づいて生成することができる。DFAは、上記の手順で生成したNFAから生成することができる。しかし、NFAの状態数nに対して、DFAはその状態数が最大で2n個程度にまで増加してしまう恐れがある。
一般的に、FAを用いたパターンマッチをハードウェアを用いて実現する手法として、状態遷移情報を状態遷移テーブルとしてメモリに格納し、当該テーブルを参照して1つずつ状態を遷移させながらパターンマッチングを行う手法が知られている。しかし、この手法では状態遷移が生じる度にメモリにアクセスして遷移情報を取得する必要があるため、このメモリアクセスが高速化のボトルネックとなる。さらに、メモリ上にNFAの状態遷移テーブルを格納した手法では、複数の状態遷移先から1つの遷移先を選択して処理を行うことしかできない。このため、選択した状態遷移先でマッチングに失敗した場合には、分岐した時点にまで戻って別の候補をテストするという"バックトラック"と呼ばれる処理が必要になり、このバックトラック自体も高速化の妨げになる。また、DFAでは、状態数が爆発的に増加する恐れがあるため、大容量のメモリが必要になる。多数の正規表現パターンに対して高速なパターンマッチングを行う場合には、特に、DFAにおける状態数の増加が高速化や構成上のボトルネックとなる。
そこで、近年、例えば非特許文献2に開示されるように、NFAを直接回路化してFPGA(Field Programmable Gate Array)のような再構成可能なデバイス上に組み込むことで、高速なパターンマッチングを行う手法が提案されている。NFAを直接回路化する手法としては、正規表現から構文木(Syntax Tree)を経由してNFAを組み込んだNFA回路を直接生成する手法や、正規表現を一度NFAに変換してからNFA回路を構成する手法等、様々な手法が提案されている。
例えば、図26に示すような正規表現"a(bc)*(d|e)"に対するNFAを考えた場合、NFA回路を、図27に示す回路として構成することができる。ここで、当該正規表現に含まれる'*'は0回以上マッチを表すメタキャラクタであり、'|'はORを表すメタキャラクタである。尚、図26において白色の矢印を使用して示す状態は初期状態を示し、二重丸で示す状態は終了状態を示している。図27に示すように、元のNFA(図26に示す。)の状態0〜状態4を、NFA回路におけるレジスタ200〜204を用いてそれぞれ実現する。各レジスタの値が'1'である場合に、各レジスタは当該状態がアクティブであるものと判断する。比較器300〜304は、データとして入力する1文字(1 byte)と、各遷移条件となっている文字(図中では比較器中に記載した文字。)とを比較し、一致した場合には'1'を出力する。このため、各レジスタがアクティブであると判断された状態において、各比較器において入力された文字が遷移条件と一致した場合には、ANDゲート400〜403も'1'を出力する。その結果、次状態のレジスタがアクティブとなることで、NFA回路は状態遷移を実行する。NFA回路は、最終的に、最終状態であるレジスタ204がアクティブになった時点で、入力文字列が正規表現"a(bc)*(d|e)"のパターンに一致したものと判断する。上述したように、NFA回路は、各状態を表すレジスタと、遷移条件の入力があったことを判定する比較器と、をNFAの状態遷移に応じて接続した構成である。また、NFA回路は、1クロックサイクルあたりに1文字(1 byte)を処理するため、動作周波数に比例した検索スループット性能を有する。
上述した手法をさらに拡張して、1クロックサイクルあたりに処理可能な文字数(バイト数)を増加させることで、検索スループットの向上を行う手法が提案されている。非特許文献3と本出願人による特願2006-355533とにおいて、図26に示すような"a(bc)*(d|e)"の正規表現パターンに対する1文字(1 byte)処理のNFAを、状態数を増加することなく、1クロックサイクルあたり複数文字(複数 bytes)の処理を行う場合に拡張する手法が提案されている。以下、1クロックサイクルあたり1文字(1 byte)を処理するNFAを、"1-char NFA"と称する。また、1クロックサイクルあたり複数文字(複数 bytes)を処理するNFAを"multi-char NFA"と称し、処理文字数がk文字のNFAを、"k-char NFA"と称する。
非特許文献3に開示される手法では、1文字単位のNFAをNFA記述行列と呼ばれる行列に変換し、当該NFA記述行列をk回掛け合わせることにより、k-char NFAを求めている。ここで、n個の状態を持つ1文字単位のNFAについて、そのNFAに対応するNFA記述行列をS={sij} (i=0,1,…,N-1, j=0,1,…,N-1)として示す。NFA記述行列Sにおいて、その行i(i=0,1,…,N-1)、又は、列j(j=0,1,…,N-1)は、NFAのn個の状態の1つにそれぞれ対応付けられている。また、NFA記述行列Sの各要素sijは、行iに対応付けられた状態から列jに対応付けられた状態への遷移条件となる文字、又は、文字列の集合を表している。例えば、正規表現"a(bc)*(d|e)"のNFAとして、図26に示すNFAを構築する。構築したNFAの各状態i(i=0,…,4)を、行iと列jとに対応付けた場合に、記述行列Sは、図28に示す5×5行列となる。1サイクルあたり4文字(4バイト)の処理を行う4-char NFAを求める場合には、非特許文献3に開示される手法は、予め定義された演算ルールに従って、図28に示す記述行列Sを4回掛け合わせる。非特許文献3に開示される手法は、図28に示す記述行列Sを掛け合わせた行列M4を計算し(行列M4を図29に示す。)、得られたM4より4-char NFAを求める。その結果、非特許文献3に開示される手法は、図30に示すような4-char NFAを得ることができる。
次に、NFAをハードウェア回路に直接埋め込む方式において、指定文字の繰り返し回数を指定した正規表現を表現する関連技術について説明する。
正規表現においては、上述した基本要素に限られず、指定文字の繰り返し回数を指定した表現を使用することが可能である(以下では、「指定文字の繰り返し回数を指定した正規表現」を、「繰り返し正規表現」と称する)。正規表現"c{n}"は、文字cのn回繰り返しを表す。また、繰り返し回数を指定する正規表現の派生として、"c{n,m}"や、"c{n,}"や、"c{,n}"等の表現も可能である。"c{n,m}"は、文字cのn回以上m回以下の繰り返しを表す。"c{n,}"は、文字cのn回以上の繰り返しを表す。"c{,n}"は、文字cの0回以上n回以下の繰り返しを表す。
このような繰り返し正規表現は、上述した基本要素の組み合わせに基づいて実現することができる。この方式を使用したNFAのハードウェア回路埋め込み方式での実現手法が、非特許文献4の33ページに記載されている。Figure.12では、正規表現".{3,}a"(任意の1文字の3回以上の繰り返しに続いて、文字aが続く正規表現。)を、基本要素の組み合わせ"....*a"に変換することで、NFAのハードウェア埋め込み回路を実現している。また、Figure.13では、正規表現"a.{,2}b"(文字aの後に、任意の1文字の2回以下の繰り返しが存在して、文字bが続く正規表現。)を、基本要素の組み合わせ"a(|.|..|)b"に変換することで、NFAのハードウェア埋め込み回路を実現している。尚、非特許文献3で開示される手法である、NFA記述行列を用いてmulti-char NFAを求める手法においても、1文字単位のNFA記述行列の作成に先立って1文字単位のNFAを作成しておく必要があるため、繰り返し正規表現を上述した正規表現の基本要素に展開する必要がある。
特開2003−242179号公報 特開2007−034777号公報
近藤 嘉雪 著、"定本Cプログラマのためのアルゴリズムとデータ構造"、ソフトバンクパブリッシング、1998年、第297-330頁。 R. Sidhu and V. K. Prasanna, "Fast Regular Expression Matching using FPGAs," Proceedings of 9th IEEE Symposium on Field-Programmable Custom Computing Machines (FCCM'01), April 2001., pp.227-238. 山垣則夫、神谷聡史、電子情報通信学会技術研究報告(リコンフィギャラブルシステム)、Vol.107、No.225、2007年、第65-70頁。 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クロックサイクルあたりに複数文字に対するパターンマッチングを行う手法において、繰り返し正規表現"c{N}"を実現するためには、以下に説明する問題がある。
まず、第1の問題点は、文字の繰り返し回数の増加に伴って、非特許文献3に記載のNFA記述行列Sのサイズが大きくなる。このため、k-byte NFAを求めるために行う、NFA記述行列Sをk回掛け合わせる演算に要する計算量が増大するという問題がある。
その理由を以下に述べる。NFAをハードウェアに直接埋め込む方式において、パターンマッチング回路の適用例の一つであるネットワーク侵入検知システムについて想定する。そのネットワーク侵入検知システムにおけるパターンマッチングルールには、指定文字の繰り返し回数が1000回以上となる例など、繰り返し回数が非常に多い例が見られる。繰り返し回数が非常に多い正規表現の一例として、繰り返し正規表現"\sCREATE\s[^\n]{1024}"が知られている。繰り返し正規表現"\sCREATE\s[^\n]{1024}"は、空白文字、"CREATE"という文字列、空白文字が続いた後に、改行文字以外の1文字が1024回繰り返すことを示す。
非特許文献3に記載の手法で、例えば、繰り返し正規表現を含む正規表現"BCDA{93}STU"("BCD"の後に、文字'A'の93回繰り返しが続き、さらに"STU"が続く繰り返し正規表現。)を実現する場合には、1-char NFAは、図31に示すNFAとなり、NFA変換行列は、図32に示すNFA行列となる。尚、図32において要素の値を記載していない要素の値は0である。図31に示す1-char NFAにおいて、丸印中の数字はNFAの状態番号を示す。また、図32に示すNFA変換行列Sの左側の数字と上側の数字は、1-char NFAにおける状態番号を示す。ここで、NFA変換行列Sのi行j列目の要素は、1-char NFAにおける状態iから状態jへの遷移条件となる文字集合を表しており、例えば3行4列目の要素'A'は、1-char NFAの状態3から状態4への遷移条件'A'を示す。図31に示す1-char NFAでは状態3〜状態96にかけて文字'A'に基づく遷移が93回繰り返されており、これに対応して、図32に示すNFA変換行列Sでは3行4列目〜95行96列目にかけて文字'A'が93個斜めに並んでいる。尚、NFA変換行列Sは、全体として、100行100列となる。
このように、NFA変換行列のサイズは、繰り返し正規表現の指定文字の繰り返し回数に大きく依存する。繰り返し正規表現の繰り返し回数をNとした場合に、繰り返し正規表現の繰り返し回数が、繰り返し正規表現以外の正規表現の状態数と比べて大きくなる場合には、そのNFA記述行列のサイズはO(N)となる。一般に、サイズがD×Dである正方行列同士の掛け算の計算量はO(D3)であるため、繰り返し正規表現における指定文字の繰り返し回数の増加に応じて、NFA変換行列の演算に要する計算量は急速に増大する。
また、第2の問題点は、文字の繰り返し回数の増加に伴って、非特許文献3に記載のNFA記述行列Sのサイズが大きくなる。このため、NFA記述行列Sを求めるための演算や、multi-char NFAを求めるためのNFA記述行列SをM回掛け合わせる行列演算において、その演算結果を保持するために必要なメモリ容量が大きくなるという問題がある。
その理由を以下に述べる。繰り返し正規表現"c{N}"における繰り返し回数Nが大きな場合には、NFA記述行列のサイズはO(N)となる。サイズがD×Dである正方行列を保持するために必要なメモリ容量がO(D2)であることを考慮すると、NFA記述行列のサイズの保持に必要なメモリ量はO(N2)となる。このため、繰り返し回数Nの増加に伴って、NFA変換行列の保持に必要なメモリ容量は急速に増大する。
本発明の目的は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することである。
また、本発明の他の目的は、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算に必要な記憶領域の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することである。
本発明に係る有限オートマトン生成システムの一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成システムであって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、を有するものである。
本発明に係る有限オートマトン生成方法の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成方法であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、前記縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成するものである。
本発明に係る有限オートマトン生成プログラムを格納する記録媒体の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成プログラムを格納する記録媒体であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成ステップと、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成ステップと、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小ステップと、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算ステップと、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大ステップと、をコンピュータに実行させるものである。
本発明に係るパターンマッチング装置の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、を有し、前記回路記述手段で記述した回路記述を用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行うものである。
また、本発明に係るパターンマッチング装置の他の一態様は、入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、前記回路記述手段で記述した回路記述から、再構成可能ハードウェアデバイスの構成情報を示すコンフィグレーションデータを生成するコンフィグレーション変換手段と、有し、前記コンフィグレーション変換手段で生成したコンフィグレーションデータを用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行うものである。
本発明によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することができる。
また、本発明によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算に必要な記憶領域の増加を抑制可能な、複数文字同時処理向け文字列照合用有限オートマトン生成システム、有限オートマトン生成方法、有限オートマトン生成プログラムを格納する記録媒体、有限オートマトンを用いたパターンマッチング装置を提供することができる。
本実施の形態1の構成を示すブロック図である。 正規表現の一例に対する、ε遷移の無い1文字単位のNFAを示す図である。 図2に示すNFAに対する、繰り返し正規表現リストを示す図である。 1-char NFA生成手段の動作を説明するフローチャートである。 正規表現の一例に対する、ε遷移を含む1文字単位のNFAを示す図である。 図5に示すNFAに対する、繰り返し正規表現リストを示す図である。 1-char NFA記述行列生成手段が生成する、図2に示すNFAに対応するオリジナル版1-char NFA記述行列を示す図である。 multi-char NFA記述行列生成手段の動作を説明するフローチャートである。 図6に示す繰り返し正規表現リストから生成する行列変換情報リストを示す図である。 図8に示す行列変換情報リストの生成処理を示すフローチャートである。 行列変換情報リストを示す図である。 縮小版1-char NFA記述行列を示す図である。 縮小版multi-char NFA記述行列を示す図である。 オリジナル版multi-char NFA記述行列を示す図である。 オリジナル版NFA記述行列における領域の定義を説明するための図である。 縮小版NFA記述行列における領域の定義を説明するための図である。 図8に示す縮小版1-char NFA記述行列の生成処理を示すフローチャートである。 図8に示すオリジナル版multi-char NFA記述行列生成処理を示すフローチャートである。 生成途中のオリジナル版multi-char NFA記述行列を示す図である。 生成途中のオリジナル版multi-char NFA記述行列を示す図である。 生成途中のオリジナル版multi-char NFA記述行列を示す図である。 生成途中のオリジナル版multi-char NFA記述行列を示す図である。 multi-char NFA生成手段が生成する、正規表現の一例に対応する4文字単位の遷移を行うNFAを示す図である。 本実施の形態2の構成を示すブロック図である。 本実施の形態3の構成を示すブロック図である。 正規表現の一例に対する、1文字単位の遷移を行うNFAを示す図である。 正規表現の一例に対する、1文字単位の遷移を行うNFA回路を示す図である。 関連する例における、正規表現の一例に対応する1文字単位のNFA記述行列を示す図である。 関連する例における、正規表現の一例に対応する4文字単位のNFA記述行列を示す図である。 関連する例の4文字単位のNFA記述行列を用いて得る、正規表現の一例に対応する、4文字単位の遷移を行うNFAを示す図である。 繰り返し正規表現を含む正規表現の一例に対応する、1文字単位のNFAを示す図である。 繰り返し正規表現を含む正規表現の一例に対応する、1文字単位のNFAを表す1-char NFA記述行列を示す図である。
実施の形態1.
図1は本発明の実施の形態1の構成を示すブロック図である。図1を参照すると、本実施の形態1は、キーボード等の入力装置11と、プログラム制御に基づいて動作するデータ処理装置12と、情報を記憶する記憶装置140と、ディスプレイ装置や印刷装置等の出力装置13と、を含む。
記憶装置140は、繰り返し正規表現リスト記憶部141と、1-char NFA記憶部142と、1-char NFA記述行列記憶部143と、NFA記述行列演算情報記憶部144と、multi-char NFA記述行列記憶部145と、multi-char NFA記憶部146と、を含む。
データ処理装置12は、1-char NFA生成手段121と、1-char NFA記述行列生成手段122と、multi-char NFA記述行列生成手段123と、multi-char NFA生成手段124と、HDL変換手段125と、を含む。尚、本実施の形態1では、固定文字数の遷移条件から成る固定文字数単位の有限オートマトンが、1文字単位の有限オートマトン(1-char NFA)である場合を例に説明する。このため、固定文字数単位有限オートマトン生成手段が、1-char NFA生成手段121に対応する。また、固定文字数単位行列形式表現生成手段が、1-char NFA記述行列生成手段122に対応する。
1-char NFA生成手段121は、入力装置11から1つ以上の正規表現を読み込む。1-char NFA生成手段121は、読み込んだ正規表現をε遷移の無い1-char NFAに変換する。1-char NFA生成手段121は、変換した1-char NFAを1-char NFA記憶部142に記憶する。1-char NFA記憶部142への記憶後、1-char NFA生成手段121は、次の正規表現をNFAへ変換する処理を開始する。
また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段121は、繰り返し正規表現リストを作成する。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。1-char NFA生成手段121は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
さらに、入力装置11から読み込んだ全ての正規表現を1-char NFAへと変換する処理を完了する際には、1-char NFA生成手段121は、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段122に通知する。
1-char NFA記述行列生成手段122は、非特許文献3に開示される手法に基づいて、1-char NFA記憶部142に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char
NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。尚、以下では、1-char NFA記述行列記憶部143に記憶した1-char NFA記述行列を、オリジナル版1-char NFA記述行列と称する。
また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部143に記憶する際に、1-char NFA生成手段121から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段122は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段123に通知する。
multi-char NFA記述行列生成手段123は、入力装置11から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字(列)の長さであり、以下の説明においては動作文字数をMを使用して表す。
multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する。multi-char NFA記述行列生成手段123は、作成した行列変換情報リストをNFA記述行列演算情報記憶部144に記憶する。尚、multi-char NFA記述行列生成手段123は、作成した行列変換情報リストと、後述する縮小版NFA記述行列(縮小版1-char NFA記述行列と、縮小版multi-char NFA記述行列)とをNFA記述行列演算情報記憶部144に記憶する。
multi-char NFA記述行列生成手段123は、1-char NFA記述行列記憶部143に記憶した1-char NFA記述行列から、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、1-char NFA記述行列の行列サイズの縮小を行う。multi-char NFA記述行列生成手段123は、行列サイズを縮小した1-char NFA記述行列をNFA記述行列演算情報記憶部144に記憶する。以下では、行列サイズを縮小したNFA記述行列を、「縮小版NFA記述行列」と称する。また、行列サイズを縮小する前のサイズのNFA記述行列を、「オリジナル版NFA記述行列」と称する。
multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した縮小版1-char NFA記述行列を用いて、動作文字数がMの縮小版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段123は、生成した縮小版multi-char NFA記述行列をNFA記述行列演算情報記憶部144に記憶する。そして、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部144に記憶した縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する。multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列を、multi-char NFA記述行列記憶部145に記憶する。
また、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部145に記憶する際に、1-char NFA記述行列生成手段122から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA記述行列生成手段123は、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段124に通知する。
multi-char NFA生成手段124は、非特許文献3に開示される手法に基づいて、multi-char NFA記述行列記憶部145に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶する。
また、multi-char NFAをmulti-char NFA記憶部146に記憶する際に、multi-char NFA記述行列生成手段123から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段124は、全てのmulti-char
NFAの生成処理が完了したことを示す信号を、HDL変換手段125に通知する。
HDL変換手段125は、multi-char NFA記憶部146に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段125は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字(列)比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL(Hardware Description Language)記述に変換する。
また、HDL変換手段125は、multi-char NFA生成手段124から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置13に出力する。
続いて、本実施の形態1の動作について説明する。以下では、具体例として正規表現"BCD((A{100}|E)S)*TTB{50}U"の場合について詳細に説明する。
まず、図2〜図6を参照して、1-char NFA生成手段121の動作について説明する。入力装置11は、1つ以上の正規表現を含む。1-char NFA生成手段121は、入力装置11より正規表現を読み込む。1-char NFA生成手段121は、読み込んだ正規表現を、ε遷移の無い1-char NFAに変換する。1-char NFA生成手段121は、変換した1-char NFAを1-char NFA記憶部142に記憶する。1-char NFA記憶部142へと記憶した後、1-char NFA生成手段121は、次の正規表現をNFAへ変換する処理を開始する。
また、正規表現を1-char NFAに変換する際に、1-char NFA生成手段121は、繰り返し正規表現リストを作成する。図3は、繰り返し正規表現リストの構成を示す図である。図に示すように、繰り返し正規表現リストの各要素を、繰り返し正規表現の繰り返し文字と、繰り返し正規表現の繰り返し回数と、1-char NFAにおける繰り返し正規表現の開始状態番号と、から構成する。1-char NFA生成手段121は、各繰り返し正規表現についてこれらの要素を作成し、繰り返し正規表現リストに格納する。即ち、1-char NFA生成手段121は、繰り返し正規表現の個数分、これらの要素を繰り返し正規表現リストに格納する。1-char NFA生成手段121は、作成した繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
1-char NFA生成手段121は、例えば、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、図2に示すε遷移の無い1-char NFAに変換することができる。正規表現"BCD((A{100}|E)S)*TTB{50}U"は、二つの繰り返し正規表現"A{100}"と"B{50}"とを含む。図2に示す1-char NFAにおいて、繰り返し正規表現"A{100}"が、状態3→状態4→・・・・→状態103の状態遷移に対応している。また、繰り返し正規表現"B{50}"が、状態105→状態106→・・・・→状態155の状態遷移に対応している。この場合に、正規表現リストは、図3に示すように2個の要素を含む。即ち、図3に示す正規表現リストは、一つ目の要素として、繰り返し正規表現"A{100}"に対応する要素を含み、その内容は、繰り返し文字'A'と、繰り返し回数100と、開始状態番号3と、から構成する。また、図3に示す正規表現リストは、他の一の要素として、繰り返し正規表現"B{50}"に対応する要素を含み、その内容は、繰り返し文字'B'と、繰り返し回数50と、開始状態番号105と、から構成する。
尚、ここでは、繰り返し文字として'A'や、'B'等の単一文字を例示して説明したが本発明はこれに限定されない。即ち、マッチする文字の長さが1文字の正規表現である場合には、繰り返し文字として任意の正規表現を指定してもよい。繰り返し正規表現の繰り返し文字としては、例えば、"(A|B)"や、"[A-Za-z0-9]"等、複数文字のいずれかを表す正規表現を指定することもできる。
ここで、図4〜図6を参照しながら、1-char NFA生成手段121が、正規表現からε遷移の無い1-char NFAを生成する様子を具体的に説明する。図4は、1-char NFA生成手段121が、正規表現からε遷移の無い1-char NFAを生成する処理を示すフローチャートである。正規表現からε遷移の無い1-char NFAを生成する一般的な手法としては、非特許文献1に開示されている手法が良く知られている。非特許文献1に開示される手法では、正規表現からε遷移を含む1-char NFAを生成して、ε遷移を取り除くε-closure(ε-閉包)を行う。これにより、非特許文献1に開示される手法は、生成したε遷移を含む1-char NFAから、ε遷移の無い1-char NFAを生成する。以下、この手法を用いて、正規表現"BCD((A{100}|E)S)*TTB{50}U"から1-char NFAを生成する処理について説明する。
1-char NFA生成手段121は、非特許文献1に開示される手法に基づいて、正規表現"BCD((A{100}|E)S)*TTB{50}U"を、ε遷移を含む1-char NFAに変換する(ステップA1)。図5に、変換後の、ε遷移を含む1-char NFAを示す。ここで、非特許文献3で開示されるNFA記述行列を用いたmulti-char NFA生成手法では、NFA記述行列を生成する前に1-char NFAを予め1文字単位に展開しておく必要がある。このため、1-char NFA生成手段121は、繰り返し正規表現"A{100}"を、文字'A'に基づく100回の状態遷移に展開する(図5において、展開後の該等範囲を点線枠内に示す。)。また、1-char NFA生成手段121は、繰り返し正規表現"B{50}"を、文字'B'に基づく50回の状態遷移に展開する(図5において、展開後の該等範囲を点線枠内に示す。)。
1-char NFA生成手段121は、各繰り返し正規表現を繰り返し文字へと展開する際に、その展開時の繰り返し正規表現の開始状態番号を保持することで、繰り返し正規表現リストを作成する。即ち、1-char NFA生成手段121は、繰り返し正規表現"A{100}"を、図5に示す文字'A'に基づく100回の状態遷移に展開する際に、展開時の開始状態番号13を保持する。また、1-char NFA生成手段121は、繰り返し正規表現"B{50}"を、図5に示す文字'B'に基づく50回の状態遷移に展開する際に、展開時の開始状態番号114を保持する。図6に、このようにして1-char NFA生成手段121が作成した繰り返し正規表現リストを示す。
図4に戻り説明を続ける。1-char NFA生成手段121は、非特許文献1等に開示される手法を用いて、図5に示すε遷移を含む1-char NFAに対してε-closureを行うことで、図2に示すε遷移の無い1-char NFAを生成する(ステップA2)。具体的には、ε-closureにおいて、1-char NFA生成手段121は、ε遷移に従って遷移可能な複数の状態を、一つの状態に統合する処理を行う。ここで、繰り返し正規表現の開始状態がε-closureにおける状態統合の対象となった場合には、1-char NFA生成手段121は、繰り返し正規表現リストにおける開始状態番号を、ε-closure前の状態番号からε-closureにおいて統合された後の状態番号へと変更する。これにより、ε遷移の無い1-char NFAにおいても、繰り返し正規表現とその開始状態番号との対応関係を、繰り返し正規表現リストを用いて管理することができる。
より具体的には、1-char NFA生成手段121は、ε-closureを行うことで、図5に示す状態3、4、7、13を一つに統合して、新たに、図2に示す状態3とする。これに対応して、1-char NFA生成手段121は、図6に示す繰り返し正規表現リストにおいて、繰り返し正規表現"A{100}"に対応する要素(繰り返し文字'A'、繰り返し回数100、開始状態番号13である要素。)の開始状態番号を、ε-closure後の開始状態番号3に書き換える。同様に、1-char NFA生成手段121は、ε-closureを行うことで、図5に示す状態114と状態10とを統合して、新たに図2に示す状態105とする。これに対応して、1-char NFA生成手段121は、図6に示す繰り返し正規表現リストにおいて、繰り返し正規表現"B{50}"に対応する要素(図6に示す最下段の要素。)の開始状態番号を、ε-closure後の開始状態番号105に書き換える。1-char NFA生成手段121は、上述の処理を繰り返すことで、図2に示すε遷移の無い1-char NFAに対応する繰り返し正規表現リストを作成する。図3に、作成した繰り返し正規表現リストを示す。
1-char NFA生成手段121は、図2に示すε遷移の無い1-char NFAにおいて、各繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当て直す(ステップA3)。具体的には、1-char NFA生成手段121は、図3に示す繰り返し正規表現リストの各要素の開始状態番号を起点として、繰り返し文字に基づく状態遷移を繰り返し回数分だけ辿り、状態番号が昇順の連番になっているか否かを確認する。状態番号が昇順の連番になっていない場合には、1-char NFA生成手段121は、状態番号の割り当て直しを行う。
図2に示すε遷移の無い1-char NFAでは、既に、繰り返し正規表現"A{100}"に対応する状態遷移は、状態3→4→5→・・・→102→103となっている。即ち、繰り返し正規表現"A{100}"に対応する状態遷移については、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段121は、状態番号の割り当て直しを行う必要はない。同様に、図2に示すε遷移の無い1-char NFAでは、繰り返し正規表現"B{50}"に対応する状態遷移は、状態105→106→・・・→154→155となっている。即ち、繰り返し正規表現"B{50}"に対応する状態遷移についても、既に昇順の連番となる状態番号が割り当てられているため、1-char NFA生成手段121は、状態番号の割り当て直しを行う必要はない。
一方で、状態番号の割り当て直しが必要になり、繰り返し正規表現に対応する状態遷移の開始状態番号に変化が生じた場合には、1-char NFA生成手段121は、繰り返し正規表現リストの対応する繰り返し正規表現の開始状態番号を、割り当て直し後の状態番号として更新する。
1-char NFA生成手段121は、上述した処理を図3に示す繰り返し正規表現リストの各要素、即ち、全ての繰り返し正規表現に対して繰り返す。
尚、状態番号は、一つの繰り返し正規表現に対応する状態遷移の範囲内において、昇順の連番となっていればよい。従って、異なる繰り返し正規表現に関しては、状態番号に関する制約はない。例えば、繰り返し正規表現"A{100}"に対応する状態遷移の開始状態番号が、繰り返し正規表現"B{50}"に対応する状態遷移の開始状態番号よりも大きなものとなっていてもよい。
1-char NFA生成手段121は、生成したε遷移の無い1-char NFAと、作成した繰り返し正規表現リストと、を出力する(ステップA4)。即ち、1-char NFA生成手段121は、1-char NFAを1-char NFA記憶部142に記憶する。また、1-char NFA生成手段121は、繰り返し正規表現リストを繰り返し正規表現リスト記憶部141に記憶する。
以上説明したようにして、1-char NFA生成手段121は、一つの正規表現から1-char NFAを生成する一連の処理を終了する。入力装置11から複数の正規表現を受信した場合には、1-char NFA生成手段121は、受信した全ての正規表現について上述した処理を繰り返して実行する。
また、1-char NFA生成手段121は、入力装置11から読み込んだ全ての正規表現の変換処理を完了する際には、全ての正規表現を変換したことを示す信号を、1-char NFA記述行列生成手段122に通知する。
次に、図7を参照して、1-char NFA記述行列生成手段122の動作について説明する。1-char NFA記述行列生成手段122は、非特許文献3に開示される手法に基づいて、1-char NFA記憶部142に記憶した1-char NFAから1-char NFA記述行列を生成する。1-char NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。
図7は、1-char NFA記述行列の一例を示す図である。1-char NFA記述行列生成手段122は、正規表現"BCD((A{100}|E)S)*TB{50}U"から生成された1-char NFA(図2に示す1-char NFA。)に対して、非特許文献3にて開示される1-char NFA記述行列生成手法を適用することで、1-char NFA記述行列(図7に示す1-char NFA記述行列。)を生成することができる。
図7に示す1-char NFA記述行列は、157×157の正方行列である。図7に示す1-char NFA記述行列において、遷移条件である値を記載していない要素の値は0であり、これは状態遷移が存在しないことを表す。ここで、n個の状態を持つ1-char NFAについて、そのNFAに対応するNFA記述行列をS={sij} (i=0,1,…,N-1, j=0,1,…,N-1)として示す。NFA記述行列Sにおいて、その行i(i=0,1,…,N-1)、又は、列j(j=0,1,…,N-1)は、NFAのn個の状態の1つにそれぞれ対応付けられている。また、NFA記述行列Sの各要素sijは、行iに対応付けられた状態から列jに対応付けられた状態への遷移条件となる文字、又は、文字列の集合を表している。例えば、図7に示す1-char NFA記述行列において、その3行103列目の要素は'E'であり、これは、遷移条件'E'に従って、状態3から状態103へと遷移することを表している。また、0行0列目の'I'は、非特許文献3において規定される特別な遷移条件を示しており、初期状態から初期状態への状態遷移を示すものである。さらに、156行156列目の'F'は、非特許文献3において規定される特別な遷移条件を示しており、終了状態から終了状態への状態遷移を示すものである。
ここで、図7に示す1-char NFA記述行列においては、網掛けを用いて示す領域内の要素は、値を記載していない要素を除いて、その要素の値を0としている。指定された正規表現が異なる場合には、その正規表現に対応する1-char NFA記述行列において網掛けを用いて示す領域内の要素は、その要素の値は0以外の値となる可能性がある。これに対して、図7に1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、その要素の値が0でない要素以外は、値が常に0である。即ち、図7に示す1-char NFA記述行列においては、網掛けを用いて示していない領域内の要素は、該当する状態遷移が存在しない。
例えば、図7に示す1-char NFA記述行列において、その第4行〜第102行の各要素は、状態4〜102から他の状態に遷移する遷移条件を表す。この状態4〜102は、図2に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X(4≦X≦102)の遷移先は状態X+1だけである。従って、図7に示す1-char NFA記述行列において、その第4行〜第102行の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
同様に、列について着目すると、図7に示す1-char NFA記述行列において、その第4列〜第102列の各要素は、状態4〜102へ遷移する遷移条件を表す。この状態4〜102は、図2に示すように、繰り返し正規表現"A{100}"を構成する状態である。また、上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する部分の状態遷移については、状態番号が昇順の連番となるように状態番号を割り当てていることから、状態X(4≦X≦102)への遷移元は状態X-1だけである。従って、図7に示す1-char NFA記述行列において、その第4列〜第102列の要素のうち、繰り返し文字'A'が設定されている要素以外の要素は、常にその値は0である。
さらに、繰り返し正規表現"B{50}"に対応する、第106行〜第154行と、第106列〜第154列と、に関しても同様にして、繰り返し文字'B'が設定されている要素以外の要素は、常にその値は0である。
このように、1-char NFA生成手段121が、繰り返し正規表現に対応する部分の状態遷移においては状態番号が昇順の連番となるように状態番号を割り当てておくことで、1-char NFA記述行列生成手段122は、繰り返し正規表現に対応する1-char NFA記述行列の領域(図7において網掛けを用いて示していない領域。)において、繰り返し正規表現の繰り返し文字を、第X行、第(X+1)列に、遷移条件を示す値として設定することができる。また、1-char NFA記述行列生成手段122は、それ以外の要素については、全てその値が0である1-char NFA記述行列を生成することができる。
1-char NFA記述行列生成手段122は、生成した1-char NFA記述行列を、1-char NFA記述行列記憶部143に記憶する。以上説明したようにして、1-char NFA記述行列生成手段122は、1-char NFA記述行列を生成する処理を終了する。
また、生成した1-char NFA記述行列を1-char NFA記述行列記憶部143に記憶する際に、1-char NFA生成手段121から全ての正規表現を変換したことを示す信号を受信している場合には、1-char NFA記述行列生成手段122は、全ての1-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA記述行列生成手段123に通知する。
次に、図8〜図22を参照して、multi-char NFA記述行列生成手段123の動作について説明する。multi-char NFA記述行列生成手段123は、multi-char NFA記述行列生成処理を開始する前に、予め入力装置11から動作文字数を読み込む。動作文字数は、生成するmulti-char NFAの遷移条件となる文字(列)の長さであり、指定する任意の2以上の値である。以下の説明においては動作文字数をMを使用して表す。以下、具体的な数値を用いて例を説明する場合には、動作文字数Mを4として説明する。
図8は、multi-char NFA記述行列生成手段123が行う処理を示すフローチャートである。まず、図8を参照して、multi-char NFA記述行列生成手段123を用いた処理の概要について説明する。
まず、multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する(ステップB1)。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。multi-char NFA記述行列生成手段123は、作成した行列変換情報リストをNFA記述行列演算情報記憶部144に記憶する。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、1-char NFA記述行列記憶部143に記憶したオリジナル版1-char NFA記述行列D(図7に示す1-char NFA記述行列。)を、縮小版1-char NFA記述行列D'(図12に示す1-char NFA記述行列。)へと変換する。これにより、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'を生成する(ステップB2)。multi-char NFA記述行列生成手段123は、生成した縮小版1-char NFA記述行列D'をNFA記述行列演算情報記憶部144に記憶する。具体的には、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、オリジナル版1-char NFA記述行列Dのうち繰り返し正規表現に対応する状態遷移に関する要素を、動作文字数M分の行または列に置き換える。より具体的には、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dの第4行〜第102行(100-1=99行分)と第4列〜第102列(100-1=99列分)とにかけての要素(即ち、繰り返し正規表現"A{100}"に対応する要素。)を、動作文字数M分の行、又は、列に置き換える。また、multi-char NFA記述行列生成手段123は、オリジナル版1-char
NFA記述行列Dの第106行〜第154行(50-1=49行分)と第106列〜第154列(50-1=49列分)とにかけての要素(即ち、繰り返し正規表現"B{50}"に対応する要素。)を、動作文字数M分の行、又は、列に置き換える。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した縮小版1-char NFA記述行列D'を用いて、動作文字数がMの縮小版multi-char NFA記述行列D'4(図13に示すmulti-char NFA記述行列。)を生成する(ステップB3)。multi-char NFA記述行列生成手段123は、生成した縮小版multi-char NFA記述行列D'4をNFA記述行列演算情報記憶部144に記憶する。
次いで、multi-char NFA記述行列生成手段123は、NFA記述行列演算情報記憶部144に記憶した行列変換情報リストを参照して、NFA記述行列演算情報記憶部144に記憶した縮小版multi-char NFA記述行列D'4から、オリジナル版multi-char NFA記述行列D4(図14に示すオリジナル版multi-char NFA記述行列。)を生成する(ステップB4)。具体的には、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列D'4からオリジナル版multi-char NFA記述行列D4への変換において、繰り返し正規表現に対応する状態遷移に関する動作文字数M分の行、又は、列を、元のサイズに戻す作業を行う。
次いで、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char
NFA記述行列D4を出力する(ステップB5)。即ち、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列D4を、multi-char NFA記述行列記憶部145に記憶する。
非特許文献3に開示される手法では、図7に示すオリジナル版1-char NFA記述行列Dを動作文字数M回分掛け合わせることで、図14に示すオリジナル版multi-char NFA記述行列D4を求める構成としている。しかし、この手法では、157×157回の正方行列の演算が必要となる。これに対して、本発明に係るmulti-char NFA記述行列生成手段123を用いた処理フローでは、multi-char NFA記述行列生成手段123は、まず、上述したステップB2において、157×157の正方行列であるオリジナル版1-char NFA記述行列Dを、16×16の正方行列である縮小版1-char NFA記述行列D'に変換する。multi-char NFA記述行列生成手段123は、ステップB3において、16×16の正方行列である縮小版1-char NFA記述行列D'を動作文字数M回分掛け合わせることで、16×16の正方行列である縮小版multi-char NFA記述行列D'4を生成する。multi-char NFA記述行列生成手段123は、ステップB4において、16×16の正方行列である縮小版multi-char NFA記述行列D'4から、157×157の正方行列であるオリジナル版multi-char NFA記述行列D4を生成する。即ち、multi-char NFA記述行列生成手段123は、ステップB2において、行列サイズの小さなNFA記述行列を生成し、これを用いて演算を行うことを特徴とする。ここで、N×Nの正方行列の演算量はO(N3)であるため、非特許文献3に開示される手法を用いた場合の演算量はO(1573)=O(3869893)となる。これに対して、本発明による演算量はO(163)=O(4096)となり、演算量を約1000分の1に削減することができる。
尚、上述したステップB1において生成する行列変換情報リストは、ステップB2とステップB4とにおいて、縮小版NFA記述行列とオリジナル版NFA記述行列との相互変換を行うために必要な情報を保持するものである。このため、multi-char NFA記述行列生成手段123は、縮小版NFA記述行列とオリジナル版NFA記述行列の相互変換処理を行う前に、ステップB1において行列変換情報リストを予め生成する。
以下、図8に示す上述したステップB1〜B5について、詳細に説明する。まず、図9〜図11を参照して、ステップB1について説明する。
ステップB1において、multi-char NFA記述行列生成手段123は、繰り返し正規表現リスト記憶部141に記憶した繰り返し正規表現リストから、行列変換情報リストを作成する(ステップB1)。繰り返し正規表現リストは、正規表現に含まれる繰り返し正規表現と、その繰り返し正規表現に対応する1-char NFAの状態番号との対応関係を保持するリストである。
図9は、行列変換情報リストの構成を示す図である。図に示すように、行列変換情報リストの各要素は、その要素のインデックス番号iと、繰り返し正規表現の繰り返し文字Tiと、繰り返し正規表現の繰り返し回数Ciと、オリジナル版のNFA記述行列における繰り返し正規表現の開始状態番号Siと、オリジナル版のNFA記述行列における繰り返し正規表現の終了状態番号Eiと、縮小版のNFA記述行列における繰り返し正規表現の開始状態番号S'iと、縮小版のNFA記述行列における繰り返し正規表現の終了状態番号E'iと、の各フィールドを含む。尚、インデックス番号iは、multi-char NFA記述行列生成手段123が行う動作の説明を容易とするために用意したフィールドであり、本発明を実施する上で必須のフィールドではない。
図10は、ステップB1において、multi-char NFA記述行列生成手段123が行列変換情報リストを生成する処理を示すフローチャートである。まず、ステップC1からC4(図において、ループ1として示す。)において、multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの各エントリを行列変換情報リストにコピーする。
具体的には、multi-char NFA記述行列生成手段123は、ステップC1においてループ1の処理を開始する。multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの各エントリについて、そのエントリの繰り返し正規表現の繰り返し回数が、M+1よりも大きいか否かを確認する(ステップC2)。そのエントリの繰り返し正規表現の繰り返し回数がM+1よりも大きい場合には、multi-char NFA記述行列生成手段123は、行列変換情報リストにそのエントリをコピーする(ステップC3)。multi-char NFA記述行列生成手段123が繰り返し正規表現リストのエントリを行列変換情報リストにコピーする際には、multi-char NFA記述行列生成手段123は、繰り返し正規表現リストの繰り返し文字と、繰り返し回数と、開始状態番号と、を、行列変換情報リストの繰り返し文字と、繰り返し回数と、オリジナル版記述行列の開始状態番号とに、それぞれコピーする。
一方、繰り返し回数がM+1以下の場合には、multi-char NFA記述行列生成手段123は、そのエントリを正規表現リストから行列変換情報リストへとコピーしない。これは、繰り返し回数がM+1以下の場合には、ステップB2において、multi-char NFA記述行列生成手段123が縮小版NFA記述行列を作成することにしても、オリジナル版NFA記述行列と比較して行列サイズの削減につながらないためである。従って、multi-char NFA記述行列生成手段123が行列変換情報リストを作成する段階であるステップC1〜C4においては、繰り返し回数がM+1以下である繰り返し正規表現についてはその処理対象から除外する。これにより、行列変換情報リストに含まれる各エントリの繰り返し回数は、M+1よりも大きいことが保証される。
例えば、動作文字数MがM=4である場合に、正規表現"BCD((A{100}|E)S)*TTB{50}U"に対応する繰り返し正規表現リスト(繰り返し正規表現リストを図3に示す。)においては、繰り返し回数がM+1(=5)以下の繰り返し正規表現は含まれていない。このため、multi-char NFA記述行列生成手段123は、図3に示す繰り返し正規表現の全エントリを、行列変換情報リストにコピーする。
multi-char NFA記述行列生成手段123は、ステップC4においてループ1の処理を完了する。図11は、ループ1の処理が完了した時点での、行列変換情報リストを示す図である。
次いで、multi-char NFA記述行列生成手段123は、行列変換情報リストのエントリを、オリジナル版記述行列の開始状態番号の昇順に従って並び替える(ステップC5)。尚、図11に示す行列変換情報リストでは、オリジナル版記述行列の開始状態番号の昇順に従って行列変換情報リストのエントリが格納されている。このため、ステップC5における並び替え処理の実行後においても、図11に示す行列変換情報リストのエントリの順序に変化はなく、図11に示すままである。
次いで、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'の行列サイズN'を計算する(ステップC6)。ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列(具体的には、第Si+1行〜第Ei-1行を示す。)を、M行分に縮小する。ここで、Siは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。Eiは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。これにより、multi-char NFA記述行列生成手段123は、行列変換情報リストの各エントリについて、オリジナル版1-char NFA記述行列Dの(Ei-1)-(Si+1)-1=Ei-Si-1=Ci-1行分を、縮小版1-char NFA記述行列D'のM行分に変換する。ここで、行列変換情報リストの各エントリの繰り返し回数Ciについて、繰り返し回数Ci=Ei-Siの関係が成立する。また、multi-char NFA記述行列生成手段123は、列についても同様に、第Si+1列〜第Ei-1列を、M列分に縮小する。従って、オリジナル版1-char NFA記述行列Dの行列サイズをNとすると、縮小版1-char NFA記述行列D'の行列サイズN'を下記の数(1)を使用して示すことができる。尚、Kは、正規表現に含まれる繰り返し正規表現の個数を示す。
Figure 0005429164
次に、ステップC7からC13(図において、ループ2として示す。)において、multi-char NFA記述行列生成手段123は、行列変換情報リストの各エントリについて、エントリ中の空欄である内容を計算する。ここで、空欄の内容とは、図11においては空白の部分である。具体的には、空欄の内容は、オリジナル版NFA記述行列の終了状態番号と、縮小版NFA記述行列の開始状態番号と、終了状態番号と、を示す。
上述したステップC6の説明において述べたように、ステップB2におけるオリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換では、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dのうち、その繰り返し正規表現に対応する状態遷移に関する行と列(具体的には、第Si+1行〜第Ei-1行を示す。)を、M行分に縮小する。ここで、Siは行列変換情報リストの各エントリのオリジナル版NFA記述行列の開始状態番号を示す。Eiは、行列変換情報リストの各エントリのオリジナル版NFA記述行列の終了状態番号を示す。また、Mは動作文字数を示す。
以下、図7に示すオリジナル版1-char NFA記述行列Dと、図12に示す縮小版1-char NFA記述行列D'とを用いて具体的に説明する。multi-char NFA記述行列生成手段123は、指定された正規表現"BCD((A{100}|E)S)*TTB{50}U"の繰り返し正規表現"A{100}"に対応するオリジナル版1-char NFA記述行列Dの第4行〜第102行を、縮小版1-char NFA記述行列D'の第4行〜第7行に変換する。また、multi-char NFA記述行列生成手段123は、指定された正規表現"BCD((A{100}|E)S)*TTB{50}U"の繰り返し正規表現"B{50}"に対応するオリジナル版1-char NFA記述行列Dの第106行〜第154行を、縮小版1-char NFA記述行列D'の第11行〜第14行に変換する。また、multi-char NFA記述行列生成手段123は、列についても同様に変換する。
ループ2を示すステップC7〜C13においては、multi-char NFA記述行列生成手段123は、繰り返し正規表現に対応する部分のオリジナル版1-char NFA記述行列Dと縮小版1-char NFA記述行列D'とにおける対応関係を求め、その対応関係を行列変換情報リストに保持する。multi-char NFA記述行列生成手段123は、続くステップC8〜C12において、行列変換情報リストの各エントリについての処理を行う。
具体的には、multi-char NFA記述行列生成手段123は、ステップC7においてループ2の処理を開始して、i番目のエントリの処理を開始する(ステップC8)。multi-char NFA記述行列生成手段123は、オリジナル版NFA記述行列Dの終了状態番号Eiを計算する(ステップC9)。ここで、multi-char NFA記述行列生成手段123は、Ei=Si+Ciの関係が成立することを利用して、この関係に基づいてEiを計算する。
multi-char NFA記述行列生成手段123は、縮小版記述行列D'の開始状態番号S'iを計算する(ステップC10)。multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dから縮小版1-char NFA記述行列D'への変換において、繰り返し正規表現に関連しない状態遷移を保持する。例えば、multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列Dの第103行〜第105行を、図12に示す縮小版1-char NFA記述行列D'の第8行〜第10行にコピーする。繰り返し正規表現に関連しない部分の行数・列数は、オリジナル版1-char NFA記述行列Dと縮小版1-char NFA記述行列D'とで同じである。このため、S'i=E'i-1+(Si-Ei-1)の関係式が成立する。multi-char NFA記述行列生成手段123は、この関係式に基づいて、S'iを計算する。尚、行列変換情報リストの最初のエントリ(インデックスi=0)の計算を行う際には、multi-char NFA記述行列生成手段123は、E0=0、E'0=0と仮定して計算を行う。
multi-char NFA記述行列生成手段123は、縮小版記述行列D'の終了状態番号E'iを計算する(ステップC11)。縮小版1-char NFA記述行列D'では、繰り返し正規表現に対応する状態遷移の開始状態番号と終了状態番号との間に、動作文字数M個だけの差がある。このため、E'i=S'i+Mの関係が成立する。multi-char NFA記述行列生成手段123は、この関係に基づいてE'iを計算する。
multi-char NFA記述行列生成手段123は、ステップC12においてi番目のエントリの処理を完了した後、ステップC13においてループ2の処理を完了する。以上により、multi-char NFA記述行列生成手段123は、ステップB1における行列変換情報の生成処理を完了する。
次に、図15〜図17を参照して、ステップB2について説明する。まず、ステップB2の説明に先立ち、ステップB2以降の説明において用いる符号について以下のように定義する(尚、既に上述したようにして定義した符号も含む)。角括弧内の値は、本実施の形態1における動作説明で使用する具体例を示す値である。
M:動作文字数(M≧2)[M=4]
K:行列変換情報リストのエントリ数(K≧0)[K=2]
N:オリジナル版NFA記述行列の行列サイズ(Nは自然数)[N=157]
N':縮小版NFA記述行列の行列サイズ(N'は自然数、N'≦N)[N'=17]
尚、以下では、「NFA記述行列」として記載した場合には、「1-char NFA記述行列」と「multi-char NFA記述行列」とのいずれをも示すものとする。従って、Nは1-char NFA記述行列の行列サイズを示す。N'はmulti-char NFA記述行列の行列サイズを示す。Siと、Eiと、S'iと、E'iと、Ciと、は、行列変換情報リストにおける各エントリの要素(1≦i≦K、但しK≧1である。)を示す。K=0の場合には、行列変換情報リストは空である。E0=E'0=0、SK+1=N-1、S'K+1=N'-1であるものと定義する。
また、以下に説明するステップB2〜B4においては、オリジナル版NFA記述行列を、図15に示すような(2K+1)×(2K+1)個の領域に分割して考えるものとする。領域の境界をSiとEiとに基づいて定める(1≦i≦K)。即ち、Si番目(1≦i≦K)の行と列とを用いて、領域の境界を定める。また、Ei番目(1≦i≦K)の行と列とを用いて、領域の境界を定める。SiとEi自身は、それぞれ奇数番目の領域側に含まれる。具体的には、SiとEi自身を、図15に示す太線を用いて示す。図15に示すオリジナル版NFA記述行列において、上からx番目、かつ、左からy番目に位置する領域を、領域(x,y)と称する。xとyの値は、いずれも1から開始する。例えば、上から1番目、かつ、左から1番目に位置する領域を、領域(1,1)として示す。図7に示すオリジナル版1-char NFA記述行列Dを領域分割した例を、図15に示す。図15に示すように、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dを5×5個の領域に分割する。同様に、縮小版NFA記述行列についても、(2K+1)×(2K+1)個の領域に分割して考えるものとする。図16にその具体例を示す。図16では、SiとEiとに代えて、S'iとE'iとを用いて領域の境界を決定する。
次に、ステップB2における縮小版1-char NFA記述行列D'の生成処理について説明する。図17は、multi-char NFA記述行列生成手段123が縮小版1-char NFA記述行列D'を生成する処理を示すフローチャートである。最初に、multi-char NFA記述行列生成手段123は、縮小版1-char NFA記述行列D'を保持するためのN'×N'行列をNFA記述行列演算情報記憶部144に用意する(ステップD1)。このとき、multi-char NFA記述行列生成手段123は、用意したN'×N'行列の全要素を0として初期化する。尚、縮小版1-char NFA記述行列D'の行列サイズN'は、上述したステップB1内のステップC6において算出済みである。
次に、ステップD2〜D6のループ1において、multi-char NFA記述行列生成手段123は、オリジナル版1-char NFA記述行列Dの領域のうち、上からも奇数番目であり、かつ、左からも奇数番目である領域(2i-1,2j-1)(i,jは整数であり、1≦i≦K+1,1≦j≦K+1を満たす。)を、縮小版1-char NFA記述行列D'の同じ位置の領域(2i-1,2j-1)にコピーする。即ち、multi-char NFA記述行列生成手段123は、図15において網掛けを用いて示す領域を、図16において網掛けを用いて示す領域にコピーする。この網掛けを用いて示す領域は、繰り返し正規表現に関係のない領域を示す。図7に示す1-char NFA記述行列Dでは、網掛けを用いて示す領域内の要素は、その値が0である要素を示す。図15において網掛けを用いて示す領域内の要素は、入力された正規表現が異なる場合には、0以外の値となる可能性がある。このため、縮小版1-char NFA記述行列D'においても、網掛けを用いて示す領域の行列要素については、値をそのまま利用するものとする。尚、図17に示すステップD3〜D5は、各領域(2i-1,2j-1)に関する上述した処理を一般的に示したものである。即ち、ステップD3〜D5において、multi-char NFA記述行列生成手段123は、各領域(2i-1,2j-1)についての処理を行う。
次に、ステップD7〜D13において、multi-char NFA記述行列生成手段123は、生成する縮小版1-char NFA記述行列D'の残りの領域(図16において網掛けを用いて示していない領域)について、上から偶数番目、又は、左から偶数番目である領域についての処理を行う。
ここで、図16において網掛けを用いて示していない領域は、図15に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し正規表現に対応する領域である。このため、繰り返し正規表現の繰り返し回数の増加に応じて、図16において網掛けを用いて示していない領域の行と列の数は、その繰り返し回数に比例して多くなる。この網掛けを用いて示していない領域は、繰り返し正規表現に対応する領域であり、上述したステップA3において、1-char NFA生成手段121が、繰り返し正規表現に対応する部分の状態遷移に関して、状態番号が昇順の連番となるように状態番号を割り当てている。このため、この網掛けを用いて示していない領域に存在する可能性のある状態遷移は、状態Xから状態X+1への状態遷移だけである。
従って、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段123は、図15に示すオリジナル版1-char NFA記述行列Dにおいて、繰り返し文字Aiの配置を領域(2i-1,2i)の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域(2i,2i+1)の左下にかけて位置するように構成する。従って、領域(2i-1,2i)の左下の位置から領域(2i,2i+1)の左下にかけて、繰り返し文字AiがCi個並ぶ構成となる。網掛けを用いて示していない領域において、その行列要素は繰り返し文字だけとなり、繰り返し正規表現に該当しない要素は全て0となる(図7参照)。
同様にして、行列変換情報リストのi番目のエントリに対応する繰り返し正規表現について、multi-char NFA記述行列生成手段123は、生成する縮小版1-char NFA記述行列に関しても、図16に示すように、繰り返し文字Aiの配置を領域(2i-1,2i)の左下の位置から開始して、これに続けて領域(2i,2i)を右斜め下方向に横切るように連続して位置し、さらに続けて領域(2i,2i+1)の左下にかけて位置するように、行列の要素を設定する。
ただし、図16に示す、生成する縮小版1-char NFA記述行列においては、上から偶数番目、又は、左から偶数番目の領域は、行、又は、列の幅が、動作文字数Mとなるように用意している。このため、繰り返し文字Aiが斜めに並ぶ個数は、M+1個となる。図7に示すオリジナル版1-char NFA記述行列を参照して具体例を説明すると、行列変換情報リストの一つめのエントリは、繰り返し正規表現"A{100}"に関するものであり、繰り返し文字A1='A'、縮小版NFA記述行列における開始状態番号S'1=3、終了状態番号E'1=8である。このため、縮小版1-char NFA記述行列の要素(3行,4列)から要素(7行,8列)にかけて、繰り返し文字'A'がM+1(=5)個並ぶ。また同様に、行列変換情報リストの二番目のエントリは、繰り返し正規表現"B{50}"に関するものであり、縮小版1-char NFA記述行列の要素(10行,11列)から要素(14行,15列)にかけて、繰り返し文字'B'がM+1(=5)個並ぶ。尚、図17に示すステップD8〜D12は、行列変換情報リストのi番目のエントリについて、そのエントリに対応する繰り返し正規表現に関する領域内に繰り返し文字を設定する処理を一般的に示したものである。即ち、ステップD8〜D12において、multi-char NFA記述行列生成手段123は、i番目のエントリに関する範囲についての処理を行う。
以上説明したように、multi-char NFA記述行列生成手段123は、ステップB2における、縮小版1-char NFA記述行列D'の生成処理を終了する。multi-char NFA記述行列生成手段123は、図7に示すオリジナル版1-char NFA記述行列に対して、ステップB2の処理を行う。図12は、multi-char NFA記述行列生成手段123が生成する、縮小版1-char NFA記述行列である。尚、図12に示す縮小版1-char NFA記述行列においては、行列要素を記載していない要素の値は0であり、対応する状態遷移がないことを示す。また、行列要素が記載されている場合には、要素として記載されている文字(群)が状態遷移の遷移条件であることを示す。例えば、図12に示す縮小版1-char NFA記述行列において、(3行,8列)の要素は'E'であり、これは、状態3から状態8に文字'E'に基づいて状態遷移があることを示す。
次に、ステップB3について説明する。ステップB3において、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列D'4を生成する。上述したステップB3において、multi-char NFA記述行列生成手段123は、非特許文献3にて開示されている手法に基づいて、縮小版1-char NFA記述行列D'をM回掛け合わせることにより、縮小版multi-char NFA記述行列D'Mを計算する。ここで、D'4=D'×D'×D'×D'である。尚、NFA記述行列同士の掛け算時の演算定義については、非特許文献3の68ページ、3.3章 変換手法と、3.4章 変換例とに詳述されている。動作文字数M=4の場合に、ステップB3において、multi-char NFA記述行列生成手段123は、図12に示す縮小版1-char NFA記述行列D'から、図13に示す縮小版multi-char(4-char) NFA記述行列D'4を生成する。動作文字数Mは4であるため、図13に示す縮小版4-char NFA記述行列D'4は4文字単位のNFAの遷移条件を定義するNFA記述行列である。また、遷移条件を示す縮小版4-char NFA記述行列D'4の各要素は、長さ4の文字列となる。尚、図13において、具体的な要素の値が記載されていない要素の値は0であり、遷移条件が存在しないことを示す。
次に、図18〜図22を参照して、ステップB4について説明する。図18は、ステップB4において、multi-char NFA記述行列生成手段123が、オリジナル版multi-char NFA記述行列D4を生成する処理を示すフローチャートである。図18に示すフローチャートは、以下に示す5つの処理(1)〜(5)を含む。
(1)上から奇数番目であり、かつ、左から奇数番目の領域に対する処理(ステップE2〜E4における処理を示す。)。
(2)上から奇数番目であり、かつ、左から偶数番目の領域に対する処理(ステップE5〜E7における処理を示す。)。
(3)上から偶数番目であり、かつ、左から奇数番目の領域に対する処理(ステップE8〜E10における処理を示す。)。
(4)上から偶数番目であり、かつ、左から偶数番目の領域に対する処理(ステップE11〜E13における処理を示す。)。
(5)繰り返し正規表現に関する補正(ステップE14〜E18における処理を示す。)。
尚、NFA記述行列の領域の考え方は、図15と図16に示す通りである。また、上記(1)〜(5)の処理は互いに独立であり、図18に示すフローチャートにおいては(1)から(5)の順番に従って実行するものとして説明しているが、実行順序に制約はなく、その実効順序を変更してもよい。以下では、図18に示すフローチャートの順番に従って説明する。上記(1)から(5)の処理に先立ち、multi-char NFA記述行列生成手段123は、N×N行列DMを用意しておく。
まず、ステップE2〜E4における処理を示す(1)の処理について説明する。(1)の処理は、上から奇数番目であり、かつ、左から奇数番目の領域に対する処理である。上から奇数番目であり、かつ、左から奇数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係のない状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(1,1)の第1行、第3列目の要素"CDES"は、図2に示す状態遷移において状態1→状態2→状態3→状態103→状態3へと1文字単位の遷移を4回行った場合に、状態1→状態3へと遷移条件"CDES"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。縮小版4-char NFA記述行列の領域内の各要素と、オリジナル版4-char NFA記述行列の同じ位置の領域内の各要素とは一対一に対応している。このため、multi-char NFA記述行列生成手段123は、上から奇数番目であって、左から奇数番目である領域については、縮小版4-char NFA記述行列の各領域を、オリジナル版4-char
NFA記述行列の同じ位置の領域にコピーする(ステップE3)。
尚、図18に示すステップE2〜E4は、上述した処理を一般的に示したものである。即ち、ステップE2〜E4において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE3における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図19は、ステップE4までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。網掛けを用いて示す部分は、ステップE2〜E4の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列からコピーした要素である。
次いで、ステップE5〜E7における(2)の処理について説明する。(2)の処理は、上から奇数番目であり、かつ、左から偶数番目の領域に対する処理である。上から奇数番目であり、かつ、左から偶数番目である領域は、遷移元状態が繰り返し正規表現に関係のない状態であって、遷移先状態が繰り返し正規表現に関係する状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(1,2)の第1行、第5列目の要素"CDAA"は、図2に示す状態遷移において状態1→状態2→状態3→状態4→状態5へと1文字単位の遷移を4回行った場合に、状態1→状態5へ遷移条件"CDAA"に基づいて遷移することを示す。上から奇数番目であって、かつ、左から偶数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係しない状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から奇数番目であって、かつ、左から偶数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち左側の境界に接する範囲にコピーする(ステップE6)。
尚、図18に示すステップE5〜E7は、上述した処理を一般的に示したものである。即ち、ステップE5〜E7において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE6における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図20は、ステップE7までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図20ではM=4の場合を示しているので、multi-char NFA記述行列は4-char NFA記述行列となる。網掛けを用いて示す部分(図において、R1を用いて示す部分。)は、上述したステップE2〜E4の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列からコピーした要素である。濃い網掛けを用いて示す部分(図において、R2を用いて示す部分。)は、ステップE5〜E7の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char
NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分R1は、multi-char NFA記述行列生成手段123が、上述したステップE4までの処理においてコピーした要素を示す。
次いで、ステップE8〜E10における(3)の処理について説明する。(3)の処理は、上から偶数番目であり、かつ、左から奇数番目の領域に対する処理である。上から偶数番目であり、かつ、左から奇数番目である領域は、遷移元状態が繰り返し正規表現に関係する状態であって、遷移先状態が繰り返し正規表現に関係のない状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(2,3)の第6行、第9列目の要素"AAST"は、図2に示す状態遷移において状態101→状態102→状態103→状態3→状態104へと1文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。ここで、繰り返し正規表現に関係する状態から繰り返し正規表現に関係しない状態へとM文字単位の状態遷移を行う場合には、遷移元状態となり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち下側の境界に接する範囲にコピーする(ステップE9)。
尚、図18に示すステップE8〜E10は、上述した処理を一般的に示したものである。即ち、ステップE8〜E10において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE9における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図21は、ステップE10までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図21においては、濃い網掛けを用いて示す部分(図において、R4を用いて示す部分。)は、ステップE8〜E10の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分(図において、R3を用いて示す部分。)は、multi-char NFA記述行列生成手段123が、上述したステップE7までの処理においてコピーした要素を示す。
次いで、ステップE11〜E13における(4)の処理について説明する。(4)の処理は、上から偶数番目であり、かつ、左から偶数番目の領域に対する処理である。上から偶数番目であり、かつ、左から偶数番目である領域は、遷移元状態と遷移先状態ともに、繰り返し正規表現に関係する状態に関する遷移条件を示している。
例えば、図13に示す縮小版4-char NFA記述行列において、領域(2,2)の第6行、第4列目の要素"AASA"は、図2に示す状態遷移において状態101→状態102→状態103→状態3→状態4へと1文字単位の遷移を4回行った場合に、状態101→状態104へ遷移条件"AAST"に基づいて遷移することを示す。繰り返し正規表現内の状態101から状態遷移を開始し、一度、繰り返し正規表現に対応する状態を抜けて状態103から状態3の遷移を行った後、再度、繰り返し正規表現に対応する状態4に達している。上から偶数番目であって、かつ、左から奇数番目である領域内の他の要素についても、同様に示す。
図13に示す縮小版4-char NFA記述行列においては、上から偶数番目であって、かつ、左から偶数番目である領域のうち、0以外の要素が存在するのは領域(2,2)だけであり、他の3つの領域(2,4)、(4,2)、(4,4)については、全ての要素が0となっている。これは、領域(4,2)、(4,4)については、遷移元状態が繰り返し正規表現"B{50}"に対応する状態であり、図2に示す状態遷移図において繰り返し正規表現"B{50}"に関する状態遷移を行った後は、状態156に文字'U'で遷移する遷移条件しか存在しないため、領域(4,2)や(4,4)に対応する状態遷移が存在しないためである。また、領域(2,4)は、繰り返し正規表現"A{100}"に関連する状態から繰り返し正規表現"B{50}"に関連する状態への状態遷移を表しているが、繰り返し正規表現"A{100}"に関連する最後の状態である状態102から、繰り返し正規表現"B{50}"に関連する最初の状態である状態106へと達するには5文字分の状態遷移が必要である。このため、領域(2,4)に対応する状態遷移は存在しない。尚、本実施の形態1では、正規表現の一例として"BCD((A{100}|E)S)*TTB{50}U"を用いたが、別の正規表現が指定された場合には、これらの領域(2,4)、(4,2)、(4,4)に対しても、0以外の要素が存在する場合がある。
繰り返し正規表現に関係する状態から繰り返し正規表現に関係する状態へとM文字単位の状態遷移を行う場合には、遷移先状態となり得るのは繰り返し正規表現の先頭からM番目の状態だけであり、遷移元状態になり得るのは繰り返し正規表現の末尾からM番目の状態だけであることに着目する。これにより、multi-char NFA記述行列生成手段123は、縮小版multi-char NFA記述行列において、上から偶数番目であって、かつ、左から奇数番目である領域を、オリジナル版multi-char NFA記述行列の同じ位置の領域のうち、左側と下側の境界に接する範囲にコピーする(ステップE12)。
尚、図18に示すステップE11〜E13は、上述した処理を一般的に示したものである。即ち、ステップE11〜E13において、multi-char NFA記述行列生成手段123は、各領域についての処理を行う。ステップE12における領域毎の処理では、multi-char NFA記述行列生成手段123は、ステップB1において計算した行列変換情報リストを参照することで、コピー先の座標を一意に特定することができる。図22は、ステップE13までの処理を終えた時点での、オリジナル版4-char NFA記述行列を示す図である。図22においては、濃い網掛けを用いて示す部分(図において、R6を用いて示す部分。)は、ステップE1〜E13の処理において、multi-char NFA記述行列生成手段123が、縮小版4-char NFA記述行列から新たにコピーした要素である。尚、薄い網掛けを用いて示す部分(図において、R5を用いて示す部分。)は、multi-char NFA記述行列生成手段123が、上述したステップE10までの処理においてコピーした要素を示す。
次いで、ステップE14〜E18における(5)の処理について説明する。(5)の処理は、繰り返し正規表現に関する補正である。図22に示すように、ステップE13までの処理を終えた時点でのオリジナル版multi-char NFA記述行列においては、繰り返し正規表現に対応する状態遷移のうち、繰り返し正規表現"A{100}"に対応する状態では、状態4〜98からの状態遷移と、状態8〜102への状態遷移と、が規定されていない。また、繰り返し正規表現"B{50}"に対応する状態では、状態106〜150からの状態遷移と、状態110〜154への状態遷移と、が規定されていない。
状態4〜98からの状態遷移について着目すると、状態4〜98は繰り返し正規表現"A{100}"に対応する状態である。図2を参照すると、1文字単位の状態遷移をM(=4)回行った場合には、途中で経由する状態と、M回の状態遷移を行った結果達することができる状態とは、いずれも繰り返し正規表現"A{100}"に対応する状態だけである。このため、遷移条件は、繰り返し正規表現の繰り返し文字M個である。上述したステップA3において、1-char NFA生成手段121は、繰り返し正規表現に対応する状態について、状態番号が昇順の連番となるように状態番号を割り当てている。このため、状態4〜98からの状態遷移は、遷移条件'A'のM回繰り返し(M=4なので"AAAA")での、状態X(4≦X≦98)から状態X+Mへの状態遷移だけとなる。
同様にして、状態8〜102への状態遷移について着目すると、状態8〜102への状態遷移に関して有効な状態遷移は、遷移条件'A'のM回繰り返し(M=4なので"AAAA")での、状態X(4≦X≦98)から状態X+Mへの状態遷移だけである。これは、状態4〜98からの状態遷移と全く同じ状態遷移である。従って、multi-char NFA記述行列生成手段123は、繰り返し正規表現"A{100}"に対応する状態遷移として、遷移条件'A'のM(=4)回繰り返しでの、状態X(4≦X≦98)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。また、同様にして、multi-char NFA記述行列生成手段123は、繰り返し正規表現"B{50}"に対応する状態遷移として、遷移条件'B'のM(=4)回繰り返しでの、状態X(106≦X≦150)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する。
尚、図18に示すステップE14〜E18は、上述した処理を一般的に示したものである。即ち、ステップE14〜E18において、multi-char NFA記述行列生成手段123は、それぞれの繰り返し正規表現に対応して、遷移条件として繰り返し文字CiのM回繰り返しでの、状態X(Si≦X≦Ei-M)から状態X+Mへの状態遷移を、オリジナル版4-char NFA記述行列に追加する処理を行う。尚、iは、行列変換情報リストのエントリに割り当てられたインデックス番号を示し、個々の繰り返し正規表現に対応する。図14は、図18に示す処理(ステップE1〜E18)を全て終了した後の、完成したオリジナル版4-char NFA記述行列D4を示す図である。
次に、ステップB5について説明する。ステップB5において、multi-char NFA記述行列生成手段123は、上述したステップB4までに生成したオリジナル版4-char NFA記述行列D4を、multi-char NFA記述行列記憶部145に記憶する。
また、multi-char NFA記述行列生成手段123は、生成したオリジナル版multi-char NFA記述行列をmulti-char NFA記述行列記憶部145に記憶する際に、1-char NFA記述行列生成手段122から全ての1-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、全てのmulti-char NFA記述行列の生成処理が完了したことを示す信号を、multi-char NFA生成手段124に通知する。以上説明したようにして、multi-char
NFA記述行列生成手段123は、multi-char NFA記述行列生成処理を完了する。
次に、図23を参照して、multi-char NFA生成手段124の動作について説明する。multi-char NFA生成手段124は、NFA記述行列の定義に基づいて、M文字単位の状態遷移(multi-char NFA)を生成する。multi-char NFA生成手段124は、非特許文献3に開示される手法に基づいて、multi-char NFA記述行列記憶部145に記憶したオリジナル版multi-char NFA記述行列から、multi-char NFAを生成する。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶する。具体的には、まず、multi-char NFA生成手段124は、図14に示すオリジナル版4-char NFA記述行列D4の要素の中で、初期状態を示すIと、終了状態を示すFと、を任意の1文字にマッチすることを示す'*'に変換する。次いで、multi-char NFA生成手段124は、オリジナル版4-char NFA記述行列より、4-char NFA(M文字単位の状態遷移)を生成する。図23は、multi-char NFA生成手段124が生成した4-char NFAを示す図である。multi-char NFA生成手段124は、生成したmulti-char NFAをmulti-char NFA記憶部146に記憶して、その処理を終了する。
また、multi-char NFAをmulti-char NFA記憶部146に記憶する際に、multi-char NFA記述行列生成手段123から全てのmutli-char NFA記述行列の生成処理が完了したことを示す信号を受信している場合には、multi-char NFA生成手段124は、全てのmulti-char
NFAの生成処理が完了したことを示す信号を、HDL変換手段125に通知する。
次に、HDL変換手段125の動作について説明する。HDL変換手段125は、multi-char
NFA記憶部146に記憶したmulti-char NFAについて、そのNFAの状態と、状態間の遷移と、遷移条件等の情報を分析する。HDL変換手段125は、分析結果に基づいて、各状態をレジスタに、遷移条件を文字(列)比較器にそれぞれ変換して、状態間の遷移に応じて各レジスタの間を接続することで、そのNFA回路を記述するVerilog HDL等のHDL(Hardware Description Language)記述に変換する。
また、HDL変換手段125は、multi-char NFA生成手段124から全てのmulti-char NFAの生成処理が完了したことを示す信号を受信した場合には、multi-char NFAから変換した全てのHDL記述と、正規表現からHDLへの変換処理が完了したことを示す信号と、を出力装置13に出力する。
以上説明したように、本実施の形態1によれば、繰り返し正規表現を含む正規表現において繰り返し正規表現の繰り返し回数が増加した場合においても、NFAの遷移条件を複数文字単位に拡張したNFAを生成するためのNFA記述行列の演算量の増加を抑制することができる。即ち、本実施の形態1に係る手法は、オリジナル版1-char NFA記述行列において、繰り返し正規表現に対応する状態遷移に関する行と列の数を、繰り返し正規表現の繰り返し文字数から動作文字数Mにまで削減する。そして、行列サイズの小さい縮小版1-char NFA記述行列を作成した上で、縮小版の動作文字数M文字単位のNFA記述行列を計算する。そして、オリジナル版1-char NFA記述行列の状態数に対応するM文字単位のNFA記述行列を計算することで、M文字単位のNFAを得る。オリジナル版のNFA記述行列においては、行列サイズは、繰り返し正規表現の繰り返し回数に比例するものであったのに対して、上述したようにして作成した縮小版のNFA記述行列においては、繰り返し正規表現の数に比例する行列サイズに削減することができる。従って、行列サイズがNである行列同士の演算量はO(N3)であるため、本実施の形態1に係る手法は、multi-char NFA記述行列を計算する際の行列演算量を、関連技術と比較して大幅に削減することができる。multi-char NFA記述行列を計算する際の演算量を削減することができるため、M文字単位のNFAを作成するためのmulti-char NFA記述行列を生成する際に要する計算時間を削減することができる。これにより、正規表現が入力されてからM文字単位のNFAを求めて、最終的に、指定された正規表現を検索する回路のHDL記述を得るために要する所用時間を削減することができる。
また、本実施の形態1によれば、行列サイズの小さい縮小版の1-char NFA記述行列を用いてmulti-char NFA記述行列を生成するための演算を行うことで、その演算の際に使用するメモリに関して、行列演算情報を一時的に保持するためのメモリ容量を削減することができる。
また、本実施の形態1によれば、1文字単位のNFAを生成する際に、繰り返し正規表現に対応する状態には状態番号が昇順となるように状態番号を割り当てることで、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列を生成する際に、繰り返し正規表現に対応した状態遷移の追加を、状態Xから状態X+Mへの状態遷移を追加するという単純な処理で実現することができる。これにより、縮小版multi-char NFA記述行列からオリジナル版multi-char NFA記述行列へと変換するために保持すべき情報量を削減することができる。
尚、上述した実施の形態1では、本発明をNFAに適用する場合を説明したが本発明はこれに限定されない。即ち、実施の形態1と同様の構成を適用し、1-char NFA生成手段121において、1文字単位のNFAを生成する代わりに1文字単位のDFAを生成し、1文字単位のDFAを生成する際には、繰り返し正規表現に対応する状態遷移の開始状態番号を保持するように構成するようにしてもよい。これにより、NFAに限らずDFAに対しても、行列サイズの小さな縮小版の記述行列を用いて、同時に複数文字を処理可能なM文字単位のDFAを生成することができる。
実施の形態2.
次に、図24を参照して、本発明の実施の形態2について説明する。図24は、本発明の実施の形態2の構成を示すブロック図である。図24を参照すると、本実施の形態2は、上述した実施の形態1と同様に、キーボード等の入力装置11と、プログラム制御に従って動作するデータ処理装置14と、情報を記憶する記憶装置140と、ディスプレイ装置や印刷装置等の出力装置13と、を含む。
本実施の形態2においては、上述した実施の形態1のデータ処理装置12に含まれる、1-char NFA生成手段121と、1-char NFA記述行列生成手段122と、multi-char NFA記述行列生成手段123と、multi-char NFA生成手段124と、HDL変換手段125とが実行する処理を、データ処理装置14が実行する正規表現-HDL変換プログラム15に基づいて実現するものである。
データ処理装置14は、正規表現-HDL変換プログラム15を読み込む。正規表現-HDL変換プログラム15は、データ処理装置14の動作を制御する。データ処理装置14は、正規表現-HDL変換プログラム15の制御が、上述した実施の形態1におけるデータ処理装置12が実行する処理と同一の処理を実行する。
尚、本実施の形態2においても、上述した実施の形態1と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
実施の形態3.
次に、図25を参照して、本発明の実施の形態3について説明する。図25は、本発明の実施の形態3の構成を示すブロック図である。図25を参照すると、本実施の形態3は、キーボード等の入力装置11と、プログラム制御に従って動作するデータ処理装置16と、情報を記憶する記憶装置140と、FPGA等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするためのコンフィグレーション装置164と、パターンマッチングの被検索対象データをパターンマッチング装置17に入力するデータ入力装置174と、FPGA等の再構成可能なハードウェアデバイスを有するパターンマッチング装置17と、パターンマッチングの出力結果を表示するためのディスプレイ装置や印刷装置等の結果出力装置175と、を含む。
データ処理装置16は、図1に示す上述した実施の形態1のデータ処理装置12に対して、コンフィグレーションデータ変換手段161を加えたものである。その他の要素は、上述した実施の形態1と同じであるため、説明を省略する。
コンフィグレーションデータ変換手段161は、HDL変換手段125より、正規表現からHDLへの変換処理が完了したことを示す信号を受け取る。正規表現からHDLへの変換処理が完了したことを示す信号を受け取った場合には、コンフィグレーションデータ変換手段161は、HDL変換手段125から受信したmulti-char NFAを記述するHDL記述に基づいて、パターンマッチング装置17が有する再構成可能なハードウェアデバイスの構成情報となるコンフィグレーションデータへと変換する。変換処理を完了すると、コンフィグレーションデータ変換手段161は、コンフィグレーションデータをコンフィグレーション装置164に出力する。尚、HDLからコンフィグレーションデータへの変換については、例えば、FPGAである場合には、そのベンダーが提供している開発ツールを使用することができるため、その変換方法の詳細については省略する。
コンフィグレーション装置164は、コンフィグレーションデータ変換手段161からコンフィグレーションデータを受信する。コンフィグレーションデータを受信したコンフィグレーション装置164は、コンフィグレーションデータを受信したコンフィグレーション装置164は、パターンマッチング装置17のパターンマッチング部172を実現する再構成可能なハードウェアデバイスを構成・設定する。コンフィグレーション装置164は、FPGA等の再構成可能なハードウェアデバイスにその構成をコンフィグレーションするための制御プログラムや、ハードウェアデバイスにデータを転送するための書き込みケーブル等にを用いて構成する。コンフィグレーション装置164を構成するこれらの構成要素は、例えばFPGAである場合には、デバイスベンダーが提供している開発ツールに含まれている。コンフィグレーション装置164がコンフィグレーションデータを用いて再構成可能なハードウェアデバイスを構成・設定する詳細な手順については、FPGA等のデバイスベンダーの提供する開発ツールを使用することができる。このため、ここではその詳細な説明を省略する。
パターンマッチング装置17は、データ入力部171と、パターンマッチング部172と、結果出力部173と、を含む。データ入力部171と、パターンマッチング部172と、結果出力部173とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成する。
データ入力部171は、データ入力装置174から入力されたパケットデータや、テキストデータ等のパターンマッチング対象データ(以下、これらデータを被検索データと称する。)を整形して、データ処理装置16にて生成した同時動作数に等しい同時処理文字数へと並列化する。データ入力部171は、同時処理文字数単位に、被検索データをパターンマッチング部172へ入力する。
パターンマッチング部172は、コンフィグレーション装置164を経由して入力された、データ処理装置16が生成したコンフィグレーションデータを用いて構成される回路である。即ち、パターンマッチング部172は、データ処理装置16が生成したmulti-char NFA回路そのものを示す。パターンマッチング部172に構成されたNFA回路は、データ入力部171から被検索データが入力される都度、状態遷移が起こる。そして、NFA回路は、入力された被検索データがパターンと一致した場合には、その信号が終了状態を構成しているレジスタからパターンに一致した旨を示す信号と、パターンに一致した被検索データに関する情報(例えば、パターンに一致した被検索データの位置等を示す情報。)と、を結果出力部173へと出力する。
結果出力部173は、パターンマッチング部172から入力されたパターンに一致したことを示す信号と、パターンに一致した被検索データに関する情報と、を受信する。結果出力部173は、入力された被検索データがどの入力文字列に応じてどのパターンに一致したのか等の情報を処理して、その処理結果を結果出力装置175へと出力する。尚、どのパターンに一致したかの通知は、例えば、予め定義しておいたパターン番号等を用いて通知することができる。
本実施の形態3では、正規表現そのものを入力することで、1-char NFAから、指定された処理文字数で遷移を行うmulti-char NFAの変換を行う。そして、本実施の形態3に係る手法は、multi-char NFAのNFA回路を記述するHDL記述を生成し、そのHDL記述を用いて記述されるNFA回路をパターンマッチング装置内のハードウェアデバイス上に構成する。これにより、本実施の形態3に係る手法は、ハードウェアデバイス上に構成したNFA回路を用いた、パターンマッチング装置を実現することができる。上述した実施の形態1にて説明したように、本発明は、multi-char NFA記述行列を計算する際の演算量を削減することができる。これにより、本発明は、M文字単位のNFAを作成するためのmulti-char NFA記述行列の生成に要する計算時間を削減することができる。従って、本発明は、正規表現が入力されてからM文字単位のNFAを得て、最終的に、指定された正規表現を検索する回路のHDL記述を得る、までの所用時間を削減することができる。このため、本発明は、入力装置11より新たな正規表現が入力された際には、短時間でmulti-char NFA回路を記述したHDL記述を得ることができる。これにより、そのNFA回路を記述したHDL記述を変換したコンフィグレーションデータを短時間で得ることができ、入力装置11より新たな正規表現が入力されてからその正規表現がパターンマッチング部172の構成に反映されるまでの時間を短縮することができる。
尚、本実施の形態3は、上述した実施の形態2における正規表現-HDL変換プログラム15で制御されるデータ処理装置が生成するmulti-char NFAであって、そのmulti-char NFAを記述するHDL記述をコンフィグレーションデータ変換手段161に入力し、そのHDL記述からコンフィグレーションデータを生成するようにしてもよい。
さらに、本実施の形態3では、パターンマッチング装置17において、データ入力部171と、パターンマッチング部172と、結果出力部173とは、それぞれ別々の再構成可能なハードウェアデバイス上に構成するものとしたが本発明はこれに限定されない。即ち、これら3つを同じ再構成可能なハードウェアデバイス上に構成してもよい。また、例えば、データ入力部171と、結果出力部173と、を同じ再構成可能なハードウェアデバイス上に構成し、パターンマッチング部172を別の再構成可能なハードウェアデバイス上に構成する等してもよい。データ入力部171と、パターンマッチング部172と、結果出力部173と、これらを配備する再構成可能なハードウェアデバイスと関係については、制約はない。
さらに、データ入力部171と、結果出力部173とについては、ASIC(Application Specific Integrated Circuit)等の再構成できないハードウェアデバイス上に構成することも可能である。
また、ハードウェアデバイスの一部のみが再構成可能であり、他の部分は再構成できないハードウェアデバイスを用いて、パターンマッチング部172を再構成可能な部分に構成し、データ入力部171と結果出力部173とを再構成できないハードウェアデバイス上に構成するようにしてもよい。ここで、データ入力部171と結果出力部173の両方、又は、これらのいずれか1つを、パターンマッチング部122と同じ再構成可能なハードウェアデバイス上に構成する場合には、コンフィグレーションデータ変換手段161は、HDL変換手段125が生成したNFA回路を記述するHDL記述に加えて、データ入力部171や結果出力部173の回路を記述するHDLについても読み込むようにしてもよい。これにより、コンフィグレーションデータ変換手段161は、読み込んだコンフィグレーションデータを生成することで、データ入力部171と結果出力部173の両方、又は、これらのいずれか1つを、パターンマッチング部122と同じ再構成可能なハードウェアデバイス上に構成する場合にも対応することができる。
上述した実施の形態3の動作の説明では、コンフィグレーション装置164は、コンフィグレーションデータを格納せずに、受信したコンフィグレーションデータを使用して、パターンマッチング装置17のパターンマッチング部172を実現する再構成可能なハードウェアデバイスを構成・設定する構成としたが本発明はこれに限定されない。即ち、コンフィグレーションデータを記憶するコンフィグレーションデータ記憶装置を更に備え、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した場合には、その受信したコンフィグレーションデータを前記コンフィグレーションデータ記憶装置に記憶させた後に、前記コンフィグレーションデータ記憶装置からコンフィグレーションデータを読み出す構成としてもよい。
また、上述した実施の形態3の動作の説明では、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した場合には、パターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始する構成としたが、本発明はこれに限定されない。即ち、コンフィグレーション装置164は、コンフィグレーションデータ変換手段161よりコンフィグレーションデータを受信した際にパターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始する必要はなく、パターンマッチング装置17のパターンマッチング部172の動作状況を考慮して、パターンマッチング装置17のパターンマッチング部172の動作に都合のよいタイミングで、パターンマッチング部172を実現する再構成可能なハードウェアデバイスの構成を開始するようにしてもよい。
尚、本実施の形態3においても、上述した実施の形態1、2と同様に、NFAに限定されずDFAに対しても同様の処理を行うことができる。
以下、本発明による効果について説明する。第1の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、NFA記述行列の演算量を少なくできることである。NFA記述行列は、NFAの遷移条件を複数文字単位に拡張したNFAを生成するための行列である。
その理由は、本発明は、1-char NFA記述行列からmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、行列サイズの小さい1-char NFA記述行列を作成し、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char
NFA記述行列に変換しているためである。即ち、1文字単位の遷移のNFAを記述する1-char NFA記述行列から指定された文字単位の遷移のNFAを記述するmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、繰り返し正規表現に対応する状態遷移に関する行および列の数を指定された文字数にまで縮小した、行列サイズの小さい1-char NFA記述行列を作成し、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char NFA記述行列に変換することで、行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことができるためである。
第2の効果は、繰り返し正規表現を含む正規表現において、繰り返し正規表現の繰り返し回数が多くなった場合でも、NFA記述行列の演算に必要な記憶領域を少なくできることである。
その理由は、第1の効果と同様に、multi-char NFA記述行列を求めるための演算を行う前に、行列サイズの小さい1-char NFA記述行列を生成し、生成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことで、演算対象となる行列のサイズを小さく抑えることができるためである。
さらに、本発明は、1文字単位の遷移のNFAを記述する1-char NFA記述行列からmulti-char NFA記述行列を生成する際に、1-char NFA記述行列から、繰り返し正規表現に対応する状態遷移に関する行および列の数を指定された文字数にまで縮小した、行列サイズの小さい1-char NFA記述行列を作成する。そして、作成した行列サイズの小さい1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行い、最後に行列サイズ縮小前の1-char NFA記述行列と同じ大きさのmulti-char NFA記述行列に変換する。NFA記述行列の各行と各列はそれぞれ有限オートマトンの状態に対応している。行列サイズを小さくすることは行列の一部の行、又は、列を削除することを示す。行列の行、又は、列の一部を削除することは、記述行列へと変換する前の有限オートマトンにおいては、一部の状態を削除していることと等価である。即ち、本発明において、行列サイズを縮小した1-char NFA記述行列を用いてmulti-char NFA記述行列を求めるための演算を行うことは、有限オートマトンの状態数を削減した記述行列を作成した上で当該演算を行うことに相当する。従って、本発明では、multi-char NFA記述行列を求める際の演算において、有限オートマトンの状態数を削減することができる。
尚、本発明は上述した実施例のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
この出願は、2008年6月4日に出願された日本出願特願2008―146909を基礎とする優先権を主張し、その開示のすべてをここに取り込む。
本発明の活用例として、正規表現を用いたパターンマッチング処理を行うためのNFA回路を記述したHDL生成システムや、生成プログラム等の用途に適用することができる。また、本発明を用いて生成したHDLを用いてNFA回路を構成することで、正規表現を用いた高速なパターンマッチング処理を行うためのパターンマッチング装置等の用途に適用することができる。さらに、パターンマッチング装置にパケット処理回路を加えることで、ネットワーク侵入検知システム(NIDS: Network Intrusion Detection System)や、ネットワーク侵入防止システム(NIPS: Network Intrusion Prevention System)に対しても適用することができる。また、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理の代替となるハードウェアアクセラレータ用NFA回路生成システム、生成プログラムを格納する記録媒体、正規表現検索ハードウェアアクセラレータ装置等に対しても適用することができる。
11:入力装置、
12:データ処理装置、
13:出力装置、
121:1-char NFA生成手段、
122:1-char NFA記述行列生成手段、
123:multi-char NFA記述行列生成手段、
124:multi-char NFA生成手段、
125:HDL変換手段、
14:データ処理装置(実施の形態2)、
15:正規表現―HDL変換プログラム、
16:データ処理装置(実施の形態3)、
161:コンフィグレーションデータ変換手段、
162:記憶装置、
163:コンフィグレーションデータ記憶部、
164:コンフィグレーション装置、
17:パターンマッチング装置、
171:データ入力部、
172:パターンマッチング部、
173:結果出力部、
174:データ入力装置、
175:結果出力装置、
200〜204:レジスタ、
300〜304:各文字を比較する比較器、
400〜404:ANDゲート、
500〜502:ORゲート

Claims (30)

  1. 入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成システムであって、
    入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第1の記憶部に記憶する固定文字数単位有限オートマトン生成手段と、
    前記第1の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第2の記憶部に記憶する固定文字数単位行列形式表現生成手段と、
    前記第2の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第3の記憶部に記憶する行列縮小手段と、
    前記第3の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第4の記憶部に記憶する行列演算手段と、
    前記第4の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
    を有する有限オートマトン生成システム。
  2. 前記行列縮小手段は、
    前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
    ことを特徴とする請求項1記載の有限オートマトン生成システム。
  3. 前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第5の記憶部に記憶する繰り返しリスト作成手段を更に有する
    ことを特徴とする請求項1記載の有限オートマトン生成システム。
  4. 前記行列縮小手段は、
    前記繰り返しリスト作成手段で作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
    ことを特徴とする請求項3記載の有限オートマトン生成システム。
  5. 前記行列拡大手段は、
    前記繰り返しリスト作成手段で作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
    ことを特徴とする請求項3記載の有限オートマトン生成システム。
  6. 前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
    ことを特徴とする請求項4又は5記載の有限オートマトン生成システム。
  7. 前記固定文字数単位有限オートマトン生成手段は、
    入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
    ことを特徴とする請求項1記載の有限オートマトン生成システム。
  8. 前記固定文字数単位有限オートマトン生成手段は、
    前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
    ことを特徴とする請求項7記載の有限オートマトン生成システム。
  9. 前記行列拡大手段は、拡大した行列形式表現を第6の記憶部に記憶し、
    前記第6の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段を更に有する
    ことを特徴とする請求項1記載の有限オートマトン生成システム。
  10. 入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成方法であって、
    入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第1の記憶部に記憶し、
    前記第1の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第2の記憶部に記憶し、
    前記第2の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第3の記憶部に記憶し、
    前記第3の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第4の記憶部に記憶し、
    前記第4の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する
    有限オートマトン生成方法。
  11. 前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記正規表現に含まれる繰り返し正規表現に対応する領域を縮小した行列形式表現の作成は、
    前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
    ことを特徴とする請求項10記載の有限オートマトン生成方法。
  12. 前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第5の記憶部に記憶する
    ことを特徴とする請求項10記載の有限オートマトン生成方法。
  13. 前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記正規表現に含まれる繰り返し正規表現に対応する領域を縮小した行列形式表現の作成は、
    前記作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
    ことを特徴とする請求項12記載の有限オートマトン生成方法。
  14. 前記行列演算の結果である行列形式表現を、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現の作成は、
    前記作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
    ことを特徴とする請求項12記載の有限オートマトン生成方法。
  15. 前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
    ことを特徴とする請求項13又は14記載の有限オートマトン生成方法。
  16. 入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
    ことを特徴とする請求項10記載の有限オートマトン生成方法。
  17. 前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
    ことを特徴とする請求項16記載の有限オートマトン生成方法。
  18. 拡大した行列形式表現を第6の記憶部に記憶し、
    前記第6の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する
    ことを特徴とする請求項10記載の有限オートマトン生成方法。
  19. 入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成する有限オートマトン生成プログラムであって、
    入力装置から正規表現を読み込み、前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成し、第1の記憶部に記憶する固定文字数単位有限オートマトン生成ステップと、
    前記第1の記憶部に記憶された固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成し、第2の記憶部に記憶する固定文字数単位行列形式表現生成ステップと、
    前記第2の記憶部に記憶された固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成し、第3の記憶部に記憶する行列縮小ステップと、
    前記第3の記憶部に記憶された縮小行列形式表現を用いて、前記行列演算を行い、前記行列演算の結果を第4の記憶部に記憶する行列演算ステップと、
    前記第4の記憶部に記憶された行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大ステップと、
    をコンピュータに実行させることを特徴とする有限オートマトン生成プログラム。
  20. 前記行列縮小ステップでは、
    前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうち、前記繰り返し正規表現に対応する領域の行及び列を、前記遷移条件として指定する任意の文字数の幅から成る行及び列へと縮小した行列形式表現を作成する
    ことを特徴とする請求項19記載の有限オートマトン生成プログラム。
  21. 前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成し、第5の記憶部に記憶する繰り返しリスト作成ステップを更に有する
    ことを特徴とする請求項19記載の有限オートマトン生成プログラム。
  22. 前記行列縮小ステップでは、
    前記繰り返しリスト作成ステップで作成した繰り返し正規表現リストを参照して、前記固定文字数の遷移条件から成る有限オートマトンを記述する行列形式表現の領域のうちで縮小する領域を決定する
    ことを特徴とする請求項21記載の有限オートマトン生成プログラム。
  23. 前記行列拡大ステップでは、
    前記繰り返しリスト作成ステップで作成した繰り返し正規表現リストを参照して、前記行列演算の結果である行列形式表現の領域のうちで拡大する領域を決定する
    ことを特徴とする請求項21記載の有限オートマトン生成プログラム。
  24. 前記繰り返し正規表現リストの各要素を、前記繰り返し正規表現の繰り返し文字と、当該繰り返し文字の繰り返し回数と、当該繰り返し正規表現に対応する有限オートマトンの状態番号と、から構成する
    ことを特徴とする請求項22又は23記載の有限オートマトン生成プログラム。
  25. 前記固定文字数単位有限オートマトン生成ステップでは、
    入力する正規表現を固定文字数の遷移条件から成る有限オートマトンとして生成する際に、前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる
    ことを特徴とする請求項19記載の有限オートマトン生成プログラム。
  26. 前記固定文字数単位有限オートマトン生成ステップでは、
    前記繰り返し正規表現に対応する有限オートマトンの状態番号として、連続する状態番号を割り当てる際に、当該割り当てる状態番号を昇順とする
    ことを特徴とする請求項25記載の有限オートマトン生成プログラム。
  27. 前記行列拡大ステップは、拡大した行列形式表現を第6の記憶部に記憶し、
    前記第6の記憶部に記憶された拡大した行列形式表現を有限オートマトン回路へと変換する回路変換ステップを更に有する
    ことを特徴とする請求項19記載の有限オートマトン生成プログラム。
  28. 入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、
    前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、
    前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、
    前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、
    前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、
    前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、
    前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
    前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、
    前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、を有し、
    前記回路記述手段で記述した回路記述を用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行う
    パターンマッチング装置。
  29. 入力する正規表現から、指定する任意の文字数の遷移条件から成る有限オートマトンを行列演算を用いて生成し、前記生成した有限オートマトンを用いてパターンマッチを行うパターンマッチング装置であって、
    前記正規表現から、固定文字数の遷移条件から成る固定文字数単位有限オートマトンを生成する固定文字数単位有限オートマトン生成手段と、
    前記正規表現に含まれる繰り返し正規表現と当該繰り返し正規表現に対応する固定文字数単位有限オートマトンの状態番号との対応関係を保持する繰り返し正規表現リストを作成する繰り返しリスト作成手段と、
    前記固定文字数単位有限オートマトンから当該固定文字数単位有限オートマトンの状態と前記遷移条件との対応関係を記述する行列形式表現を生成する固定文字数単位行列形式表現生成手段と、
    前記固定文字数単位行列形式表現の領域のうち、繰り返し正規表現に対応する領域を縮小した縮小行列形式表現を作成する行列縮小手段と、
    前記縮小行列形式表現を用いて、前記行列演算を行う行列演算手段と、
    前記行列演算の結果である行列形式表現を、前記固定文字数単位行列形式表現の行列サイズと同じ行列サイズとなる行列形式表現へと拡大した行列形式表現を作成する行列拡大手段と、
    前記行列拡大手段で拡大した行列形式表現を有限オートマトン回路へと変換する回路変換手段と、
    前記回路変換手段で変換した有限オートマトン回路をハードウェア記述言語を用いて記述する回路記述手段と、
    前記回路記述手段で記述した回路記述から、再構成可能ハードウェアデバイスの構成情報を示すコンフィグレーションデータを生成するコンフィグレーション変換手段と、有し、
    前記コンフィグレーション変換手段で生成したコンフィグレーションデータを用いて、再構成可能ハードウェアデバイス上に前記有限オートマトンを用いたパターンマッチ回路を構成し、当該構成したパターンマッチ回路を用いてパターンマッチを行う
    ことを特徴とするパターンマッチング装置。
  30. 前記パターンマッチ回路をハードウェア化し、当該ハードウェア化したパターンマッチ回路を用いてパターンマッチを行う
    ことを特徴とする請求項28又は29に記載のパターンマッチング装置。
JP2010515745A 2008-06-04 2009-05-21 有限オートマトン生成システム Expired - Fee Related JP5429164B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010515745A JP5429164B2 (ja) 2008-06-04 2009-05-21 有限オートマトン生成システム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2008146909 2008-06-04
JP2008146909 2008-06-04
PCT/JP2009/002241 WO2009147794A1 (ja) 2008-06-04 2009-05-21 有限オートマトン生成システム
JP2010515745A JP5429164B2 (ja) 2008-06-04 2009-05-21 有限オートマトン生成システム

Publications (2)

Publication Number Publication Date
JPWO2009147794A1 JPWO2009147794A1 (ja) 2011-10-20
JP5429164B2 true JP5429164B2 (ja) 2014-02-26

Family

ID=41397880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010515745A Expired - Fee Related JP5429164B2 (ja) 2008-06-04 2009-05-21 有限オートマトン生成システム

Country Status (2)

Country Link
JP (1) JP5429164B2 (ja)
WO (1) WO2009147794A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010018710A1 (ja) * 2008-08-13 2010-02-18 日本電気株式会社 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
US8725671B2 (en) 2009-03-19 2014-05-13 Nec Corporation Pattern matching appratus
JPWO2014041783A1 (ja) * 2012-09-11 2016-08-12 日本電気株式会社 文字列検出回路及び文字列検出方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003242179A (ja) * 2002-02-05 2003-08-29 Internatl Business Mach Corp <Ibm> 文字列照合方法、これを用いた文書処理装置及びプログラム
JP2005218362A (ja) * 2004-02-05 2005-08-18 National Agriculture & Bio-Oriented Research Organization 発酵ソバ食品及びその製造法
JP2005242997A (ja) * 2004-01-30 2005-09-08 Nec Corp データ検索装置及び方法
JP2009093599A (ja) * 2007-10-12 2009-04-30 Nec Corp 文字列照合回路

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003242179A (ja) * 2002-02-05 2003-08-29 Internatl Business Mach Corp <Ibm> 文字列照合方法、これを用いた文書処理装置及びプログラム
JP2005242997A (ja) * 2004-01-30 2005-09-08 Nec Corp データ検索装置及び方法
JP2005218362A (ja) * 2004-02-05 2005-08-18 National Agriculture & Bio-Oriented Research Organization 発酵ソバ食品及びその製造法
JP2009093599A (ja) * 2007-10-12 2009-04-30 Nec Corp 文字列照合回路

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CSNG200701022004; 山垣 則夫: 'NFA埋め込み型パターンマッチング回路におけるマルチバイト処理化に関する検討' 電子情報通信学会技術研究報告 Vol.107,No.225, 20070921, 社団法人電子情報通信学会 *
JPN6013038978; SIDHU R, et al.: 'Fast Regular Expression Matching using FPGAs' Field-Programmable Custom Computing Machines, 2001. FCCM '01. The 9th Annual IEEE Symposium on , 200104, pp.227-238, IEEE *
JPN6013038980; 山垣 則夫: 'NFA埋め込み型パターンマッチング回路におけるマルチバイト処理化に関する検討' 電子情報通信学会技術研究報告 Vol.107,No.225, 20070921, 社団法人電子情報通信学会 *
JPN7013002943; CLARK C R: 'Design of Efficient FPGA Circuits For Matching Complex Patterns in Network Intrusion Detection Syste' Georgia Tech Theses and Dissertations , 20040303, Georgia Institute of Technology *

Also Published As

Publication number Publication date
JPWO2009147794A1 (ja) 2011-10-20
WO2009147794A1 (ja) 2009-12-10

Similar Documents

Publication Publication Date Title
JP5321589B2 (ja) 有限オートマトン生成装置、パターンマッチング装置、有限オートマトン回路生成方法およびプログラム
JP5381710B2 (ja) ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
EP2668577B1 (en) Unrolling quantifications to control in-degree and/or out degree of automaton
CN110826719A (zh) 一种量子程序的处理方法、装置、存储介质和电子装置
CN103999035A (zh) 用于状态机中的数据分析的方法及系统
JP2014506693A5 (ja)
WO2006051760A1 (ja) データフローグラフの同一サブグラフ検出装置、高位合成装置、データフローグラフの同一サブグラフ検出方法、データフローグラフの同一サブグラフ検出制御プログラムおよび可読記録媒体
US10884736B1 (en) Method and apparatus for a low energy programmable vector processing unit for neural networks backend processing
JPWO2009116646A1 (ja) マルチバイト処理向け文字列照合用有限オートマトン生成システム
Baker et al. An architecture for efficient hardware data mining using reconfigurable computing systems
Chen et al. Computer generation of high throughput and memory efficient sorting designs on FPGA
JP6666554B2 (ja) 情報処理装置、変換プログラム、及び変換方法
EP2176752A2 (en) Order preservation in data parallel operations
Chrysos et al. Augmenting deep classifiers with polynomial neural networks
Azad et al. Computing maximum cardinality matchings in parallel on bipartite graphs via tree-grafting
JP5429164B2 (ja) 有限オートマトン生成システム
JPWO2008081932A1 (ja) 文字列照合用有限オートマトン生成システム、その生成方法、及び生成プログラム
Case et al. Inductively finding a reachable state space over-approximation
JP4347087B2 (ja) パターンマッチング装置および方法ならびにプログラム
JP2009025973A (ja) 動作合成装置、半導体集積回路の製造方法、動作合成方法、動作合成制御プログラムおよび可読記録媒体
JP5523360B2 (ja) N分木内部ノードの圧縮方法及び装置及びプログラム
JP2000020318A (ja) メモリアクセス命令削減装置および記録媒体
Heuberger et al. Automata and transducers in the computer algebra system Sage
JP3062119B2 (ja) 文字列探索用テーブル、その作成方法及び文字列探索方法
WO2023223424A1 (ja) ドキュメント生成装置、プログラム及びドキュメント生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120411

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130806

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131004

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131118

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees