JPWO2009017131A1 - ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム - Google Patents

ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム Download PDF

Info

Publication number
JPWO2009017131A1
JPWO2009017131A1 JP2009525412A JP2009525412A JPWO2009017131A1 JP WO2009017131 A1 JPWO2009017131 A1 JP WO2009017131A1 JP 2009525412 A JP2009525412 A JP 2009525412A JP 2009525412 A JP2009525412 A JP 2009525412A JP WO2009017131 A1 JPWO2009017131 A1 JP WO2009017131A1
Authority
JP
Japan
Prior art keywords
syntax tree
transition
nfa
finite automaton
conversion
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.)
Granted
Application number
JP2009525412A
Other languages
English (en)
Other versions
JP5381710B2 (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 JP2009525412A priority Critical patent/JP5381710B2/ja
Publication of JPWO2009017131A1 publication Critical patent/JPWO2009017131A1/ja
Application granted granted Critical
Publication of JP5381710B2 publication Critical patent/JP5381710B2/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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/01Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Artificial Intelligence (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

正規表現から構文木を経由して、ε遷移を含まないNFAへの変換処理を高速化する。入力装置1から文字、又は選択、0回以上マッチを示す2種類のメタキャラクタ(‘|’、‘*’)のみで記述された正規表現から生成し、連結を示す記号‘・’と空を示す記号‘Φ’をノードに用いた構文木を受け取り、構文木記憶部31へ記憶させると共に生成するNFAの初期設定を行い、設定処理が完了すれば、NFAをNFA記憶部32へ記憶させ、構文木記憶部31から読み出した構文木データをNFA変換手段22へ送出する初期設定手段21と、初期設定手段21から受け取った構文木データと、NFA記憶部32からNFAを読み込み、構文木の各ノードに対して5つの変換パターンを適用し、ε遷移を含まないNFAへ直接変換し、変換が完了すれば、NFA記憶部32へ生成したNFAを記憶し、出力装置4へ出力するNFA変換手段22と、を備えている(図1)。

Description

(関連出願についての記載)
本願は、先の日本特許出願2007−201510号(2007年8月2日出願)の優先権を主張するものであり、前記先の出願の全記載内容は、本書に引用をもって繰込み記載されているものとみなされる。
本発明は、ε遷移を含まない非決定性有限オートマトン生成システム、ε遷移を含まない非決定性有限オートマトン生成方法、およびε遷移を含まない非決定性有限オートマトン生成プログラムを記録した記録媒体に関し、特に、ε遷移の除去を行わず直接生成できるε遷移を含まない非決定性有限オートマトン生成システム、ε遷移を含まない非決定性有限オートマトン生成方法、およびε遷移を含まない非決定性有限オートマトン生成プログラムに関する。
近年、文字列照合(パターンマッチ)を高速に行うため、例えば非特許文献1に示されるように、非決定性有限オートマトン(NFA:Non−deterministic Finite Automaton)を直接ハードウェア回路として回路化し、FPGA(Field−Programmable Gate Array)のような再構成可能なデバイス上に落とし込む手法が提案されている。
このようなハードウェアを用いたパターンマッチは、正規表現を用いて記述された検索対象パターンを表すNFAを生成し、それを直接回路化することで、並列動作の特性を活かした高速な処理が可能である。
一方で、例えば非特許文献1に示されるNFA回路は、1クロックサイクルあたり1文字(1 byte)しか処理することができないため、検索スループットは動作周波数に依存する(検索スループットT[Mbps]は、動作周波数M[MHz]と1クロックサイクルあたりの処理バイト数K[byte]を用いて、T=8×K×Mで算出できる)。
そこで、例えば非特許文献2、非特許文献3、特許文献1に示されるように、状態遷移の条件を複数文字(複数バイト)に拡張したNFAを生成し、これを回路化することで、1クロックサイクルあたりに処理できる文字数(バイト数)を増加させ、検索スループットの向上を行う手法も提案されている。
一般に、正規表現からNFAの変換では、
・正規表現から構文木(Syntax Tree)への変換、
・構文木からNFAへの変換
の2つの処理に分けることができる(例えば非特許文献4の第327頁参照)。
構文木からNFAへの変換では、4つの基本変換パターンを、構文木の各ノードに対して、再帰的に適用することで、変換が可能である。但し、構文木において連結(concatenation)を示すノードを‘・’とする。
これら4つの基本変換パターンを、図27、図28、図29、図30に示す。
図27は、構文木のノードが文字cである場合に適用される基本変換パターンである。
図28は、構文木のノードが‘|’(ORを意味するメタキャラクタ)の場合に適用される基本変換パターンである。
図29は、構文木のノードが‘・’(連結)の場合に適用される基本変換パターンである。
図30は、構文木のノードが‘*’(0回以上マッチを意味するメタキャラクタ)の場合に適用される基本変換パターンである。
図27乃至図30において、
、Nは正規表現、
状態Iは開始状態、
状態Fは終了状態、
εはε遷移(ε−transition:イプシロン遷移)
を意味する。
ε遷移は、入力を待たずに次の状態へ遷移することができる特殊な遷移である。
図27から図30の4つの基本変換パターンを適用して生成されるNFAにも、ε遷移が存在することになる。以下、ε遷移を含むNFAを「ε−NFA」と呼び、ε遷移を持たないNFAと区別する。
通常、上記のメタキャラクタ以外をもつ正規表現は、これらの4つの基本変換パターンを用いた正規表現に書き直すことができるため、構文木を生成する前の段階で、書き直しておく必要がある。
例えば、
“N?”(0回か1回のみマッチする)は、“(N|)”
に書き直すことができる。また、
“N+”(1回以上マッチする)は、“N*”
に書き直すことができる。
上述したようなハードウェアによるパターンマッチ回路では、NFAの各状態が、フリップフロップを用いて実現され、動作クロックが処理のトリガとなるため、入力を待たずに遷移が可能なε遷移は、実現することができない。つまり、ハードウェアへ埋め込むNFAを生成する際には、
・正規表現から構文木へ変換し、
・該構文木から変換したε−NFAに対してε遷移を除去する、
必要がある。
このε遷移を除去する処理は、ε閉包(ε−closure)と呼ばれる。例えば状態qのε閉包は、qからε遷移のみを伝って到達できる状態全体の集合を意味する。
正規表現の長さ(文字数)をnとすると、構文木からε−NFAへの変換には、O(n)の処理が必要である。また、状態数nのε−NFAのε閉包を行うには、O(n)の処理が必要である、ことが知られている(非特許文献5)。
特開2007−142767号公報 リーティンダー・シドフ(Reetinder Sidhu)、ビクトル・ケー・プラサナ(Viktor K. Prasanna)、プロシーディング・オブ・ザ・ナインス・アニュアル・アイ・イー・イー・イー・シンポジウム・オン・フィールドプログラマブル・カスタム・コンピューティング・マシーンズ(Proceedings of the 9th Annual IEEE Symposium on Field−Programmable Custom Computing Machines)、2001年、227〜238頁 クリストファー・アール・クラーク(Christopher R. Clark)、デービッド・イー・シメール(David E. Schimmel)、 プロシーディング・オブ・ザ・トゥエルフス・アニュアル・アイ・イー・イー・イー・シンポジウム・オン・フィールドプログラマブル・カスタム・コンピューティング・マシーンズ(Proceedings of the 12th Annual IEEE Symposium on Field−Programmable Custom Computing Machines)、2004年、249〜257頁 山垣 則夫、市野 清久、神谷 聡史、2007年電子情報通信学会総合大会講演論文集(Proceedings of the 2007 IEICE General Conference)、2007年、D−18−2(188頁) 近藤 嘉雪、「定本Cプログラマのためのアルゴリズムとデータ構造」、ソフトバンクパブリッシング、1998年、 297〜330頁 訳者 野崎 昭弘、高橋 正子、町田 元、山崎 秀記、ジョン・イー・ホップクロフト(John E. Hopcroft)、ラジーブ・モトワニ(Rajeev Motowani)、ジェフリー・ディー・ウルマン(Jeffrey D. Ullman)、Information & computing−3 オートマトン 言語理論 計算論I [第2版]、サイエンス社、2003年、80〜90、111〜116、168〜171頁
上記特許文献1、非特許文献1〜5の全開示内容は、その引用をもって本書に繰込み記載する。以下は、本発明者による分析による。
ハードウェアに直接組み込んでパターンマッチングを行う際の、正規表現から生成した構文木からε遷移のないNFAへの変換方法には、以下のような問題点がある。なお、“ε遷移のない”とは、ε遷移に係る一般的な処理を含まないことを表しており、本願においては、以下の説明において、“ε遷移を含まない”と表現する。
第1の問題点は、正規表現からε遷移を含まないNFAへの変換に時間を要する、ということである。従来の手法を用いて、
・ 構文木からε−NFAを生成し、
・ ε−NFAのε閉包の計算を行う
ことで、ハードウェアへ組み込むためのε遷移を含まないNFAを生成する場合、正規表現の数(検索対象となるパターン数)が多ければ多いほど、NFAの生成処理に時間がかかる。その理由は、正規表現の長さ(文字数)をnとしたとき、従来の手法では、ε−NFAのε閉包の計算にO(n)の処理量が必要であるためである。
第2の問題点は、変換対象の正規表現をNFAに変換する際には、変換対象の正規表現を、文字、‘|’(OR)、‘*’(0回以上マッチ)のメタキャラクタのみを含む正規表現に予め書き直してから、連結を意味する記号‘・’と空を意味する記号‘Φ’をノードに加えた構文木に変換する必要がある、ということである。なお、Nは任意の正規表現とする。また、空を意味する記号とは、正規表現“N?”をメタキャラクタ‘|’を用いた正規表現に書き換えた場合に、“(N|Φ)”(Nまたは空)として用いるものとする。
その理由は、構文木の各ノードに対して、再帰的に適用するε−NFAの基本変換パターンは、図27乃至図30に示した4つであるため、正規表現を、これら4つの基本変換パターンを当てはめることができる形式に変換する必要があるからである。
また、第2の問題点として挙げたメタキャラクタのうち、正規表現“N+”を、“NN*”に予め書き直して構文木に変換し、さらに構文木をNFAに変換した場合、正規表現Nを示すNFAが2回現れることになる。このため、正規表現Nを表すNFAが冗長であり、状態数が増加してしまう。これが第3の問題点である。
したがって、本発明の目的は、正規表現からε遷移を含まないNFAへの変換を高速に行うためのNFA生成システム、生成方法、および生成プログラムを提供することにある。
本発明の他の目的は、予め書き換えが必要なメタキャラクタのうち、‘?’(0回、又は1回のみマッチ)と‘+’(1回以上マッチ)を含む正規表現の構文木への変換の際に、メタキャラクタの書き換えを不要とするNFA生成システム、生成方法、および生成プログラムを提供することにある。
本発明のさらに他の目的は、メタキャラクタ‘+’(1回以上マッチ)を用いた正規表現に対し、冗長な状態数を増加させることのないNFA生成システム、生成方法、および生成プログラムを提供することにある。
本発明に係る、ε遷移を含まないNFA生成システムにおいては、構文木で表現された正規表現から、ε遷移を含まないNFAを、直接生成する。
本発明においては、文字、又は、選択、0回以上マッチを示す2種類のメタキャラクタ(‘|’、‘*’)、のみで記述された正規表現から生成し、連結を示す記号‘・’と空を示す記号‘Φ’を加えたノードをもつ構文木の構成を示すデータ構造を記憶しておく構文木記憶部と、
構文木の根ノードの種別を判別することで生成するε遷移を含まないNFAの初期設定を行う初期設定手段と、
NFAの構成を示すデータ構造を記憶するNFA記憶部と、
前記構文木の各ノードに対する変換処理(各ノードに対してε遷移を含まないNFAへの変換パターンを適用する処理)を行うことで、ε遷移を含まないNFAを生成するNFA変換手段と、を有する。
このような構成を採用し、入力された構文木の各ノードに応じて、文字、又はメタキャラクタ(‘|’、‘*’)、連結を示す記号‘・’、空を表す記号‘Φ’に対する変換処理を行うことで、本発明の第1の目的を達成することができる。
また、本発明においては、文字、又は、選択、0回又は1回のみマッチ、1回以上マッチ、0回以上マッチをそれぞれ示す4種類のメタキャラクタ(‘|’、‘?’、‘+’、‘*’)のみで記述された正規表現から生成し、連結を示す記号‘・’をノードに加えた構文木の構成を示すデータ構造を記憶しておく構文木記憶部と、
構文木の根ノードの種別を判別することで生成するε遷移を含まないNFAの初期設定を行う初期設定手段と、
NFAの構成を示すデータ構造を記憶するNFA記憶部と、
上記構文木の各ノードに対する変換処理を行うことで、ε遷移を含まないNFAを生成するNFA変換手段と、
を有する。このような構成を採用し、入力された構文木の各ノードに応じて、文字、又は、選択、0回又は1回のみマッチ、1回以上マッチ、0回以上マッチをそれぞれ示す4種のメタキャラクタ(‘|’、‘?’、‘+’‘*’)、連結を示す記号‘・’に対する変換処理(各ノードに対してε遷移を含まないNFAへの変換パターンを適用する処理)を行うことで、前記各目的を達成することができる。
本発明によれば、正規表現からε遷移を含まないNFAへの変換を高速に行うことができる。
本発明によれば、正規表現からNFAへの変換に際し、正規表現における‘?’(0回、又は1回のみマッチ)と‘+’(1回以上マッチ)のメタキャラクタの書き換えを不要としている。
本発明によれば、正規表現におけるメタキャラクタ‘+’(1回以上マッチ)を用いた正規表現を表すNFAにおいて、冗長な状態数の増加を抑止することができる。
本発明の第1の実施の形態の構成を示すブロック図である。 本発明の第1の実施の形態の動作を示す流れ図である。 正規表現“ab*(c|d)e?f(gh)+i”から変換した構文木の例を示す図である。 NFAのデータ構造の例を示す図である。 図2におけるステップA4を示す流れ図である。 図5におけるステップB3を示す流れ図である。 図5におけるステップB5を示す流れ図である。 図5におけるステップB5により生成される“N”に対するNFAの変換パターンを表す図(N、Nは正規表現)である。 図5におけるステップB7を示す流れ図である。 図5におけるステップB7により生成される“(N|N)”に対するNFAの変換パターンを表す図(N、Nは正規表現)である。 図5におけるステップB9を示す流れ図である。 図5におけるステップB9により生成される“N*”に対するNFAの変換パターンを表す図(Nは正規表現)である。 図5におけるステップB11を示す流れ図である。 図5におけるステップB11により生成される“(N|Φ)”に対するNFAの変換パターンを表す図(Nは正規表現、Φは空を示す)である。 本実施の形態により生成される正規表現“ab*(c|d)e?f(gh)+i”に対するε遷移を含まないNFAを表す図である。 本発明の第2の実施の形態の構成を示すブロック図である。 本発明の第2の実施の形態の動作を示す流れ図である。 正規表現“ab*(c|d)e?f(gh)+i”から変換した構文木の例を示す図である。 図17におけるステップA6を示す流れ図である。 図19におけるステップB14を示す流れ図である。 図19におけるステップB16を示す流れ図である。 図19におけるステップB16により生成される“N+”に対するNFAの変換パターンを表す図(Nは正規表現)である。 本実施の形態により生成される正規表現“ab*(c|d)e?f(gh)+i”に対するε遷移を含まないNFAを表す図である。 本発明の第3の実施の形態の構成を示すブロック図である。 本発明の第3の実施の形態の動作を示す流れ図である。 本発明の第4の実施の形態の構成を示すブロック図である。 文字cに対するε−NFAの変換パターンを表す図である。 正規表現“(N|N)”に対するε−NFAの変換パターンを表す図(N、Nは正規表現)である。 正規表現“N”に対するε−NFAの変換パターンを表す図(N、Nは正規表現)である。 正規表現“N*”に対するε−NFAの変換パターンを表す図(Nは正規表現)である。
符号の説明
1 入力装置
2 データ処理装置
3 記憶装置
4 出力装置
5 データ処理装置
6 データ処理装置
7 データ処理装置
8 NFA変換プログラム
21 初期設定手段
22 NFA変換手段
23 初期設定手段
24 NFA変換手段
25 構文木変換手段
31 構文木記憶部
32 NFA記憶部
次に、本発明の実施の形態について図面を参照して詳細に説明する。
<実施の形態1>
図1は、本発明の第1の実施の形態の構成を示すブロック図である。図1を参照すると、本発明の第1の実施の形態は、キーボード等の入力装置1と、プログラム制御により動作するデータ処理装置2と、情報を記憶する記憶装置3と、ディスプレイ装置や印刷装置等の出力装置4とを含む。
記憶装置3は、読み書き可能なメモリまたはハードディスク装置等の記憶デバイス(記憶媒体)によって構成され、記憶する対象別に構文木記憶部31と、NFA記憶部32とを備えている。
構文木記憶部31は、入力装置1から初期設定手段21に入力された正規表現の構文木を、リスト構造を持つデータ構造によって記憶する。
NFA記憶部32は、初期設定手段21、及びNFA変換手段22において、構文木記憶部31に記憶された変換対象の構文木から変換されたNFAを、リスト構造や行列形式等のデータ構造で記憶する。
データ処理装置2は、初期設定手段21と、NFA変換手段22とを備えている。ここで、手段とはそれぞれの処理機能を指す。
初期設定手段21は、入力装置1から入力された構文木の形式に変換された正規表現を読み込み、構文木記憶部31へ記憶させる。また、初期設定手段21は、生成するNFAの初期設定を、根ノードの種別(文字であるか、特定のメタキャラクタであるか、又は、連結を示す記号‘・’であるか)に応じて行い、初期設定を行ったNFAのデータ構造をNFA記憶部32へ記憶させる。
NFA変換手段22は、初期設定手段21から構文木を示すデータ構造を受け取る。また、NFA変換手段22は、NFA記憶部32からNFAを示すデータ構造を読み込み、初期設定手段21から受け取った構文木の各ノードに対して、ε遷移を含まないNFAへの変換パターンを適用し、ε遷移を含まないNFAへ変換する。ここで、本実施形態においても、“ε遷移を含まない”とは、ε遷移に係る一般的な処理を含まないことを意味する。
変換が終了すると、NFA変換手段22は、変換したNFAを示すデータ構造を、NFA記憶部32へ記憶させると共に、出力装置4へ出力する。
次に、図1、及び図2の流れ図を参照して、本発明の第1の実施の形態の動作について詳細に説明する。
入力装置1から構文木の形式で表現された正規表現は、初期設定手段21に供給される。
入力された構文木は、2種類のメタキャラクタ
‘|’(OR:選択)、
‘*’(0回以上マッチ)
のみを使った正規表現に予め書き換えられ、構文木に変換されているものとする。但し、この構文木では、連結(concatenation)を表す‘・’のノード、空を表す記号‘Φ’のノードが加えられているものとする。
また、構文木のデータ構造は、
・各ノードの種類(文字なのか、上記の2種類のどちらのメタキャラクタなのか、連結を示す記号‘・’なのか、又は空を示す記号‘Φ’なのか)、
・左の子ノードへのリスト、
・右の子ノードへのリスト(子ノードが1つの場合は、左右どちらかの子ノードに統一して管理する)をもつ。この構文木は、公知のデータ構造が用いられるため、詳細は省略する。
図3に、対象の正規表現を、
“ab*(c|d)e?f(gh)+i”
とした場合の構文木の概要を示す。この場合、上記の正規表現は、メタキャラクタ‘|’、‘*’のみを使った正規表現
“ab*(c|d)(e|)f(gh)(gh)*i”
に書き換えられた後、連結を示す記号‘・’と空を示す記号‘Φ’を使って図3に示す構文木に変換される。
初期設定手段21は、構文木データを受け取ると、構文木を示すデータ構造を、構文木記憶部31へ記憶させると共に、状態0と1を生成し、状態0をNFAの初期状態、状態1をNFAの終了状態とする(ステップA1)。
また、初期設定手段21は、入力された構文木の根ノードを処理ノード、初期状態Iを状態0、終了状態Fを状態1とする(ステップA1)。
根ノードが文字、メタキャラクタ‘|’、連結を示す記号‘・’のいずれかに当てはまるかをチェックする(ステップA2)。
根ノードがそれらのいずれにも当てはまらない場合には、状態1を変換後のNFAの初期状態でもあると設定する(ステップA3)。この場合、状態1は、変換後のNFAの初期状態かつ終了状態となる。
初期設定手段21は、上記の処理(ステップA1、ステップA2、ステップA3)が終了すると、生成したNFAを、NFA記憶部32へ記憶させる。そして、初期設定手段21は、処理終了の信号と共に、構文木記憶部31から構文木データを読み込んで、NFA変換手段22へと送信する。
ここで、初期設定手段21がNFA記憶部32へ記憶させるNFAは、
・遷移元の状態番号(状態ID)、
・遷移先の状態番号(状態ID)、
・遷移条件となる文字
をもつ。すなわち、ある状態に着目すると、その状態へ遷移してくる遷移元の状態が得られるようなデータ構造を有する。
NFAは、例えば図4に示すように、2次元配列とリンクが張られた構造体(Linked List)を用いたデータ構造で実現される。2次元配列NFA[i][j](i,j=0〜n)では、遷移元状態番号(添え字i)、遷移先状態番号(添え字j)で、任意の2つの状態間における遷移へのポインタが格納される。
遷移は、ラベル(遷移条件となる文字)と次の遷移へのポインタ(next)を有する。
また、行列形式で表現し、行番号iを遷移元の状態番号、列番号jを遷移先の状態番号とし、各要素において状態iから状態jへの遷移条件の文字を表すことで表現することもできる。なお、この場合、ある状態からある状態への複数の条件があれば、‘+’(例えば、文字‘a’と‘b’が遷移条件である場合は“a+b”で表す)で表し、遷移がなければ0で表す等、特定の定義が必要である。
続いて、NFA変換手段22は、初期設定手段21から、処理終了の信号と構文木データを受け取ると、NFA記憶部32から初期化を行ったNFAデータを読み込み、処理ノードである根ノードから、ノードの変換処理を行う(ステップA4)。
図5は、ステップA4のより詳細な動作を説明するための流れ図である。NFA変換手段22は、最初の処理ノードである根ノードをチェックする(ステップB1)。
根ノードが、文字である場合、文字に対する処理(ステップB2、ステップB3)、
連結を示す記号‘・’である場合、‘・’に対する処理(ステップB4、ステップB5)、
選択(OR)を示すメタキャラクタ‘|’である場合、‘|’に対する処理(ステップB6、ステップB7)、
0回以上マッチを示すメタキャラクタ‘*’である場合、‘*’に対する処理(ステップB8、ステップB9)、
空を示す記号‘Φ’である場合、‘Φ’に対する処理(ステップB10、ステップB11)
を行う。
いずれにも当てはまらない場合には、文法エラーとして、当該正規表現に対するNFAに対するエラー処理を行い(ステップB12)、ステップA4の処理を終了する。
図6は、図5のステップB3のより詳細な動作を説明するための流れ図である。NFA変換手段22は、現在の処理ノードをチェックし、そのノードが文字cである場合、設定されている初期状態Iから終了状態Fにラベルcの遷移を生成し(ステップC1)、文字cに対する処理(ステップB3)を終了する。
なお、ラベルcの遷移とは、入力文字がcである場合、状態Iから状態Fへ遷移することを意味する。この場合、ステップB3により初期状態I、終了状態Fの間に生成されるε遷移を含まないNFAは、図27と同様であり、これを文字c(ステップB3)における変換パターンと定義する。
図7は、図5のステップB5のより詳細な動作を説明するための流れ図である。NFA変換手段22は、現在の処理ノードをチェックし、そのノードが連結を示す記号‘・’である場合、新たな状態nを生成する(ステップD1)。ここで、nは状態を特定するIDを表し、状態IDの設定には既にある状態IDと重複しない限り特に制限はない。
本実施の形態においては、初期設定手段21にて、NFA全体の初期状態0と終了状態1を生成しているため、新たに状態2、状態3、のように連番の状態を生成するものとする。
続いて、ステップB5を処理する前に設定されている状態Iを初期状態I、ステップD1で生成された状態nを終了状態Fとする(ステップD2)。
処理ノードが‘・’である場合、必ず左右に子ノードをもつため、まず、当該処理ノードの左の子ノードを新たに処理ノードとして(ステップD2)、ノードの変換処理を行う(ステップA4)。
左の子ノードに対する変換処理が終了すると、ステップD1で生成した状態nを初期状態I、当該処理ノードである‘・’ノードの処理に入る前に設定されていた状態Fを終了状態Fとし、今度は、右の子ノードを新たな処理ノード(ステップD3)として、ノード変換処理を行う(ステップA4)。
右の子ノードの変換処理が終了すれば、‘・’に対する処理(ステップB5)を終了する。
図8は、初期状態I、終了状態F、‘・’ノードに対して適用するε遷移を含まないNFAの変換パターンを示す図である。図8において、Nは‘・’ノードの左の子ノードを根とする構文木が示す正規表現、Nは‘・’ノードの右の子ノードを根とする構文木が示す正規表現を意味する。
図9は、図5のステップB7のより詳細な動作を説明するための流れ図である。NFA変換手段22は、現在の処理ノードをチェックし、そのノードが、選択(OR)を示すメタキャラクタ‘|’である場合、左の子ノードを新たな処理ノードとして(ステップE1)、ノード変換処理を行う(ステップA4)。
なお、処理ノードが‘|’である場合、必ず、左右に子ノードをもつ。左の子ノードの変換処理が終了すると、今度は右の子ノードを新たな処理ノードとして(ステップE2)、ノード変換処理を行う(ステップA4)。右の子ノードの変換処理が終了すれば、‘|’に対する処理(ステップB7)(図5参照)を終了する。
なお、左右の子ノードに対する変換処理(ステップA4)を行う際の初期状態I、終了状態Fは、ステップB7(図5参照)に入る前に設定されていた初期状態I、終了状態Fと同じ状態である(ステップE1、ステップE2)。
図10は、初期状態I、終了状態F、‘|’ノードに対して適用するε遷移を含まないNFAの変換パターンを示す図である。図10において、N、Nはそれぞれ‘|’ノードの左の子ノードを根とする構文木が示す正規表現、右の子ノードを根とする構文木が示す正規表現を意味する。
図11は、ステップB9のより詳細な動作を説明するための流れ図である。NFA変換手段22は、現在の処理ノードをチェックし、0回以上マッチを示すメタキャラクタ‘*’である場合、当該処理ノードの子ノードを新たな処理ノードとして(ステップF1)、ノード変換処理を行う(ステップA4)。なお、‘*’のノードの子ノードは必ず1つである。
子ノードの変換処理が終了すると、終了状態Fに遷移してくる状態qに対して、状態qから初期状態Iへの遷移を生成する(ステップF2)。このとき、状態qから状態Iへの遷移ラベルは、状態qから状態Fへの遷移と同一のものとする。また、状態qは1つであるとは限らず、複数個存在する場合もある。
続いて、初期状態Iに遷移してくる状態pに対して、状態pから終了状態Fへの遷移を生成する(ステップF3)。
このとき、状態pから状態Fへの遷移ラベルは、状態pから状態Iへの遷移と同一のものとする。また、状態pは1つであるとは限らず、複数個存在する場合もあれば、存在しない場合もある。
状態pから状態Fへの遷移を生成した後、初期状態IがNFA全体の初期状態であるかをチェックする(ステップF4)。
状態IがNFA全体の初期状態である場合、終了状態FもNFA全体の初期状態とし(ステップF5)、‘*’に対する処理(ステップB9)を終了する。
図12は、初期状態I、終了状態F、‘*’ノードに対して適用するε遷移を含まないNFAの変換パターンを示す図である。図12において、Nは‘*’ノードの子ノードを根とする構文木が示す正規表現を意味する。状態pは、状態Iへラベルcでの遷移をもつ状態を示す。状態qは、状態Fへラベルcでの遷移をもつ状態を示す。ここでは、状態p、q共に1つである場合を示している。
図13は、ステップB11のより詳細な動作を説明するための流れ図である。NFA変換手段22は、現在の処理ノードをチェックし、空を示す記号‘Φ’である場合、ステップB9でのステップF3、ステップF4、ステップF5と同様、初期状態Iに遷移してくる状態pに対して、状態pから終了状態Fへの遷移を生成し(ステップF3)、初期状態IがNFA全体の初期状態であるか否かをチェックし(ステップF4)、状態IがNFA全体の初期状態である場合、終了状態FもNFA全体の初期状態とし(ステップF5)、‘Φ’に対する処理(ステップB11)を終了する。
なお、ステップF3、ステップF4、ステップF5については、ステップB9と同じ処理であるので、詳細な説明は省略する。
なお、空を示す記号‘Φ’は、0回、又は1回だけマッチを意味するメタキャラクタ‘?’を用いた正規表現“N?”を書き直した“(N|Φ)”で利用され、‘Φ’に対する処理(ステップB11)により、正規表現“(N|Φ)”、つまり、正規表現“N?”は、図14のようなε遷移を含まないNFAで生成され、これが空を示す記号‘Φ’に対して適用する変換パターンとなる。図14において、Nは正規表現“N?”を書き直した“(N|Φ)”における正規表現Nを意味する。また、図14の状態pは、状態Iへラベルcでの遷移をもつ状態を示す。ここでは、状態pは1つだけである場合を示している。
NFA変換手段22は、根ノードに対して上記のノード変換処理(ステップA4)を行うことで、構文木の全ノードに対して、再帰的にノード変換処理(ステップA4)を行うことができる。
全ノードに対するノード変換処理(ステップA4)が終了すると、全ての処理を終了する。
図15は、例として、正規表現“ab*(c|d)e?f(gh)+i”から変換した構文木(図3)から変換したε遷移を含まないNFAを示す図である。
NFA変換手段22は、全ての処理が終了すると、最終的なNFAデータをNFA記憶部32へ記憶させると共に、出力装置4へ出力する。
次に、本発明の第1の実施の形態の作用効果について説明する。
本発明の第1の実施の形態においては、NFA変換に、ε遷移を含まないNFAへの変換パターンを用いることにより、正規表現から変換した構文木を入力することで、直接、ε遷移を含まないNFAを生成することができる。
前述したとおり、従来の手法の場合、正規表現の長さ(文字数)をnとすると、正規表現から変換した構文木を経由してε遷移を含まないNFAへ変換するためには、構文木から、ε−NFAへの変換にO(n)、ε−NFAからε遷移を除去するのに、O(n)の処理が必要である。
これに対して、本実施の形態によるε遷移を含まないNFAへの変換手法を利用した場合、正規表現から変換した構文木の全ノード(ノード数n)に対して、ノード変換処理を行う。メタキャラクタ‘*’に対する処理では、初期状態I、又は終了状態Fへの遷移をもつ状態p、又はqの探索が、空を示す記号‘Φ’に対する処理では、初期状態Iへの遷移をもつ状態pの探索が必要となるが、本実施の形態では、NFAは、図4に示すように、遷移元の状態番号、遷移先の状態番号、遷移条件となる文字をもつデータ構造で実現される。つまり、遷移先の状態番号に着目することで、当該状態へ遷移してくる遷移元の状態、及びその遷移条件となる文字が得られるようなデータ構造であるため、遷移先の状態番号をキーとして探索することで、O(n)のステップで状態p、又はqの探索を行うことができる。構文木で表現された正規表現のノー度数は最大nであることを考慮すると、本実施の形態によれば、O(n)の処理で、構文木で表現された正規表現から、ε遷移を含まないNFAへの変換が可能となり、ε遷移を含まないNFAへの変換速度が向上する。
なお、上記実施の形態では、図4に示すようなデータ構造によってNFAを記憶しているが、ある状態に着目した場合に、その状態へ遷移してくる遷移元の状態とその遷移条件となる文字がO(n)(nは状態数)で探索できるようなデータ構造であればよい。
また、上記実施の形態では、入力された構文木データは、初期設定手段21によって構文木記憶部31へ記憶され、初期設定手段21の処理が終了する際に、再び、構文木記憶部31から読み出され、NFA変換手段22へと転送されるが、初期設定手段21は、入力された構文木データを構文木記憶部31へ記憶させ、これを参照しながら、初期設定処理を行ってもよい。
NFA変換手段22は、初期設定手段21から受け取った構文木データを用いて変換処理を行う。初期設定手段21は、初期設定手段21における処理が終了すると、処理が終了したことを示す信号のみをNFA変換手段22に送信し、NFA変換手段22は、構文木記憶部31から構文木データを参照しながら変換処理を行ってもよい。
同様に、上記実施の形態では、初期設定手段21によって設定されたNFAデータをNFA記憶部32へ記憶し、NFA変換手段22はそれを参照し、NFAデータを更新しながらNFAへの変換処理を行う。初期設定手段21は、初期設定の処理が終了すると、処理が終了したことを示す信号と共に、初期設定されたNFAデータをNFA変換手段22に送信し、NFA変換手段22は、そのデータをNFA記憶部32へ記憶し、NFA記憶部32へ変換途中のNFAデータを更新させながら変換処理を行ってもよい。
このように、構文木記憶部31、NFA記憶部32を備えることにより、入力装置1は、初期設定手段21の処理が終了するのを待つことなく新しい構文木データを入力することが可能である。同様に、初期設定手段21は、NFA変換手段22の処理が終了することを待つことなく、構文木記憶部31に新しい構文木データが存在すれば、次のNFA初期設定処理を開始することが可能であり、NFA変換手段22は、NFA記憶部32に新しい初期設定処理後のNFAデータが存在すれば、次のNFA変換処理を開始することができ、効率的なNFA変換処理を行うことが可能である。
<実施の形態2>
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。図16は、本発明の第2の実施の形態の構成を示すブロック図である。図16を参照すると、本発明の第2の実施の形態において、データ処理装置5は、初期設定手段23と、NFA変換手段24とを備えている。ここで、手段とはそれぞれの処理機能を指す。本実施の形態は、図1に示した前記第1の実施の形態のデータ処理装置2の初期設定手段21、NFA変換手段22を、初期設定手段23、NFA変換手段24に置き換えたものである。その他は、前記第1の実施の形態と同じである。
初期設定手段23は、入力装置1から入力された構文木の形式に変換された正規表現を読み込み、構文木記憶部31へ記憶させると共に、生成するNFAの初期設定を根ノードの種別(文字かある特定のメタキャラクタか)に応じて行い、初期設定を行ったNFAのデータ構造をNFA記憶部32へ記憶させる。
NFA変換手段24は、初期設定手段23から構文木を示すデータ構造を受け取ると共に、NFA記憶部32から、NFAを示すデータ構造を読み込む。
NFA変換手段24は、構文木の各ノードに対して、ε遷移を含まないNFAへの変換パターンを適用し、ε遷移を含まないNFAへ変換する。ここで、本実施形態においても、“ε遷移を含まない”とは、ε遷移に係る一般的な処理を含まないことを意味する。変換が終了すると、NFA変換手段24は、変換したNFAを示すデータ構造をNFA記憶部32へ記憶させると共に、出力装置4へ出力する。
次に、図16、及び図17を参照して本発明の第2の実施の形態の動作について詳細に説明する。
入力装置1から構文木の形式で表現された正規表現は初期設定手段23に供給される。
入力された構文木は、前記第1の実施形態の2種類のメタキャラクタ(選択‘|’、0回以上マッチ‘*’)に、‘?’(0回、又は1回のみマッチ)、‘+’(1回以上マッチ)の2種類を加えた4種類のメタキャラクタ、‘|’、‘?’、‘+’、‘*’のみを使った正規表現に予め書き換えられ、構文木に変換されたものとする。但し、この構文木では、連結(concatenation)を表す‘・’のノードが加えられているものとする。また、データ構造は、前記第1の実施の形態と同じであるため、説明は省略する。
図18に、正規表現を“ab*(c|d)e?f(gh)+i”とした場合の構文木の概要を示す。
初期設定手段23は、構文木データを受け取ると、構文木を示すデータ構造を構文木記憶部31へ記憶させると共に、状態0と1を生成し、状態0をNFAの初期状態、状態1をNFAの終了状態とする(ステップA1)。
また、初期設定手段23は、入力された構文木の根ノードを処理ノード、初期状態Iを状態0、終了状態Fを状態1とし(ステップA1)、その根ノードが文字、メタキャラクタ‘|’、‘+’、連結を示す記号‘・’のいずれかに当てはまるかをチェックする(ステップA5)。
根ノードがそれらのいずれにも当てはまらない場合には、状態1を変換後のNFAの初期状態でもあると設定する(ステップA3)。この場合、状態1は、変換後のNFAの初期状態かつ終了状態となる。
初期設定手段23は、上記の処理(ステップA1、ステップA5、ステップA3)が終了すると、生成したNFAをNFA記憶部32へ記憶させる。また、初期設定手段23は、処理終了の信号と共に構文木記憶部31から構文木データを読み込んで、NFA変換手段24へ送信する。NFA記憶部32へ記憶させるNFAは、前記第1の実施の形態と同じデータ構造(図4に示した2次元配列と線形リスト)で実現できるため、詳細な説明を省略する。
続いて、NFA変換手段24は、初期設定手段23から処理終了の信号と構文木データを受け取ると、処理ノードである根ノードからノード変換処理を行う(ステップA6)。
図19は、ステップA6のより詳細な動作を説明するための流れ図である。NFA変換手段24は、第1の実施の形態のステップA4のノード変換処理と同様に、処理ノードのチェック(ステップB1)を行い、処理ノードが文字、連結を示す記号‘・’、又はメタキャラクタ‘|’、‘*’のいずれかであれば、それぞれに対応する処理を行う(ステップB2、ステップB3、ステップB4、ステップB5、ステップB6、ステップB7、ステップB8、ステップB9)。
また、NFA変換手段24は、処理ノードが、0回、又は1回のみマッチを示すメタキャラクタ‘?’である場合、‘?’に対する処理(ステップB13、ステップB14)を行い、処理ノードが、1回以上マッチを示すメタキャラクタ‘+’である場合、‘+’に対する処理(ステップB15、ステップB16)を行う。
上記のいずれにも当てはまらない場合は、文法エラーとして、当該正規表現に対するNFAに対するエラー処理を行う(ステップB12)。
なお、ステップB1からステップB9、及びステップB12については、第1の実施の形態と同じであるため、詳細な説明は省略する。
図20は、ステップB14のより詳細な動作を説明するための流れ図である。NFA変換手段24は、現在の処理ノードをチェックし、そのノードが0回、又は1回マッチを示すメタキャラクタ‘?’である場合、当該処理ノードの子ノードを新たな処理ノードとして(ステップF1)、ノード変換処理を行う(ステップA6)。
なお、‘?’のノードの子ノードは必ず1つである。
子ノードの変換処理が終了すると、初期状態Iに遷移してくる状態pに対して、状態pから終了状態Fへの遷移を生成し、初期状態IがNFA全体の初期状態である場合、終了状態FもNFA全体の初期状態とし(ステップF3、ステップF4、ステップF5)、‘?’に対する処理(ステップB14)を終了する。なお、ステップF1、ステップF3、ステップF4、ステップF5は第1の実施の形態と同じであるので詳細な説明は省略する。また、初期状態I、終了状態F、‘?’ノードに対して適用するε遷移を含まないNFAの変換パターンは図14と同じである。また、この場合、図14におけるNは‘?’ノードの子ノードを根とする構文木が示す正規表現を意味する。
図21は、ステップB16のより詳細な動作を説明するための流れ図である。NFA変換手段24は、現在の処理ノードをチェックし、そのノードが1回以上マッチを示すメタキャラクタ‘+’である場合、当該処理ノードの子ノードを新たな処理ノードとして(ステップF1)、ノード変換処理を行う(ステップA6)。
なお、‘+’のノードの子ノードは必ず1つである。
子ノードの変換処理が終了すると、終了状態Fに遷移してくる状態qに対して、状態qから初期状態Iへの遷移を生成し(ステップF2)、‘+’に対する処理(ステップB16)を終了する。
なお、ステップF1、ステップF2は、第1の実施の形態と同じであることから、詳細な説明は省略する。
図22は、初期状態I、終了状態F、‘+’ノードに対して適用するε遷移を含まないNFAの変換パターンを示す図である。図22において、Nは‘+’ノードの子ノードを根とする構文木が示す正規表現を意味し、状態qは状態Fへラベルcでの遷移をもつ状態を示す。ここでは、状態qが1つである場合を示している。なお、第2の実施の形態においては、各処理ステップ中に行うノード変換処理は全てノード変換処理(ステップA6)であるものとする。
NFA変換手段24は、根ノードに対して上記のノード変換処理(ステップA6)を行うことで、構文木の全ノードに対して再帰的にノード変換処理(ステップA6)を行うことができ、全ノードに対するノード変換処理(ステップA6)が終了すると、全ての処理を終了する。
図23は、例として、正規表現“ab*(c|d)e?f(gh)+i”から変換した構文木(図18)をNFAに変換した際の概念を示す図である。NFA変換手段24は、全ての処理が終了すると最終的なNFAデータをNFA記憶部32へ記憶させると共に、出力装置4へ出力する。
次に、本発明の第2の実施の形態の作用効果について説明する。
本発明の第2の実施の形態では、前記第1の実施の形態と同様、NFA変換にε遷移を含まないNFAへの変換手段(変換パターン)を用いることにより、正規表現から構文木を経由して直接ε遷移を含まないNFAを生成できる上、その処理はO(n)の処理であることから、NFAへの変換速度が向上する。
また、前記第1の実施の形態とは異なり、本発明の第2の実施の形態では、2種類のメタキャラクタ‘|’、‘*’に、2種類のメタキャラクタ‘?’、‘+’を加えた、合計4種類のメタキャラクタと、連結を示す記号‘・’をノードとして利用した構文木に対して、直接ε遷移を含まないNFAに変換することができる。
特に、メタキャラクタ‘+’を用いた正規表現の場合、従来、“N+”を“N*”として、変換する必要があったため、正規表現“N”を表す部分の状態が重複して生成されていたが、本実施の形態では、この書き換えが不要であるために、メタキャラクタ‘+’を用いた正規表現部分の状態数の増加を防ぐことができる。
なお、本発明の第2の実施の形態では、前記第1の実施の形態と同様、図4に示すようなデータ構造によってNFAを記憶しているが、nを状態数とすると、ある状態に着目した場合にその状態へ遷移してくる遷移元の状態とその遷移条件となる文字がO(n)で探索できるようなデータ構造であれば良い。
また、本実施の形態では、入力された構文木データは、初期設定手段23によって構文木記憶部31へ記憶され、初期設定手段23の処理が終了する際に、再び構文木記憶部31から読み出され、NFA変換手段24へと転送されるが、初期設定手段23は、入力された構文木データを構文木記憶部31へ記憶させ、これを参照しながら初期設定手段23の処理を行ってもよい。
さらに、NFA変換手段24は、初期設定手段23から受け取った構文木データを用いて変換処理を行うが、初期設定手段23は、初期設定手段23における処理が終了すると、処理が終了したことを示す信号のみを、NFA変換手段24に送信し、NFA変換手段24は、構文木記憶部31から構文木データを参照しながら変換処理を行ってもよい。
同様に、本実施の形態においては、初期設定手段23によって設定されたNFAデータをNFA記憶部32へ記憶し、NFA変換手段24は、それを参照し、NFAデータを更新しながらNFAへの変換処理を行うが、初期設定手段23は、初期設定の処理が終了すると、処理が終了したことを示す信号と共に、初期設定されたNFAデータをNFA変換手段24に送信し、NFA変換手段24は、そのデータをNFA記憶部32へ記憶し、NFA記憶部32へ変換途中のNFAデータを更新させながら変換処理を行ってもよい。
このように、構文木記憶部31、NFA記憶部32を備えることにより、第1の実施の形態と同様、入力装置1、初期設定手段23、NFA変換手段24は、それぞれ他の手段における処理の終了を待たず、新規データがあれば次の処理を開始することができ、効率的なNFA変換処理を行うことが可能である。
<実施の形態3>
次に、本発明の第3の実施の形態について説明する。図24は、本発明の第3の実施の形態の構成を示すブロック図である。図24を参照すると、本発明の第3の実施の形態において、データ処理装置6は、構文木変換手段25と、初期設定手段21と、NFA変換手段22とを備えている。ここで、手段とはそれぞれの処理機能を指す。本実施の形態は、図1の前記第1の実施の形態におけるデータ処理装置2に、構文木変換手段25が追加されている。その他は、前記第1の実施の形態と同じである。
構文木変換手段25は、入力装置1から入力された変換対象の正規表現を読み込み、‘|’(選択)、‘*’(0回以上マッチ)の2種類のメタキャラクタのみを使った正規表現に書き換える。その後、正規表現を構文木に変換し、構文木変換終了を意味する信号と共に初期設定手段21へ送信する。なお、この構文木は、連結を表す記号‘・’と空を表す記号‘Φ’をノードとして利用する。
初期設定手段21が構文木変換手段25から処理終了を意味する信号と構文木データを受け取った後は、前記第1の実施の形態と同じであるため、説明は省略する。
次に、図24、及び図25を参照して、本発明の第3の実施の形態の動作について詳細に説明する。
本実施の形態においては、入力装置1からは、正規表現そのものが入力され、入力された正規表現は構文木変換手段25に供給される。
構文木変換手段25は、入力された正規表現を、2種類のメタキャラクタ‘|’(OR:選択)、‘*’(0回以上マッチ)のみを使った正規表現に書き換える。
構文木変換手段25は、正規表現の書き換えを行った後、該正規表現を構文木に変換し、構文木を示すデータ構造を処理が終了したことを示す信号と共に、初期設定手段21へ送信する(ステップA7)。なお、この構文木は、連結を表す記号‘・’と空を表す記号‘Φ’をノードとして利用する。正規表現を上記2種類のメタキャラクタのみを使った正規表現に書き換える処理においては、与えられた正規表現を‘・’と‘Φ’を使って書き換えた後(例えば、“ab?c”を“a・(b|Φ)・c”)に、構文木へ変換しても良いし、これらの記号を利用せずに正規表現に書き換えた後(例えば、“ab?c”を“a(b|)c”)、構文木への変換を行う際に、‘・’と‘Φ’の記号をノードとして加えても良い。また、‘・’は構文木への変換時に加え、‘Φ’は正規表現の書き換え時に加える、もしくは、その逆の変換時に加えるとしても良く、最終的に構文木に変換した時点で、‘・’と‘Φ’のノードが利用されていれば問題ない。
構文木を示すデータ構造は、第1の実施の形態と同じものであり、正規表現から構文木を生成する処理は、従来から用いられている手法を用いるので、ここではこれらの説明を省略する。例えば、正規表現“ab*(c|d)e?f(gh)+i”が入力された場合、図3に示すような構文木が生成される。
構文木変換手段25から、処理終了を意味する信号と構文木データを初期設定手段21が受け取った後、ステップA1以降の動作は、第1の実施の形態と同じ動作を行う。このため、詳細な説明は省略する。
次に、本発明の第3の実施の形態の作用効果について説明する。
本発明の第3の実施の形態においては、前記第1の実施の形態と同様、NFA変換に、ε遷移を含まないNFAへの変換(変換パターン)を用いることにより、正規表現から、構文木を経由して直接ε遷移を含まないNFAを生成できる。また、その処理は、O(n)の処理であることから、NFAへの変換速度が向上する。
本発明の第3の実施の形態においては、前記第1の実施の形態とは異なり、正規表現そのものを入力し、構文木を経由させることでε遷移を含まないNFAへ直接変換することができる。
なお、上記した第3の実施の形態においては、構文木変換手段25は、正規表現を構文木に変換した後、その構文木データを処理終了信号と共に、初期設定手段21へ送信していた。構文木変換手段25は、構文木への変換が終了すると、構文木データを構文木記憶部31へ記憶させ、初期設定手段21へは処理終了信号のみを送信し、初期設定手段21は、処理終了信号を受け取ると、構文木記憶部31から構文木データを読み込み、それ以降、第1の実施の形態と同じ動作を行うようにしてもよい。
さらに、上記した第3の実施の形態では、前記第1の実施の形態におけるデータ処理装置2の構成において、構文木変換手段25が新たに追加された構成であり、構文木変換手段25において、入力された正規表現を、2種類のメタキャラクタ‘|’、‘*’のみを使った正規表現に書き換える。これを、連結を示す記号‘・’と空を示す記号‘Φ’をノードとして利用する構文木に変換した後、初期設定手段21へ処理終了を意味する信号と共に、構文木データを送信し、ステップA7以降は、前記第1の実施の形態と同じ動作を行う。
上記した第3の実施の形態では、前記第2の実施の形態におけるデータ処理装置5の構成において、構文木変換手段25を新たに加え、構文木変換手段25において、入力された正規表現を4種類のメタキャラクタ‘|’、‘?’、‘+’、‘*’のみを使った正規表現に書き換える。これを、連結を示す記号‘・’をノードとして利用する構文木に変換した後、処理終了を意味する信号と共に、構文木データを初期設定手段23へ送信するステップA7を行った後、前記第2の実施の形態と同じ動作を行ってもよい。なお、この際、正規表現を上記4種類のメタキャラクタのみを使った正規表現に書き換える処理においては、与えられた正規表現を‘・’を使って書き換えた後(例えば、“ab?c”を“a・b?・c”)に、構文木へ変換しても良いし、これらの記号を利用せず、構文木への変換を行う際に、‘・’の記号をノードとして加えても良い。最終的に構文木に変換した時点で、‘・’のノードが利用されていれば問題ない。
<実施の形態4>
次に、本発明の第4の実施の形態について説明する。図26は、本発明の第4の実施の形態の構成を示すブロック図である。図26を参照すると、本発明の第4の実施の形態は、前記第1、第2、第3の実施の形態と同様に、入力装置1、データ処理装置7(2、5、6)、記憶装置3、出力装置4を備える。本実施の形態においては、前記第1の実施の形態のデータ処理装置2の初期設定手段21、NFA変換手段22、あるいは、前記第2の実施の形態のデータ処理装置5の初期設定手段23、NFA変換手段24、前記第3の実施の形態のデータ処理装置6の初期設定手段21、NFA変換手段22、構文木変換手段25の処理を、データ処理装置で実行されるNFA変換プログラム8で実現したものである。
NFA変換プログラム8は、データ処理装置7に読み込まれ、データ処理装置7の動作を制御し、記憶装置3に、構文木記憶部31とNFA記憶部32を生成する。
データ処理装置7は、NFA変換プログラム8の制御により、第1、第2、及び第3の実施の形態におけるデータ処理装置2、5、及び6による処理と同一の処理を実行する。
上記した本実施形態によれば、以下のような効果を奏する。
本実施形態によれば、正規表現から構文木を経由し、ε遷移を含まないNFA変換を高速に処理できる。
すなわち、上記した本実施の形態においては、NFA変換にε遷移を含まないNFAへの変換手段(変換パターン)を適用する上、遷移元の状態番号、遷移先の状態番号、遷移条件となる文字を有し、nを状態数とすると、ある状態に着目した場合にその状態へ遷移してくる遷移元の状態がO(n)で探索できるようなデータ構造を用いてNFAへの変換を行うことで、従来の手法では必要であったε遷移の除去(ε−closure)を行う必要がなく、正規表現から構文木を経由して直接ε遷移を含まないNFAを生成できるためである。なお、正規表現の長さ(文字数)をnに対して、従来の手法を利用した場合にはO(n)の処理がかかり、本発明を用いた場合には、O(n)の処理でNFA変換が可能である。
また、本実施形態によれば、メタキャラクタ‘?’、‘+’に対する変換パターンを適用することにより、正規表現から構文木への変換の際に、これら2種類のメタキャラクタに対する書き換えは必要ない。
従来の正規表現からNFAへの変換においては、正規表現から構文木に変換する際に、対象の正規表現を、メタキャラクタ‘|’、‘*’の2種類のみを用いた正規表現へまず書き換えてから、連結を示す記号‘・’をノードとして利用する構文木への変換が必要であった。本実施の形態によれば、メタキャラクタ‘?’、‘+’に対する変換パターンを用いることができるため、構文木においてもメタキャラクタ‘?’、‘+’がノードとして現れてもよく、ノード変換処理に、それぞれの変換パターンを適用することで、直接ε遷移を含まないNFAへの変換が可能である。
本実施形態によれば、メタキャラクタ‘+’に対する変換パターンを適用することにより、生成されたNFAの状態数が削減できる。
従来の手法では、“N+”のような正規表現を変換する場合には、“NN*”に書き換えてから構文木を生成する必要があり、その結果、Nで表される正規表現を示すNFAが2回現れていた。本実施の形態によれば、メタキャラクタ‘+’に対する変換パターンを適用することにより、Nで表される正規表現を示すNFAが1回だけ現れる。つまり、“N+”で表される正規表現Nに含まれる状態数だけ、最終的に生成されるNFAから状態が削減できる。
本発明は、正規表現を用いたパターンマッチング処理を行うためのε遷移を含まないNFAを高速に生成するためのプログラムといった用途に適用できる。
また、NFAをハードウェア回路化することで、正規表現を用いた高速なパターンマッチング処理を行うハードウェア回路生成のためのNFAの生成システム、生成プログラムといった用途に適用できる。
さらに、パソコンやワークステーションに搭載されているソフトウェアベースでのパターンマッチング処理におけるNFA生成にも適用できる。これら上記の場合において、当該情報処理装置内に供給されたコンピュータ・プログラムは、読み書き可能なメモリまたはハードディスク装置等の記憶デバイス(記憶媒体)に格納すれば良い。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコード或いは記憶媒体によって構成される。
本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。

Claims (21)

  1. ε遷移を含まない非決定性有限オートマトンを、構文木で表現された正規表現に基づいて直接生成するNFA変換手段を備えた、ことを特徴とするε遷移を含まない非決定性有限オートマトン生成システム。
  2. 構文木で表現された正規表現を、構文木で表現された正規表現の各ノードの種別に応じて、ε遷移を含まない非決定性有限オートマトンに変換するNFA変換手段を備え、
    前記非決定性有限オートマトンは、そのデータ構造が、
    遷移元の状態と、
    遷移先の状態と、
    遷移条件とを含む、
    ことを特徴とするε遷移を含まない非決定性有限オートマトン生成システム。
  3. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木として記憶する構文木記憶手段と、
    前記構文木記憶手段に記憶された構文木の根ノードの種別に応じて、非決定性有限オートマトンの初期設定を行う初期設定手段と、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへ変換を行うNFA変換手段と、
    前記NFA変換手段による変換途中、及び、変換後の非決定性有限オートマトンを記憶するNFA記憶手段と、
    を備えたことを特徴とするε遷移を含まない非決定性有限オートマトン生成システム。
  4. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木へ変換し、
    前記変換した構文木を前記構文木記憶手段に記憶する構文木変換手段を備えた、
    ことを特徴とする請求項3記載のε遷移を含まない非決定性有限オートマトン生成システム。
  5. 前記NFA変換手段は、前記構文木記憶手段に記憶された前記構文木と、前記NFA記憶手段に記憶された非決定性有限オートマトンとを参照し、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへの変換パターンを適用することにより、ε遷移を含まない非決定性有限オートマトンへ変換し、
    生成した非決定性有限オートマトンを前記NFA記憶手段に記憶するとともに、出力装置から出力する、
    ことを特徴とする請求項3又は4に記載のε遷移を含まない非決定性有限オートマトン生成システム。
  6. 前記構文木で表現された正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    空を示す記号、
    のうちいずれか一部又は全てを用いて記述されている、ことを特徴とする請求項1乃至5のいずれか1項に記載のε遷移を含まない非決定性有限オートマトン生成システム。
  7. 前記構文木で表現された正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回、又は1回のみマッチを示すメタキャラクタ、
    1回以上マッチを示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    のうちいずれか一部又は全てを用いて記述されている、ことを特徴とする請求項1乃至5のいずれか1項に記載のε遷移を含まない非決定性有限オートマトン生成システム。
  8. ε遷移を含まない非決定性有限オートマトンを、構文木で表現された正規表現に基づいて直接生成する、ことを特徴とするε遷移を含まない非決定性有限オートマトン生成方法。
  9. 構文木で表現された正規表現を、構文木で表現された正規表現の各ノードの種別に応じて、ε遷移を含まない非決定性有限オートマトンに変換し、
    前記非決定性有限オートマトンは、そのデータ構造が、
    遷移元の状態と、
    遷移先の状態と、
    遷移条件とを有する、
    ことを特徴とするε遷移を含まない非決定性有限オートマトン生成方法。
  10. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木として記憶媒体に記憶しておき、
    前記記憶媒体に記憶されている構文木の根ノードの種別に応じて、非決定性有限オートマトンの初期設定を行い、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへ直接変換を行い、
    変換途中、及び変換後の非決定性有限オートマトンを記憶媒体に記憶する、
    ことを特徴とするε遷移を含まない非決定性有限オートマトン生成方法。
  11. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木へ変換し、
    変換した前記構文木を記憶媒体に記憶し、
    前記記憶されている構文木の根ノードの種別に応じて、非決定性有限オートマトンの初期設定を行い、
    構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへ直接変換を行い、
    変換途中、及び変換後の非決定性有限オートマトンを記憶媒体に記憶する、
    ことを特徴とするε遷移を含まない非決定性有限オートマトン生成方法。
  12. 前記記憶媒体に記憶された前記構文木と非決定性有限オートマトンとを参照し、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへの変換パターンを適用することにより、ε遷移を含まない非決定性有限オートマトンへ変換し、
    生成した非決定性有限オートマトンを前記記憶媒体に記憶するとともに、出力装置から出力する、
    ことを特徴とする請求項10又は11に記載のε遷移を含まない非決定性有限オートマトン生成方法。
  13. 構文木で表現された前記正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    空を示す記号、
    のうちいずれか一部又は全てを用いて記述されている、ことを特徴とする請求項8乃至12のいずれか1項に記載のε遷移を含まない非決定性有限オートマトン生成方法。
  14. 前記構文木で表現された正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回、又は1回のみマッチを示すメタキャラクタ、
    1回以上マッチを示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    のうちいずれか一部又は全てを用いて記述されている、ことを特徴とする請求項8乃至12のいずれか1項に記載のε遷移を含まない非決定性有限オートマトン生成方法。
  15. ε遷移を含まない非決定性有限オートマトンを、構文木で表記された正規表現に基づいて直接生成する処理を、コンピュータに実行させるプログラム。
  16. 構文木で表現された正規表現を、構文木で表現された正規表現の各ノードの種別に応じて、ε遷移を含まない非決定性有限オートマトンに変換する処理をコンピュータに実行させ、
    変換した非決定性有限オートマトンは、そのデータ構造が、
    遷移元の状態と、
    遷移先の状態と、
    遷移条件とを有する、
    ことを特徴とするプログラム。
  17. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木として記憶媒体に記憶しておく処理と、
    前記記憶媒体に記憶されている構文木の根ノードの種別に応じて、非決定性有限オートマトンの初期設定を行う処理と、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへ直接変換する処理と、
    その変換途中、及び変換後の非決定性有限オートマトンを記憶媒体に記憶する処理と、
    をコンピュータに実行させるプログラム。
  18. 正規表現を、文字と、予め定められたメタキャラクタと記号を用いた構文木へ変換し、
    前記変換した構文木を記憶媒体に記憶する処理と、
    前記記憶されている構文木の根ノードの種別に応じて、非決定性有限オートマトンの初期設定を行う処理と、
    構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへ直接変換を行う処理と、
    その変換途中、及び変換後の非決定性有限オートマトンを記憶媒体に記憶する処理と、
    をコンピュータに実行させるプログラム。
  19. 前記記憶媒体に記憶された前記構文木と非決定性有限オートマトンとを参照し、
    前記構文木の各ノードに対して、ε遷移を含まない非決定性有限オートマトンへの変換パターンを適用して、ε遷移を含まない非決定性有限オートマトンへ変換し、
    生成した非決定性有限オートマトンを記憶媒体に記憶するとともに出力する処理を、
    コンピュータに実行させることを特徴とする請求項17又は18に記載のプログラム。
  20. 構文木で表現された前記正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    空を示す記号、
    のうちいずれか一部又は全てを用いて記述される、ことを特徴とする請求項15乃至19のいずれか1項に記載のプログラム。
  21. 前記構文木で表現された正規表現は、
    文字、
    選択を示すメタキャラクタ、
    0回、又は1回のみマッチを示すメタキャラクタ、
    1回以上マッチを示すメタキャラクタ、
    0回以上マッチを示すメタキャラクタ、
    連結を示す記号、
    のうちいずれか一部又は全てを用いて記述されている、ことを特徴とする請求項15乃至19のいずれか1項に記載のプログラム。
JP2009525412A 2007-08-02 2008-07-29 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム Expired - Fee Related JP5381710B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009525412A JP5381710B2 (ja) 2007-08-02 2008-07-29 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2007201510 2007-08-02
JP2007201510 2007-08-02
PCT/JP2008/063604 WO2009017131A1 (ja) 2007-08-02 2008-07-29 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
JP2009525412A JP5381710B2 (ja) 2007-08-02 2008-07-29 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム

Publications (2)

Publication Number Publication Date
JPWO2009017131A1 true JPWO2009017131A1 (ja) 2010-10-21
JP5381710B2 JP5381710B2 (ja) 2014-01-08

Family

ID=40304361

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009525412A Expired - Fee Related JP5381710B2 (ja) 2007-08-02 2008-07-29 ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム

Country Status (3)

Country Link
US (1) US20100138367A1 (ja)
JP (1) JP5381710B2 (ja)
WO (1) WO2009017131A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8250016B2 (en) * 2009-04-17 2012-08-21 Alcatel Lucent Variable-stride stream segmentation and multi-pattern matching
JP5232191B2 (ja) * 2010-03-19 2013-07-10 株式会社東芝 情報処理装置、情報処理方法およびプログラム
US8572106B1 (en) 2010-07-16 2013-10-29 Netlogic Microsystems, Inc. Memory management in a token stitcher for a content search system having pipelined engines
US8589405B1 (en) 2010-07-16 2013-11-19 Netlogic Microsystems, Inc. Token stitcher for a content search system having pipelined engines
US8700593B1 (en) * 2010-07-16 2014-04-15 Netlogic Microsystems, Inc. Content search system having pipelined engines and a token stitcher
CN102075511B (zh) * 2010-11-01 2014-05-14 北京神州绿盟信息安全科技股份有限公司 一种数据匹配设备和方法以及网络入侵检测设备和方法
US9398033B2 (en) 2011-02-25 2016-07-19 Cavium, Inc. Regular expression processing automaton
US9858051B2 (en) * 2011-06-24 2018-01-02 Cavium, Inc. Regex compiler
US9203805B2 (en) 2011-11-23 2015-12-01 Cavium, Inc. Reverse NFA generation and processing
US9426165B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for compilation of finite automata
US9563399B2 (en) 2013-08-30 2017-02-07 Cavium, Inc. Generating a non-deterministic finite automata (NFA) graph for regular expression patterns with advanced features
US9426166B2 (en) 2013-08-30 2016-08-23 Cavium, Inc. Method and apparatus for processing finite automata
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9419943B2 (en) 2013-12-30 2016-08-16 Cavium, Inc. Method and apparatus for processing of finite automata
US9904630B2 (en) 2014-01-31 2018-02-27 Cavium, Inc. Finite automata processing based on a top of stack (TOS) memory
US9602532B2 (en) 2014-01-31 2017-03-21 Cavium, Inc. Method and apparatus for optimizing finite automata processing
US9438561B2 (en) 2014-04-14 2016-09-06 Cavium, Inc. Processing of finite automata based on a node cache
US10002326B2 (en) 2014-04-14 2018-06-19 Cavium, Inc. Compilation of finite automata based on memory hierarchy
US10110558B2 (en) 2014-04-14 2018-10-23 Cavium, Inc. Processing of finite automata based on memory hierarchy
US9875045B2 (en) * 2015-07-27 2018-01-23 International Business Machines Corporation Regular expression matching with back-references using backtracking
CN107193776A (zh) * 2017-05-24 2017-09-22 南京大学 一种用于正则表达式匹配的新型转换算法
US10481881B2 (en) * 2017-06-22 2019-11-19 Archeo Futurus, Inc. Mapping a computer code to wires and gates
US9996328B1 (en) * 2017-06-22 2018-06-12 Archeo Futurus, Inc. Compiling and optimizing a computer code by minimizing a number of states in a finite machine corresponding to the computer code
US11669751B2 (en) * 2020-11-27 2023-06-06 At&T Intellectual Property I, L.P. Prediction of network events via rule set representations of machine learning models

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3852757B2 (ja) * 2002-02-05 2006-12-06 インターナショナル・ビジネス・マシーンズ・コーポレーション 文字列照合方法、これを用いた文書処理装置及びプログラム
JP5169837B2 (ja) * 2006-12-28 2013-03-27 日本電気株式会社 文字列照合用有限オートマトン生成システム、その生成方法、及び生成プログラム

Also Published As

Publication number Publication date
JP5381710B2 (ja) 2014-01-08
WO2009017131A1 (ja) 2009-02-05
US20100138367A1 (en) 2010-06-03

Similar Documents

Publication Publication Date Title
JP5381710B2 (ja) ε遷移を含まない非決定性有限オートマトン生成システムと方法およびプログラム
US11106437B2 (en) Lookup table optimization for programming languages that target synchronous digital circuits
TWI502501B (zh) 用以控制自動機之內分支度及/或外分支度之展開量化
WO2009116646A1 (ja) マルチバイト処理向け文字列照合用有限オートマトン生成システム
US8321371B2 (en) Enhanced artificial intelligence language
CN103999035A (zh) 用于状态机中的数据分析的方法及系统
JP2014506693A5 (ja)
US20100205140A1 (en) Enhanced Artificial Intelligence Language
JP2009181446A (ja) プログラム生成装置およびブロック線図生成装置
US8341652B2 (en) Method for programmatic editing of configuration files
CN115562629A (zh) 一种rpa流程表示方法、系统、装置及存储介质
US20100218200A1 (en) Method for programmatic editing of text files
Adams Refactoring proofs with Tactician
US7337157B2 (en) System, method, and product of manufacture for implementing an EAIL (enhanced artificial intelligence language) engine
JP5429164B2 (ja) 有限オートマトン生成システム
Vanderbruggen et al. Structured Thoughts Automaton: First Formalized Execution Model for Auto-Regressive Language Models
US20020198702A1 (en) Method and apparatus for factoring finite state transducers with unknown symbols
Khandelwal Tree adjoining grammar
CN114090928B (zh) 嵌套html实体解码方法、装置、计算机设备和存储介质
JP2019153047A (ja) 生成装置、生成方法及びプログラム
WO2022249422A1 (ja) コードマッピング装置、コードマッピング方法、及びプログラム
US20040199376A1 (en) Method and apparatus for compiling two-level morphology rules
JP2015114898A (ja) プログラム仕様推定装置およびその方法、ならびにプログラム
CN115167860A (zh) 将程序码于不同程序语言间进行转换及优化的方法
Bultan et al. Automata Based String Analysis

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121002

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130611

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130812

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: 20130903

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130916

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