CN101076798A - 字符串对照装置及字符串对照程序 - Google Patents

字符串对照装置及字符串对照程序 Download PDF

Info

Publication number
CN101076798A
CN101076798A CNA2004800445705A CN200480044570A CN101076798A CN 101076798 A CN101076798 A CN 101076798A CN A2004800445705 A CNA2004800445705 A CN A2004800445705A CN 200480044570 A CN200480044570 A CN 200480044570A CN 101076798 A CN101076798 A CN 101076798A
Authority
CN
China
Prior art keywords
state
character
nfa
transition table
transition
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
CNA2004800445705A
Other languages
English (en)
Other versions
CN100524301C (zh
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of CN101076798A publication Critical patent/CN101076798A/zh
Application granted granted Critical
Publication of CN100524301C publication Critical patent/CN100524301C/zh
Active 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

Abstract

一种字符串对照装置,具备:状态转变表生成部,根据用正规表达描述的对照条件,生成状态转变表;和自动机,根据由所述状态转变表生成部生成的状态转变表进行转变,其中,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述自动机不继续读入输入字符,而是转变到初始状态。另外,具备:状态转变表生成部,根据用正规表达描述的对照条件,生成状态转变表;和自动机,根据由所述状态转变表生成部生成的状态转变表进行转变,其中,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述状态转变表生成部不继续读入输入字符,而是设定向规定状态转变的除外字符,生成状态转变表。

Description

字符串对照装置及字符串对照程序
技术领域
本发明涉及一种用于进行利用正规表达指定的模式与文章中的文本的对照的技术。
背景技术
近年来人们在各种领域中推进文档的电子化,寻求文档的高效检索方法。作为检索的一种方法,存在进行利用正规表达指定的模式与文档中的文本的对照的方法。所谓正规表达例如记载在非专利文献1中,是表达被称为正规语言的语言的类(class)的表述方法。作为将正规表达作为检索条件的字符串对照方式,已知基于DFA(DeterministicFinite Automaton,确定性有限自动机)的方法。
基于DFA的字符串对照方式是基于状态转变机器(自动机)的模型。状态转变机器在内部具有状态和状态转变函数。状态转变函数是针对当前状态和输入字符确定下一个状态的函数。在使用DFA的字符串对照方式中,逐个字符地读出输入文本,转变成针对当前状态和输入字符的组应用状态转变函数所得到的下一个状态。根据该方法,可以通过不回溯地扫描一次文本来执行对照,从而可执行高速的字符串对照。在执行基于多个条件的对照时,为了区别对照成功的条件,还使用扩展DFA并对各状态定义输出的带输出的有限自动机(Moore机器)。
DFA的状态转变函数由作为对照条件的正规表达来决定,但目前已知的是将正规表达一次变换成NFA(Non-deterministic FiniteAutomaton,非确定性有限自动机),并进一步将NFA变换成DFA的过程,例如记载在非专利文献1等中。基于DFA的字符串对照方式具有高速的优点,但另一方面,具有用于实现DFA的状态转变函数的状态转变表容易变得巨大的缺点。
作为一例,以专利文献3中公开的图52的对照条件为例。图53是在现有的带输出的有限自动机中根据图52的对照条件生成的状态转变表及失败函数。这样,必须针对状态数18和字符类别的5个种类,生成保持90个组的状态转变表。
作为解决该问题的方法,在专利文献1、专利文献2中示出如下方法:在将基于AC(Aho-Corasick)法的状态转变表变换成DFA之后,从状态转变表中去掉向初始状态的转变操作以及向初始状态的下一个状态的转变操作,从而削减状态转变表的存储容量。但是,在专利文献1、专利文献2中示出的字符串对照方法中,由于将对照的对象限定于固定的字符串关键字,所以不能以一般的正规表达作为对照的对象。
另外,在专利文献3中示出在DFA中通过定义失败函数来削减状态转变表的方法。但是,专利文献3中示出的方法在利用失败函数转变一次后的状态下有时会再次转变失败。即,有时会连锁产生转变的失败。这时,存在必须重复参照失败函数、对照速度降低的问题。
作为一例,以专利文献3中公开的图52的对照条件为例。图54是根据图52的对照条件生成的状态转变表及失败函数,公开在专利文献3中。
以对照条件是图52的条件、输入字符串是“aaca”的情况为例。
在专利文献3中公开的方法中,首先,将状态初始化成状态1。接着,首先读第1个字符“a”,转变成在状态转变表的状态1的行、输入字符“a”的列中示出的状态3。接着,读第2个字符“a”,同样地,从状态3转变成状态6。接着,通过读第个3字符“c”,从状态6转变成状态10。但是,接着在第4个字符的字符“a”出现时,由于在状态10下不存在对应于字符“a”的转变目标,所以首先转变成作为状态10失败时的转变目标的状态5。并且,由于在状态5下不存在对应于字符“a”的转变目标,所以转变成作为状态5失败时的转变目标的状态2。可是,由于在状态2下也不存在对应于字符“a”的转变目标,所以转变成作为状态2失败时的转变目标的状态1。由于在状态1下存在对应于字符“a”的转变目标状态3,所以转变成状态3。这样,对于第4个字符的输入字符共计执行了4次状态转变表的参照和状态转变,从而整体上对于4个字符的输入字符需要7次状态转变。这样,专利文献3的方法有时需要进行重复状态转变的失败、每次都参照失败时的转变目标的动作。因此,存在状态转变表的参照次数增加、对照性能降低的问题。
非专利文献1:E.J.Hopcroft,D.J.Ullman,“Formal Languagesand their Relation to Automata”,Addison Wesley(1969)
专利文献1:特开2004-103035号公报
专利文献2:特开2004-103034号公报
专利文献3:特许第2994926号公报
发明内容
发明所要解决的技术问题
本发明为了解决上述问题而作出,其目的在于针对以正规表达为对照条件的字符串对照,削减存储状态转变表所需的存储容量。
另外,其目的在于使由于转变失败所引起的状态转变表的参照次数为每1个字符2次以下,防止由于重复转变的失败所引起的性能降低,从而可执行高速的字符串对照。
解决技术问题的技术方案
本发明的字符串对照装置具备:状态转变表生成部,根据用正规表达描述的对照条件,生成状态转变表;和自动机,根据由所述状态转变表生成部生成的状态转变表进行转变,其中,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述自动机不继续读入输入字符,而是转变到初始状态。
发明效果
具备根据用正规表达描述的对照条件生成状态转变表的状态转变表生成部、和根据由所述状态转变表生成部生成的状态转变表进行转变的自动机,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述自动机不继续读入输入字符而是转变至初始状态,由此可削减存储状态转变表所需的存储容量。
附图说明
图1是表示字符串对照装置的结构的说明图。
图2是表示对照条件2的构成的说明图。
图3是表示条件式17的构成的说明图。
图4是表示状态转变表生成部3的构成的说明图。
图5是表示状态转变表存储部4的构成的说明图。
图6是表示输出表存储部5的结构的说明图。
图7是表示对照结果10的构成的说明图。
图8是表示字符串对照装置的动作的流程图。
图9是表示对照条件的编译动作的流程图。
图10是表示追加向初始状态的失败转变的流程的流程图。
图11是表示追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况)的流程的流程图。
图12是表示追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)的流程的流程图。
图13是表示除去非确定性转变的流程的流程图。
图14是表示进行状态集合的初始化的流程的流程图。
图15是表示除去与Σ有关的非确定性转变的流程的流程图。
图16是表示除去与σother有关的非确定性转变的流程的流程图。
图17是表示生成新状态的流程的流程图。
图18是表示修正基于σother的状态转变的流程的流程图。
图19是表示除去未使用状态的流程的流程图。
图20是表示除去冗余状态的流程的流程图。
图21是表示删除冗余的状态转变的流程的流程图。
图22是表示生成状态转变表和输出表的流程的流程图。
图23是表示对照输入文档的流程的流程图。
图24是说明元字符“.”的置换的说明图。
图25是说明元字符“^”的置换的说明图。
图26是说明包含向初始状态的ε转变的NFA的说明图。
图27是说明ε转变的省略的说明图。
图28是说明必须追加失败转变的情况的说明图。
图29是说明追加失败转变的说明图。
图30是说明从初始状态起存在基于σany的转变的情况的说明图。
图31是说明从初始状态起存在基于σany的转变时追加失败转变的说明图。
图32是说明除去非确定性转变(除去前)的说明图。
图33是说明除去非确定性转变(除去后)的说明图。
图34是说明除去非确定性转变(除去前)的说明图。
图35是说明除去非确定性转变(除去后)的说明图。
图36是说明除去非确定性转变(除去前)的说明图。
图37是说明除去非确定性转变(除去后)的说明图。
图38是说明除去非确定性转变(除去前)的说明图。
图39是说明除去非确定性转变(除去后)的说明图。
图40是说明除去非确定性转变(除去前)的说明图。
图41是说明除去非确定性转变(除去后)的说明图。
图42是说明删除冗余的状态转变的说明图。
图43是说明合并冗余状态的说明图。
图44是表示对照条件的结构的说明图。
图45是表示状态转变表的结构的说明图。
图46是表示输出表的结构的说明图。
图47是表示动作例的说明图。
图48是表示对照条件的结构的说明图。
图49是表示状态转变表的结构的说明图。
图50是表示输出表的结构的说明图。
图51是表示动作例的说明图。
图52是专利文献3中公开的对照条件。
图53是基于专利文献3的现有的带输出的DFA的状态转变表。
图54是基于专利文献3的现有的状态转变表和输出表。
符号说明
1、字符串对照装置
2、对照条件
3、状态转变表生成部
4、状态转变表存储部
5、输出表存储部
6、输入文档
7、输入字符读取部
8、SDFA自动机
9、状态存储部
10、对照结果
11、状态转变
12、输出描述
13、当前状态
14、输入字符
15、下一个状态
16、条件编号
17、条件式
18、条件描述
21、状态转变表生成控制部
22、NFA状态集合
23、NFA状态转变集合
24、NFA输出描述集合
25、状态集合
26、状态转变集合
27、输出描述集合
31、散列值计算部
32、散列值
33、状态转变散列指针
34、状态转变散列链
35、状态转变散列表
36、比较部
41、条件编号索引
42、条件编号链
具体实施方式
实施例1
图1是表示本发明的字符串对照装置的结构图。
在图1中,字符串对照装置1是本发明的执行基于正规表达的字符串对照的装置,作为对照结果10,输出在输入文档6中是否包含满足对照条件2的字符串。对照条件2是描述了字符串对照条件的条件,成为字符串对照装置1的输入。状态转变表生成部3根据对照条件2生成状态转变11和输出描述12,分别送给状态转变表存储部4、输出表存储部5。状态变换表存储部保持状态转变11的组。输出表存储部5保持输出描述12。输入文档6是成为对照对象的文档。输入字符读取部7逐个字符地取出包含在输入文档6中的字符,作为输入字符14发送给SDFA自动机8。SDFA自动机8在内部的状态存储部9中存储当前状态13,从输入字符读取部7获取输入字符14,参照状态转变表存储部4、输出表存储部5,更新存储在状态存储部9中的当前状态13和输出对照结果10。状态存储部9存储保持在SDFA自动机8内部的状态。10是对照结果。11是状态转变,是当前状态13、输入字符14、下一个状态15的组。12是输出描述,是当前状态13和条件编号16的组。13是当前状态,14是输入字符。15是下一个状态。16是条件编号。
图2是表示本发明中的对照条件2的结构的图。在图中,条件式17是构成对照条件2的单独条件,在对照条件2中包含1个或多个条件式17。
图3是表示本发明中的条件式17的结构的图。条件式17由条件编号6和条件描述18构成,条件编号6是用于唯一区别条件式的编号,条件描述18是用正规表达描述的对照条件。
图4是表示本发明中的状态转变表生成部3的结构的图。在图中,状态转变表生成控制部21控制生成状态转变生成表的动作过程。NFA状态集合22、NFA状态转变集合23、NFA输出描述集合24、状态集合25、输出转变集合26、状态描述集合27是状态转变表生成控制部21所参照的数据。
图5是本发明中的状态转变表存储部4的结构的一例的图。在图中,31是散列值计算部,根据当前状态13和输入字符14计算散列值32。散列值32是由散列值计算部31计算出的散列值。状态转变散列指针33是存储状态转变散列链34的多个指针的表。状态转变散列链34是指向状态转变散列链34的指针、当前状态13、输入字符14、下一个状态15的组。状态转变散列表35是由状态转变散列指针33和状态转变散列链34构成的数据结构。比较部36比较从外部输入的当前状态13a和输入字符14a的组、与存储在状态转变散列表35中的当前状态13b和输入字符14b,输出下一个状态15。
图6是本发明中的输出表存储部5的结构的图。条件编号索引41存储多个指向条件编号链的指针。条件编号链42是指向条件编号链42的指针和条件编号16的组。
图7是表示本发明中的对照结果10的一例的图。对照结果10中包含输入文档6的对照成功的条件编号16。
下面,在说明本发明的动作之前,说明下面说明中使用的用语及符号。
如非专利文献1等的记载,目前已知的带输出的确定性有限自动机由(Q,Σ,Δ,δ,λ,q0)的组给出。其中,Q是状态集合。Σ是输入字母,包含空字符ε。Δ是输出字母,δ是转变函数(Q×Σ→Q),λ是输出函数(Q→Δ),q0是初始状态。
本发明的SDFA自动机8由(Qs,Σs,Δs,δs,λs,q0)的组给出。
这里,Qs是状态集合25,相当于现有的带输出的有限自动机的状态集合Q。
Δs是输出字母,在本实施例中为条件编号16的集合的集合。
δs是由状态转变表存储部4实现的状态转变函数,下面,将当前状态13为qs、输入字符14为σs时下一个状态15为qd表述为
δs(qs,σs)=qd
q0是初始状态,其含义与现有已知的带输出的确定性有限自动机相同。
Σs是在现有的带输出的有限自动机的输入字母Σ中增加了任意字符σany、除外字符σother的扩展输入字母。即为
Σs=Σ∪{σany,σother}。
另外,当δs(qs,σs)=qd时,设状态转变11为t,表述为
t=trans(qs,qd,σs)。
将针对当前状态13和输入字符14的组存在下一个状态15的状态转变11的集合称为状态转变集合26,表述为T。另外,对于状态转变t=trans(qs,qd,σs),将qs称为起点、qd称为终点、σs为转变字符。并且,将提供状态转变t的起点的函数称为Source,提供终点的函数称为Destination,提供转变字符的函数称为Char,分别表述为:
qs=Source(t)
qd=Destination(t)
σs=Char(t)。
另外,当λs(qs)=r时,设输出描述18为d,表述为
d=desc(qs,r)。
将针对当前状态13输出字母r不是空的输出描述12的集合称为输出描述集合27,表述为D。对于输出描述d=desc(qs,r),将qs称为输出状态,r为输出结果。并且,将提供输出描述d的输出状态的函数称为State,提供输出结果的函数称为Result,分别表述为
qs=State(d)
r=Result(d)。
在本发明的生成SDFA自动机8的过程中生成NFA,但NFA由(Q(NFA),Σs,Δs,δs(NFA),λs(NFA),q0(NFA))的组表示。
这里,Q(NFA)表示NFA状态集合22。状态集合25成为NFA状态的集合的集合。即,在将状态集合25表述为Q时,存在Q=2Q(NFA)的关系。下面,为了将NFA的状态与DFA的状态相区别,表述为q(NFA),将NFA的初始状态表述为q0(NFA)
δs(NFA)是NFA的状态转变函数,是从当前的NFA状态13为q(NFA)、输入字符14为σs起至下一个状态的集合的函数。
λs(NFA)是NFA的输出函数,将当前的NFA状态13为q(NFA)时输出字母成为r∈Δs表述为:
λs(NFA)(q(NFA))=r。
Δs是条件编号16的集合,Σs是扩展输入字母,其含义与本发明的SDFA自动机8相同。
对于NFA的状态,如下所示规定NFA状态转变。在NFA的状态qd(NFA)
qd(NFA)∈δ(qs(NFA),σs)
时,将NFA状态转变32表述为
t(NFA)=trans(qs(NFA),qd(NFA),σs)。
将NFA状态转变的集合称为NFA状态转变集合,表述为T(NFA)。另外,同样地,对于状态转变t(NFA)=trans(qs(NFA),qd(NFA),σs),将qs(NFA)称为起点,qd(NFA)称为终点,σs称为转变字符。并且,将提供状态转变t(NFA)的起点的函数称为Source,提供终点的函数称为Destination,提供转变字符的函数称为Char,分别表述为
qs(NFA)=Source(t(NFA))
qd(NFA)=Destination(t(NFA))
σs(NFA)=Char(t(NFA))。
将NFA状态q(NFA)和输出字母r的组称为NFA输出描述。
在λs(q(NFA))=r时,设NFA输出描述34为d(NFA),则表述为
d(NFA)=dese(qs(NFA),r)。
将针对NFA状态13输出字母p不是空的NFA输出描述的集合称为NFA输出描述集合24,表述为D(NFA)。对于输出描述d(NFA)=dese(q(NFA),r),将q(NFA)称为输出状态,r称为输出结果。并且,将提供输出描述d的输出状态的函数称为State,提供输出结果的函数称为Result,分别表述为:
q(NFA)=State(d(NFA))
r(NFA)=Result(d(NFA))。
通过上述,结束用语及符号的说明,下面说明动作。
图8表示本发明的字符串对照装置1的动作。
本发明的字符串对照装置1首先获取对照条件2,执行利用状态转变表生成部3生成状态转变11和输出描述12的过程、即编译对照条件的流程(步骤S51)。
接着,获取输入文档6,利用输入字符读取部7及SDFA自动机8,依次执行一边参照状态转变11和输出描述12、一边输出对照结果10的流程(步骤S52)。
在本实施例中,对于1次“编译对照条件”执行1次“对照输入文档”,但也可以利用在1次“编译对照条件”的流程中生成的状态转变11和输出描述12,对多个输入文档执行“对照输入文档”。
下面,利用图9说明流程“编译对照条件”。
首先,通过“生成包含ε转变的NFA”的流程,根据正规表达,生成包含ε转变的NFA(步骤S101)。
接着,通过“除去ε转变”的流程,除去包含在NFA中的ε转变(基于空字符的转变)(步骤S102)。
接着,通过“追加向初始状态的转变”的流程,追加对照失败时向初始状态的转变(步骤S103)。
接着,通过“除去非确定性转变”的流程,除去非确定性的转变(步骤S104)。
接着,通过“除去未使用状态”的流程,除去在此前的过程中不需要的状态(步骤S105)。
接着,通过“削减状态数”的流程,除去冗余状态及冗余的状态转变(步骤S106)。
接着,通过“生成状态转变表和输出表”的流程,根据状态集合,生成状态转变表和输出表(步骤S107)。
通过以上的过程,可执行流程“编译对照条件”。
对于步骤S101的、“生成包含ε转变的NFA”的流程,可以使用非专利文献1等中示出的公知的流程。
但是,如图24所示,将包含在正规表达中的、表示任意字符的元字符“.”置换成σany。下面,在图24~图31中,将状态q(NFA)简单表述为q。
另外,如图25所示,将包含在正规表达中的、表示特定字符集合以外的元字符“^”置换成σother,并且追加了追加从该状态向初始状态q0(NFA)的状态转变这一流程。
对于步骤S102的“除去ε转变”的流程,可以利用非专利文献1等中示出的众所周知的流程,通过用向转变目标集合的转变置换ε转变(基于空字符的转变)来实现。
下面,利用图10示出步骤103的“追加向初始状态的失败转变”的流程。
首先,在从由步骤S102生成的NFA的初始状态q0(NFA)起不存在基于σany的转变的情况下,前进到步骤S202。除此以外的情况下,前进到步骤S203(步骤S201)。
执行“追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况)”的流程并结束(步骤S202)。
在步骤S201中从NFA的初始状态q0(NFA)起存在基于σany的转变的情况下,执行“追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)”的流程并结束(步骤S203)。
在本实施例中,根据从NFA的初始状态q0(NFA)起是否存在基于σany的转变目标来分开处理,但步骤S202的处理也可由步骤S203代行。步骤S202的处理与步骤S203相比,可适用的范围限定在“从初始状态起存在基于σany的转变目标”的情况,但可以进一步削减状态转变的数量。所谓从初始状态起存在基于σany的转变目标,是指在成为对照条件的正规表达的开头指定了任意字符“.”,但由于在实用中很少进行这种指定,所以多数情况下可通过应用步骤S202的处理来削减状态转变的数量。
通过以上过程,可执行流程“追加向初始状态的失败转变”。
下面,说明步骤S202的“追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况”的流程。
通常,在执行连续的字符串对照的NFA或DFA中,通过追加从所有状态向初始状态的ε转变,可以实现从任意字符位置起的字符串对照。图26中示出向对应于正规表达(a|b|c(d|e))f的NFA中追加了ε转变的例子。在本发明的SDFA自动机8中,由于在转变失败时不再继续读入输入字符而是返回初始状态q0再次执行状态转变,所以可省略向初始状态q0的ε转变。即,只要构成图27中示出的NFA即可,可大幅度地削减状态转变的总数。但是,在从初始状态q0(NFA)起基于转变字符σ可转变成状态q1(NFA)时,在存在从状态q(NFA)起的基于转变字符σ的转变、或者以状态q(NFA)为起点的任意的转变字符σ是σany的情况下,由于基于σ的转变成功时,也可能基于σ而转变成q1(NFA),所以追加基于σ的、从状态q(NFA)向状态q1(NFA)的状态转变。图28中示出正规表达(a|b|c(d|e))f的情况下的例子。在图28的例子中,从初始状态q0(NFA)基于转变字符a可转变成状态q1(NFA),由于从状态q3(NFA)起存在基于转变字符a的转变,所以如图29所示,追加基于转变字符a的、从状态q3(NFA)向状态q1(NFA)的转变。从状态q3(NFA)起基于转变字符a的转变为非确定性的状态转变,但通过后续的“除去非确定性转变”的流程,最终除去该非确定性转变。流程“追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况)”及“追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)”用于执行该处理。
利用图11说明步骤S202的“追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况)”的流程。
首先,设t0(NFA)为以步骤S102生成的NFA的初始状态q0(NFA)为起点的最初的状态转变,前进到步骤S302(步骤S301)。
若结束了以NFA的初始状态q0(NFA)为起点的所有状态转变t0(NFA)的处理,则结束流程。除此以外的情况下前进到步骤S303(步骤S302)。
设σ为Char(t0(NFA)),前进到步骤S304(步骤S303)。
设q(NFA)为包含在NFA状态集合Q(NFA)中的最初的NFA状态,前进到步骤S305(步骤S304)。
若结束了包含在NFA状态集合Q(NFA)中的所有NFA状态q(NFA)的处理,则前进到步骤S313。除此以外的情况下前进到步骤S306(步骤S305)。
在NFA状态q(NFA)为初始状态q0(NFA)时,前进到步骤S312。除此以外的情况下前进到步骤S307(步骤S306)。
设t(NFA)为以q(NFA)为起点的最初的NFA状态转变,前进到步骤S308(步骤S307)。
若结束了以q(NFA)为起点的所有NFA状态转变t(NFA)的处理,则前进到步骤S312。除此以外的情况下前进到步骤S309(步骤S308)。
在Char(t(NFA))=σ、Char(t(NFA))=σany中的任意一个条件成立时,前进到步骤S310。在任一条件都不成立时,前进到步骤S311(步骤S309)。
如果NFA状态转变trans(q(NFA),Destination(t0(NFA)),σ)未包含在NFA状态转变集合T(NFA)中,则加入T中,前进到步骤S311(步骤S310)。
设t(NFA)为以NFA状态q(NFA)为起点的下一个NFA状态转变,前进到步骤S305(步骤S311)。
在步骤S306中NFA状态q(NFA)是NFA的初始状态q0(NFA)的情况下,或者在步骤S308中处理了以q(NFA)为起点的所有NFA状态转变t(NFA)的情况下,设NFA状态q(NFA)为包含在NFA状态集合QNFA中的下一个NFA状态,前进到步骤S305(步骤S312)。
在步骤S305中结束了所有NFA状态q(NFA)的处理时,设t0(NFA)为以NFA的初始状态q0(NFA)为起点的下一个NFA状态转变,前进到步骤S302(步骤S313)。
通过以上过程,可执行流程“追加向初始状态的失败转变(从初始状态起不存在基于σany的转变目标的情况”)。
下面,说明步骤S203的“追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)”的流程。该流程的目的与步骤S202相同,但如图30示出的正规表达(.|b|c(d|e))f那样,在从初始状态起存在基于σany的转变目标q1(NFA)的情况下,对于所有状态,在转变成功时也可转变成q1(NFA),所以如图31所示,针对除去NFA的初始状态q0(NFA)以外的所有NFA状态q(NFA)和所有转变字符σ,追加向q1(NFA)的转变。
通过图12说明步骤S203的“追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)”的流程。
首先,设t0(NFA)为以步骤S102生成的NFA的初始状态q0(NFA)为起点的最初的NFA状态转变,前进到步骤S352(步骤S351)。
若结束了以NFA的初始状态q0(NFA)为起点的所有NFA状态转变t0(NFA)的处理,则结束流程。除此以外的情况下前进到步骤S353(步骤S352)。
设σ为Char(t0(NFA)),前进到步骤S354(步骤S353)。
设q为包含在NFA状态集合Q(NFA)中的最初的NFA状态,前进到步骤S355(步骤S354)。
若结束了包含在NFA状态集合Q(NFA)中的所有NFA状态q的处理,则前进到步骤S359。除此以外的情况下前进到步骤S356(步骤S355)。
在NFA状态q(NFA)为初始状态q0(NFA)的情况下,前进到步骤S356。除此以外的情况下前进到步骤S357(步骤S306)。
如果NFA状态转变trans(q(NFA),Destination(t0(NFA)),σ)未包含在NFA状态转变集合T(NFA)中,则加入到T(NFA)中,前进到步骤S355(步骤S358)。
在步骤S355中结束了所有NFA状态q(NFA)的处理时,设t0(NFA)为以NFA的初始状态q0(NFA)为起点的下一个NFA状态转变,前进到步骤S352(步骤S359)。
通过以上过程,可执行流程“追加向初始状态的失败转变(从初始状态起存在基于σany的转变目标的情况)”。
下面,说明步骤S104的“除去非确定性转变”的流程。本流程除去包含在NFA中的非确定性转变,生成确定性转变。图32中示出一例。由于从状态qsource起作为基于转变字符a的状态转变存在q1及q2,即为非确定性的,所以合并转变目标的状态,即如图33所示,成为向作为转变目标的NFA状态集合q1及q2的和集合qn=q1∪q2的状态转变。该流程基本上与非专利文献1等中示出的DFA的生成流程相同,但在本实施例中,还如图34那样,对于包含基于任意字符σany的状态转变q2和基于转变字符a的状态转变的终点q1的情况,除了非确定性的、向与转变字符a有关的状态qn=q1∪q2的状态转变之外,还生成向基于除外字符σother的状态q1的转变(图35)。
利用图13说明步骤S104的“除去非确定性转变”的流程。在本流程以及“除去与σother有关的非确定性转变”的流程中使用变量Retry。变量Retry可以取TRUE(真)或FALSE(假)中的某一个值。
首先,执行“进行状态集合的初始化”的步骤,前进到步骤S402(步骤S401)。
接着,将变量Retry初始化成FALSE,前进到S401(步骤S402)。
接着,执行“除去与Σ有关的非确定性转变”的步骤,前进到步骤S404(步骤S403)。
接着,执行“除去与σother有关的非确定性转变”的步骤,前进到步骤S405(步骤S404)。
在变量Retry为TRUE时前进到步骤S403。为FALSE时结束(步骤S405)。
通过以上过程,可执行流程“除去非确定性转变”。
下面,说明步骤S401的“进行状态集合的初始化”的流程。本流程用于为了生成DFA状态而初始化必需的状态集合,其目的在于对于所有的NFA状态q(NFA),与相关联的状态转变一起生成DFA的状态{q(NFA)}。
利用图14说明步骤S401的“进行状态集合的初始化”的流程。
首先,将状态集合Q初始化为空,前进到步骤S502(步骤S501)。
接着,设q(NFA)为包含在NFA状态集合Q(NFA)中的最初的NFA状态,前进到步骤S502(步骤S502)。
在处理了包含在NFA状态集合Q(NFA)中的所有NFA状态q(NFA)的情况下,前进到步骤S506。除此以外的情况下前进到步骤S504(步骤S503)。
在状态集合Q中加入NFA状态集合(即DFA的状态){q(NFA)},前进到步骤S505(步骤S504)。
设q(NFA)为包含在NFA状态集合Q(NFA)中的下一个NFA状态,前进到步骤S503(步骤S505)。
在步骤S503中处理了包含在NFA状态集合Q(NFA)中的所有NFA状态(NFA)时,使状态转变集合T为空,前进到步骤S507(步骤S506)。
接着,设t(NFA)为包含在NFA状态转变集合T(NFA)中的最初的NFA状态转变,前进到步骤S508(步骤S507)。
若处理了包含在NFA状态转变集合T(NFA)中的所有NFA状态转变t(NFA),则前进到步骤S511。除此以外的情况下前进到步骤S509(步骤S508)。
在状态转变集合T中加入trans({Source(t(NFA))},{Destination(t(NFA))},Char(t(NFA))),前进到步骤S510(步骤S509)。
设t(NFA)为包含在NFA状态转变集合T(NFA)中的下一个NFA状态转变,前进到步骤S508(步骤S510)。
在步骤S508中处理了包含在T(NFA)中的所有NFA状态转变t(NFA)的情况下,使输出描述集合D为空,前进到步骤S512(步骤S511)。
接着,设d(NFA)为包含在NFA输出描述集合D(NFA)中的最初的NFA输出描述,前进到步骤S508(步骤S512)。
若处理了包含在NFA输出描述集合D(NFA)中的所有NFA输出描述d(NFA),则结束。除此以外的情况下前进到步骤S509(步骤S513)。
在输出描述集合D中加入desc({State(d(NFA))},Result(d(NFA))),前进到步骤S510(步骤S514)。
设d(NFA)为包含在NFA输出描述集合D(NFA)中的下一个NFA输出描述,前进到步骤S508(步骤S515)。
通过以上过程,可执行流程“进行状态集合的初始化”。
下面,说明步骤S403的“除去与Σ有关的非确定性转变”的流程。本流程的目的在于,如图32及图34示出的例子,在对于一个转变字符σ∈Σ存在多个转变目标时,通过用向新状态的转变来置换,唯一地确定基于各转变字符σ的转变目标。
利用图15说明步骤S403的“除去与Σ有关的非确定性转变”的流程。在本流程中使用变量Found。变量Retry可以取TRUE或FALSE中的某一值。
首先,将Found初始化成FALSE,前进到步骤S602(步骤S601)。
接着,设q为状态集合Q中的最初的状态转变,前进到步骤S603(步骤S602)。
在处理了状态集合Q中的所有状态q时,前进到步骤S616。除此以外的情况下前进到步骤S604(步骤S603)。
设σ为输入字母Σ中的最初的字母,前进到步骤S605(步骤S604)。
在处理了输入字母Σ中的所有字母σ时,前进到步骤S610。除此以外的情况下前进到步骤S606(步骤S605)。
以q为起点,存在多个以σ为转变字符的状态转变t,或者存在以σ为转变字符的状态转变t和以σany为转变字符的状态转变t、即基于σ的转变是非确定性的情况下,前进到步骤S607。除此以外的情况下前进到步骤S609(步骤S606)。
将参量qsource设定为q、σt设定为σ,执行流程“生成新状态”,前进到步骤S608(步骤S607)。
在变量Found中设定TRUE,前进到步骤S609(步骤S608)。
设σ为输入字母Σ中的下一个字母,前进到步骤S605(步骤S609)。
在步骤S605中处理了输入字母Σ中的所有字母σ时,设t为以状态q为起点的最初的状态转变,前进到步骤S611(步骤S610)。
在处理了以状态q为起点的所有状态转变t时,前进到步骤S615。除此以外的情况下前进到步骤S612(步骤S611)。
在t的转变字符Char(t)为σany时,前进到步骤S613。除此以外的情况下前进到步骤S614(步骤S612)。
以σother置换t的转变字符、即以(Source(t),Destination(t),σother)置换t,前进到步骤S614(步骤S613)。
设t为以状态q为起点的下一个状态转变,前进到步骤S611(步骤S614)。
在步骤S611中处理了以状态q为起点的所有状态转变t时,设q为状态集合Q中的下一个状态转变,前进到步骤S603(步骤S615)。
在步骤S603中处理了状态集合Q中的所有状态q时,若变量Found为TRUE,则前进到步骤S601。除此以外的情况下结束(步骤S616)。
通过上面的过程,可执行流程“除去与Σ有关的非确定性转变”。
下面,说明步骤S404的流程“除去与σother有关的非确定性转变”。在本流程中,如图36所示,对于通过“除去与Σ有关的非确定性转变”生成的基于转变字符σother的转变,在从qsource起存在向多个状态q1及q2的状态转变的情况下,通过用向它们的和集合qn=q1∪q2的状态的转变来置换,如图37所示,除去基于转变字符σother的非确定性转变。
利用图16说明步骤S404的流程“除去与σother有关的非确定性转变”。在本流程中使用变量Found。变量Found可以取TRUE或FALSE中的某一值。另外,在本流程中使用变量Counter。变量Counter可取0以上的整数值。
首先,在变量Found中设定FALSE,前进到步骤S702(步骤S701)。
设q为状态集合Q中的最初状态,前进到步骤S703(步骤S702)。
在处理了状态集合Q中的所有状态q时,前进到步骤S714。除此以外的情况下前进到步骤S701(步骤S703)。
向变量Counter设定0,前进到步骤S705(步骤S704)。
向t设定以q为起点的最初的状态转变,前进到步骤S706(步骤S705)。
在处理了以q为起点的所有状态转变t时,前进到步骤S710。除此以外的情况下前进到步骤S707(步骤S706)。
t的转变字符Char(t)是σother时前进到步骤S708。除此以外的情况下前进到步骤S709(步骤S707)。
将变量Counter加1,前进到步骤S709(步骤S708)。
向t设定以q为起点的下一个状态转变,前进到步骤S705(步骤S709)。
在步骤S706中处理了以q为起点的所有状态转变t时,若变量Counter的值是2以上,则前进到步骤S711。除此以外的情况下前进到步骤S713(步骤S710)。
设定参数qsource为q、σt为σother,调用流程“生成新状态”,前进到步骤S712(步骤S711)。
向变量Found设定TRUE,向变量Retry设定TRUE,前进到步骤S713(步骤S712)。
设q为状态集合Q中的下一个状态转变,前进到步骤S703(步骤S713)。
在步骤S703中处理了状态集合Q中的所有状态q时,变量Found是TRUE的情况下,前进到步骤S701。除此以外的情况下结束(步骤S714)。
通过以上的过程,可执行流程“除去与σother有关的非确定性转变”。
下面,说明步骤S607及步骤S711的流程“生成新状态”的过程。本流程是从状态qsource中除去与转变字符σt有关的各个非确定性状态转变的流程。
利用图17说明步骤S607及步骤S711的流程“生成新状态”的过程。在流程“生成新状态”中,设qsource及σt为参数。
首先,以状态qsource为起点,求出基于σl可转变的状态的集合,求出与这些NFA状态有关的和集合,设为状态qn。在状态转变集合T中包含qn时,前进到步骤S817。除此以外的情况下前进到步骤S802(步骤S801)。
接着,向状态集合Q追加状态qn,前进到步骤S803(步骤S802)。
设t为以qsource为起点的最初的状态转变,前进到步骤S804(步骤S803)。
在处理了以qsource为起点的所有状态转变t时,前进到步骤S817。除此以外的情况下前进到步骤S805(步骤S804)。
在Char(t)=σt时、或Char(t)=σany时,前进到步骤S806。除此以外的情况下前进到步骤S816(步骤S805)。
设t1为以Destination(t)为起点的最初的状态转变,前进到步骤S807(步骤S806)。
在处理了以Destination(t)为起点的所有状态转变t1时,前进到步骤S812。除此以外的情况下前进到步骤S808(步骤S807)。
如果不是状态转变trans(qn,Destination(t1),Char(t1))∈T,则向T追加trans(qn,Destination(t1),Char(t1)),前进到步骤S809(步骤S808)。
若Char(t1)=σother,则前进到步骤S810。除此以外则前进到步骤S811(步骤S809)。
调用流程“修正基于σother的状态转变”,前进到步骤S811。这时,提供(qsource,qn,t1)作为参数(步骤S810)。
设t1为以Destination(t)为起点的下一个状态转变,前进到步骤S807(步骤S811)。
在步骤S807中处理了以Destination(t)为起点的所有状态转变t1时,设d为以Destination(t)为输出状态的最初的输出描述,前进到步骤S813(步骤S812)。
在处理了以Destination(t)为输出状态的所有输出描述d时,前进到步骤S816。除此以外的情况下前进到步骤S814(步骤S813)。
如果不是输出描述desc(qn,Result(d))∈D,则在D中加入desc(qn,Result(d)),前进到步骤S815(步骤S814)。
设d为以Destination(t)为输出状态的下一个输出描述,前进到步骤S813(步骤S815)。
设t为以qsource为起点的下一个状态转变,前进到步骤S804(步骤S816)。
在步骤S801中qn未包含在状态转变集合T中的情况下、以及在步骤S804中处理了以qsource为起点的所有状态转变t的情况下,设t为以qsource为起点的最初的状态转变,前进到步骤S818(步骤S817)。
在处理了以qsource为起点的所有状态转变t时,前进到步骤S822。除此以外的情况下前进到步骤S819(步骤S818)。
在Char(t)=σt时前进到步骤S820。除此以外的情况下前进到步骤S821(步骤S819)。
从状态转变集合T中删除状态转变t,前进到步骤S821(步骤S820)。
设t为以qsource为起点的下一个状态转变,前进到步骤S818(步骤S821)。
在步骤S818中处理了以qsource为起点的所有状态转变t时,若不是状态转变trans(qsource,qn,σt)∈T,则向T中追加trans(qsource,qn,σt)并结束(步骤S822)。
通过以上的过程,可执行流程“生成新状态”。
下面,说明步骤S811的流程“修正基于σother的状态转变”。本流程如图38所示,示出在以除去非确定性转变时应合并的状态q1、q2为起点的状态转变中包含基于转变字符σother的状态转变时的、成为以状态q1、q2为起点的状态转变的终点的状态的合并过程。如果合并图38的状态q1、q2,则如图39所示,基于状态qn=q1∪q2和转变字符b的状态转变的终点为q3∪q5。同样地,如果合并图40示出的状态q1、q2,则如图41所示,基于转变字符b、c、σother的状态转变的终点分别为q3∪q6、q4∪q5、q4∪q6
利用图18说明步骤S811的流程“修正σother的状态转变”。在本流程中,使用扩展输入字母σ∈Σs的集合CharSet。
首先,将CharSet初始化为空,前进到步骤S902(步骤S901)。
接着,设t为以Source(tother)为起点的最初的状态转变,前进到步骤S903(步骤S902)。
在处理了以Source(tother)为起点的所有状态转变时,前进到步骤S907。除此以外的情况下前进到步骤S904(步骤S903)。
在Char(t)包含在输入字母Σ中、即Char(t)≠σany且Char(t)≠σother时,前进到步骤S906。除此以外的情况下前进到步骤S905(步骤S904)。
在CharSet中加入Char(t),前进到步骤S906(步骤S905)。
设t为以Source(tother)为起点的下一个状态转变,前进到步骤S903(步骤S906)。
在步骤S903中处理了以Source(tother)为起点的所有状态转变时,设t为以状态q为起点的最初的状态转变,前进到步骤S908(步骤S907)。
在处理了以状态q为起点的所有状态转变q时结束。除此以外的情况下前进到步骤S909(步骤S908)。
在Destination(t)≠Source(tother)时前进到步骤S910。除此以外的情况下前进到步骤S916(步骤S909)。
设t1为以Destination(t)为起点的最初的状态转变,前进到步骤S911(步骤S910)。
在处理了以Destination(t)为起点的所有状态转变t1时前进到步骤S916。除此以外的情况下前进到步骤S912(步骤S911)。
在Char(t1)包含在输入字母Σ中、即Char(t1)≠σany且Char(t1)≠σother时前进到步骤S913。除此以外的情况下前进到步骤S915(步骤S912)。
在Char(t1)包含在CharSet中时前进到步骤S915。除此以外的情况下前进到步骤S914(步骤S913)。
如果不是状态转变trans(qn,Destination(tother),Char(t1))∈T,则在T中加入trans(qn,Destination(tother),Char(t1)),前进到步骤S915(步骤S914)。
设t1为以Destination(t)为起点的下一个状态转变,前进到步骤S911(步骤S915)。
在步骤S909中不是Destination(t)≠Source(tother)的情况下,或在步骤S911中处理了以Destination(t)为起点的所有状态转变t1的情况下,设t为以状态q为起点的下一个状态转变,前进到步骤S908(步骤S916)。
通过以上的过程,可执行流程“修正基于σother的状态转变”。
下面,说明步骤S105的“除去未使用状态”的流程。在本流程中,删除此前的处理结果产生的、不成为状态转变终点的状态,即对任何输入都决不会到达的状态。
利用图19说明步骤S105的“除去未使用状态”的流程。在本流程中使用变量Found。变量Found可以取TRUE或FALSE中的某一值。
首先,使变量Found为FALSE,前进到步骤S1002(步骤S1001)。
接着,设q为包含在状态集合Q中的最初状态,前进到步骤S1003(步骤S1002)。
在处理了包含在状态集合Q中的所有状态q时前进到步骤S1017。除此以外的情况下前进到步骤S1004(步骤S1003)。
在q是初期状态q0时,前进到步骤S1016。除此以外的情况下前进到步骤S1005(步骤S1004)。
在存在以q为终点的状态转变时,前进到步骤S1016。除此以外的情况下前进到步骤S1006(步骤S1005)。
使变量Found为TRUE,前进到步骤S1007(步骤S1006)。
设t为以q为起点的最初的状态转变,前进到步骤S1008(步骤S1007)。
在处理了以q为起点的所有状态转变t时,前进到步骤S1011。除此以外的情况下前进到步骤S1009(步骤S1008)。
从状态转变集合T中去掉状态转变t,前进到步骤S1010(步骤S1009)。
设t为以q为起点的下一个状态转变,前进到步骤S1008(步骤S1010)。
在步骤S1008中处理了以q为起点的所有状态转变t时,设d为以q为输出状态的最初的输出描述,前进到步骤S1012(步骤S1011)。
在处理了以q为输出状态的所有输出描述d时,前进到步骤S1015。除此以外的情况下前进到步骤S1013(步骤S1012)。
从输出描述集合D中删除输出描述d,前进到步骤S1014(步骤S1013)。
设d为以q为输出状态的下一个输出描述,前进到步骤S1012(步骤S1014)。
在步骤S1012中处理了以q为输出状态的所有输出描述d时,从状态集合Q中删除状态q,前进到步骤S1012(步骤S1015)。
设q为包含在状态集合Q中的下一个状态,前进到步骤S1003(步骤S1016)。
在步骤S1003中处理了包含在状态集合Q中的所有状态q的情况下,检查变量Found,在Found为TRUE时前进到步骤S1002。除此以外的情况下结束(步骤S1017)。
通过以上的过程,可执行流程“除去未使用状态”。
流程“除去未使用状态”的目的在于削减存储状态转变表所需的存储容量。所以,即使省略本流程也可以执行流程“对照输入文档”,从而通过省略可缩短“编译对照条件”所需的时间。
下面,利用图20说明步骤S106的“除去冗余状态”的流程。在本流程中,除去2种不需要的状态。第1种情况是具有与基于σother的状态转变相同的终点的状态的状态转变。图42中示出一例。在图42中,即使删除基于转变字符b的、以q3为终点的状态转变,SDFA自动机的动作也相同,从而可以通过删除该状态转变,削减状态转变的总数,削减存储状态转变表所需的存储容量。第2种情况是针对所有转变字符的状态转变的终点相等的多个状态的合并。图43中示出一例。在图43中,在状态q1和q2下针对所有转变字符的状态转变的终点相等,所以可以用合并了状态q1和状态q2的qn=q1∪q2来置换。如果由于该2种情况中的一种删除了状态或状态转变,则由此可能会由于另一种情况而删除状态或状态转变,所以重复这2种情况直至不再删除状态或状态转变。
利用图20说明步骤S106的“除去冗余状态”的流程。在本流程中使用变量StateRemoved及TransitionRemoved。变量StateRemoved及TransitionRemoved可以取TRUE或FALSE中的某一值。
首先,对StateRemoved设定TRUE,前进到步骤S1102(步骤S1101)。
调用流程“删除冗余的状态转变”,前进到步骤S1103。在本流程中设定TransitionRemoved(步骤S1102)。
在TransitionRemoved=FALSE且StateRemoved=FALSE时结束。除此以外的情况下前进到步骤S1104(步骤S1103)。
调用流程“合并冗余状态”,前进到步骤S1105(步骤S1104)。
在TransitionRemoved=FALSE且StateRemoved=FALSE时结束。除此以外的情况下前进到步骤S1102(步骤S1105)。
通过以上的过程,可执行流程“除去冗余状态”。
流程“除去冗余状态”的目的在于削减存储状态转变表所需的存储容量。因此,即使省略本流程也可执行流程“对照输入文档”,从而可以通过省略来缩短“编译对照条件”所需的时间。
下面,说明步骤S1102的流程“删除冗余的状态转变”。本流程相当于“除去冗余状态”的第1种情况,删除图42所示的、具有与基于σother的状态转变相同的终点的状态的状态转变。
利用图21说明步骤S1102的流程“删除冗余的状态转变”。
首先,将变量TransitionRemoved设定成FALSE,前进到步骤S1202(步骤S1201)。
接着,设t为包含在状态转变集合T中的最初的状态转变,前进到步骤S1203(步骤S1202)。
在处理了包含在状态转变集合T中的所有状态t时结束。除此以外的情况下前进到步骤S1204(步骤S1203)。
在Char(t)为σother时,前进到步骤S1205。除此以外的情况下前进到步骤S1210(步骤S1204)。
接着,设t1为以Source(t)为起点的最初的状态转变,前进到步骤S1206(步骤S1205)。
在处理了以Source(t)为起点的所有状态转变t1时,前进到步骤S1210。除此以外的情况下前进到步骤S1207(步骤S1206)。
在t1≠t、且Destination(t1)=Destination(t)时,前进到步骤S1208。除此以外的情况下前进到步骤S1209(步骤S1207)。
从状态转变集合T中删除状态转变t1,前进到步骤S1209(步骤S1208)。
设t1为以Source(t)为起点的下一个状态转变,前进到步骤S1206(步骤S1209)。
在步骤S1204中Char(t)不是σother的情况下,或者在步骤S1206中处理了以Source(t)为起点的所有状态转变t1的情况下,设t为包含在状态转变集合T中的下一个状态转变,前进到步骤S1203(步骤S1210)。
通过以上的过程,可执行流程“删除冗余的状态转变”。
下面,说明步骤1104的流程“合并冗余状态”。本流程合并“除去冗余状态”的第2种情况、即如图43所示的针对所有转变字符的状态转变的终点相等的多个状态。
步骤1104的流程“合并冗余状态”例如可利用非专利文献1等中记载的众所周知的流程来执行。通过该流程,在合并了1个以上的状态时将变量StateRemoved设定成TRUE。除此以外的情况下将变量StateRemoved设定成FALSE。
下面,利用图22说明步骤S107的“生成状态转变表和输出表”。在本流程中,从状态集合25、状态转变集合26以及输出描述集合27中取出状态转变11和输出描述12,分别存储在状态转变表存储部4、输出表存储部12中。
首先,当设包含在状态集合Q中的状态总数为N时,使0~N-1的唯一的状态编号StateId(q)对应于各状态q(步骤S1301)。
从状态转变集合T中取出最初的状态转变t(步骤S1302)。
若处理了包含在状态转变集合T中的所有状态转变t,则前进到步骤S1307。除此以外的情况下前进到步骤S1304(步骤S1303)。
针对当前状态Source(t)、输入字符Char(t)的组,通过散列值计算部31计算散列值32,前进到步骤S1305(步骤S1304)。
向以散列值32作为偏移的状态转变散列指针33追加由当前状态Source(t)、输入字符Char(t)、下一个状态Destination(t)的组构成的状态转变散列链34,前进到步骤S1306(步骤S1305)。
设t为包含在状态转变集合T中的下一个状态转变,前进到步骤S1303(步骤S1306)。
在步骤1303中处理了包含在状态转变集合T中的所有状态转变时,从输出描述集合中取出最初的输出描述d(步骤S1307)。
若处理了包含在输出描述集合D中的所有输出描述d,则结束。除此以外的情况下前进到步骤S130(步骤S1308)。
向对应于State(d)的状态编号StateId(state(d))的条件编号索引41追加Result(d)作为条件编号链42,前进到步骤S1310(步骤S1309)。
设d为包含在输出描述集合D中的下一个输出描述,前进到步骤S1308(步骤S1310)。
通过以上示出的过程,可执行流程“生成状态转变表和输出表”。
下面,利用图23说明流程“对照输入文档”
首先,对状态q设定初始状态q0,前进到步骤S2002(步骤S2001)。
搜索输出表存储部5,输出与q关联的条件编号16。该过程通过依次搜索指向对应于条件编号索引41的当前状态13的状态编号StateId(q)的条件编号链42的指针来实现。若所有的条件编号链42的搜索结束,则前进到步骤S2003(步骤S2002)。
若输入所有结束则结束。除此以外的情况下前进到步骤S2004(步骤S2003)。
从输入字符读取部7获取下一个输入字符14,设为σ,前进到步骤S2005(步骤S2004)。
搜索状态转变表存储部4,检查从状态q起是否存在基于转变字符σ的转变目标qd,即是否存在trans(q,qd,σ)∈T的qd,前进到步骤S2006(步骤S2005)。
在存在转变目标qd时前进到步骤S2007。除此以外的情况下前进到步骤S2008(步骤S2006)。
向q设定qd,前进到步骤S2002(步骤S2007)。
在步骤S2006中不存在qd时,检查从状态q起是否存在基于转变字符σother的转变目标qd,即是否存在trans(q,qd,σother)∈T的qd,前进到步骤S2009(步骤S2008)。
在存在转变目标qd时前进到步骤S2007。除此以外的情况下前进到步骤S2010(步骤S2009)。
向状态q设定q0,前进到步骤S2006。
通过以上的过程,可执行流程“对照输入文档”。
下面,以图44示出的对照条件2和图54示出的输入字符串的情况为例,说明本实施例的字符串对照装置的动作。图44的对照条件使专利文献3中示出的图52的对照条件的表述与本实施例的形式一致,是与图52在逻辑上等价的对照条件。
通过执行步骤S51示出的流程“编译对照条件”,根据图44的对照条件2,生成图45中示出的状态转变表和图46中示出的输出表。另外,设初始状态的状态编号为0。
图45的状态转变表用表来表现对应于存储在状态转变表存储部4中的当前状态13、输入字符14的下一个状态15,例如,在当前状态的状态编号是6、输入字符为“d”时,示出下一个状态为10。在图中,“-”表示不存在下一个状态15,对于这样的组合,状态转变表存储部4可以不消耗存储器地存储。现有的带输出的有限状态自动机如图53所示,需要90个组合,而在图45的例子中,只要存储46个状态转变的信息即可,从而得到削减存储状态转变表所需的存储器的效果。
图46的输出表用表来表现对应于存储在输出表存储部5中的当前状态13的条件编号16的集合,例如,表示当前状态是4时输出条件编号0。
作为一例,在图47中示出以输入字符串“aaca”为输入时的动作。首先,将状态q设定成初始状态(状态0)。接着,读第1个字符的字符“a”,转变成作为在状态0下字符“a”的转变目标的状态2。由于定义了基于字符“a”的转变目标,所以不需要参照σother,在图47中表述为(不需)。接着,读第2个字符的字符“a”,转变成作为在状态2下字符“a”的转变目标的状态5。接着,读第3个字符的字符“c”,转变成作为在状态5下字符“c”的转变目标的状态9。接着,读第4个字符的字符“a”,转变成作为在状态9下字符“a”的转变目标的状态12。这里,结束输入。
在专利文献3中记载的现有技术中,对于同等的条件,必须参照7次状态转变表,但在本实施例中用4次完成。这样,根据本发明,其目的在于使由于转变失败所导致的状态转变表的参照次数为每1个字符2次以下,防止由于重复转变失败所导致的性能降低,从而可执行高速的字符串对照。
另外,图44的对照条件是为了与专利文献3中所述的技术相比较而记载的条件,具有从初始状态起可实现基于所有字符的转变这样的特殊条件。图44的对照条件的目的在于即使对照对象字符串“abcd”中的一个字符变化,也可检测出该字符串,但可以在几乎不变更其目的及对照条件的含义的情况下变换成图48的对照条件。这种情况下,可进一步削减状态转变所需的存储器,从而进一步发挥本实施例的效果。
通过执行步骤S51中示出的流程“编译对照条件”,根据图48的对照条件2,生成图49中示出的状态转变表和图50中示出的输出表。另外,设初始状态的状态编号为0。
图49的状态转变表的含义与图45相同,将必须在状态转变表存储部4中存储的状态转变数削减至23个,从而进一步得到削减必需的存储器的效果。
另外,对于图48的对照条件2,在图51中示出针对输入“xabxd”的动作。由于在状态0中未定义第1个字符“x”的转变目标,所以参照σother,但尽管如此,由于未定义转变目标,所以将下一个状态设为初始状态,即状态0。这时参照了2次状态转变表。接着,基于第2个字符“a”转变成状态3,基于第3个字符“b”转变成状态6。在第4个字符“x”中由于未定义“x”的转变目标,所以参照σother,得到下一个状态1。这时,参照了2次状态转变表。并且,基于第5个字符“d”转变成状态2。由于状态2存在编号0作为成为输出的条件编号16,所以将其输出。这种情况下,状态转变表的参照次数为7次。
另外,如非专利文献1等所述,不具有输出的一般的DFA可视为输出“已受理”、“不受理”这2种信息作为输出字母的特殊的Moore机器。在本实施例中也可构成通过简单判定对照结果中是否存在条件编号、来输出“已受理”、“不受理”这2种信息的字符串对照装置。
另外,在上述实施例中,输入及对照的对象设为“字符”,但“字符”不限于人类可读的字符串,可适用于任意的记号串、数据串。例如,也可适用于识别基因排列或利用传感器等测量出的数据。
另外,在上述实施例中,在状态转变表存储部4中使用状态转变散列表35,但也可以由可以在逻辑上表现数组、树结构等2维结构的表的任何数据结构来实现。
另外,对于初始状态等使用频率高的状态,使用访问速度高的数组等数据结构,对于使用频率低的状态,可以同时使用存储容量的效率高的散列表或树结构等数据结构。
另外,在上述实施例中,在输出表存储部5中使用条件编号索引41,但也可以利用可以在逻辑上表现树结构或散列表等1维结构表的任何数据结构来实现。
产业上的可利用性
本发明可适用于字符串对照装置。

Claims (17)

1、一种字符串对照装置,其特征在于,具备:
状态转变表生成部,根据用正规表达描述的对照条件,生成状态转变表;和
自动机,根据由所述状态转变表生成部生成的状态转变表进行转变,
其中,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述自动机不继续读入输入字符,而是转变到初始状态。
2、根据权利要求1所述的字符串对照装置,其特征在于:
在输入了多个对照条件时,所述状态转变表生成部根据状态的合并来进行输出描述的合并,生成输出表,
所述自动机根据所述输出表进行输出。
3、根据权利要求1所述的字符串对照装置,其特征在于:
所述状态转变表生成部在生成状态转变表时,当基于规定的转变字符σ可以从初始状态q0转变成规定的状态q1、并且可以基于所述规定的转变字符σ从任意状态q转变时,追加基于所述规定的转变字符σ的、从所述任意状态q向所述规定状态q1的状态转变。
4、根据权利要求1所述的字符串对照装置,其特征在于:
所述状态转变表生成部利用散列表构成所述状态转变表。
5、一种字符串对照装置,其特征在于,具备:
状态转变表生成部,根据用正规表达描述的对照条件,生成状态转变表;和
自动机,根据由所述状态转变表生成部生成的状态转变表进行转变,
其中,当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述状态转变表生成部不继续读入输入字符,而是设定向规定状态转变的除外字符,生成状态转变表。
6、根据权利要求5所述的字符串对照装置,其特征在于:
当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,所述状态转变表生成部不继续读入输入字符,而是生成向初始状态转变的状态转变表。
7、根据权利要求5所述的字符串对照装置,其特征在于:
在输入了多个对照条件时,所述状态转变表生成部根据状态的合并来进行输出描述的合并,生成输出表,
所述自动机根据所述输出表进行输出。
8、根据权利要求5所述的字符串对照装置,其特征在于:
当从某个状态起存在基于任意字符的转变目标q1和基于规定的转变字符σ的转变目标q2时,所述状态转变表生成部用所述除外字符置换所述任意字符,并且用合并了q1和q2的状态来置换基于所述规定的转变字符σ的转变目标。
9、根据权利要求5所述的字符串对照装置,其特征在于:
当从某个状态起存在多个基于所述除外字符的转变目标的状态时,所述状态转变表生成部用合并后的状态来置换该多个状态。
10、根据权利要求5所述的字符串对照装置,其特征在于:
所述状态转变表生成部在合并规定的状态q1、q2时,在从q2起基于所述除外字符将状态转变至q3的情况下,合并以q1为起点的状态转变目标和q3
11、根据权利要求5所述的字符串对照装置,其特征在于:
所述状态转变表生成部在生成NFA时,生成将基于“.”的转变作为任意字符转变的状态转变。
12、根据权利要求5所述的字符串对照装置,其特征在于:
所述状态转变表生成部在生成NFA时,将基于“^a”的转变置换成基于字符a的转变和基于除外字符σother的转变。
13、根据权利要求5所述的字符串对照装置,其特征在于:
所述状态转变表生成部在通常字符和除外字符σother转变成相同状态时,删除基于通常字符的状态转变。
14、根据权利要求13所述的字符串对照装置,其特征在于:
在通常字符和除外字符σother转变成相同状态时,在删除了基于通常字符的状态转变后,合并对于所有字符都转变成相同状态的多个状态,并且,在合并了对于所有字符都转变成相同状态的多个状态之后,在通常字符和除外字符σother转变成相同状态时,删除基于通常字符的状态转变。
15、根据权利要求5所述的字符串对照装置,其特征在于:
所述状态转变表生成部利用散列表构成所述状态转变表。
16、一种控制计算机来执行字符串对照的字符串对照程序,使所述计算机执行如下处理:
根据用正规表达描述的对照条件,生成状态转变表;和
根据由所述状态转变表生成部生成的状态转变表进行转变,并且当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,不继续读入输入字符,而是转变到初始状态。
17,一种控制计算机来执行字符串对照的字符串对照程序,使所述计算机执行如下处理:
根据用正规表达描述的对照条件生成状态转变表,并且当根据所述对照条件生成的状态转变表中不存在针对当前状态和输入字符的组的下一个转变目标状态时,不读入输入字符,而是设定转变到规定状态的除外字符,生成状态转变表;和
根据由所述状态转变表生成部生成的状态转变表进行转变。
CNB2004800445705A 2004-12-09 2004-12-09 字符串对照装置 Active CN100524301C (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2004/018348 WO2006061899A1 (ja) 2004-12-09 2004-12-09 文字列照合装置および文字列照合プログラム

Publications (2)

Publication Number Publication Date
CN101076798A true CN101076798A (zh) 2007-11-21
CN100524301C CN100524301C (zh) 2009-08-05

Family

ID=36577729

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004800445705A Active CN100524301C (zh) 2004-12-09 2004-12-09 字符串对照装置

Country Status (4)

Country Link
US (1) US8032479B2 (zh)
JP (1) JP4535130B2 (zh)
CN (1) CN100524301C (zh)
WO (1) WO2006061899A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102542038A (zh) * 2011-12-27 2012-07-04 浪潮通信信息系统有限公司 一种通用可配置的标准局数据入库方法
CN103733590A (zh) * 2011-06-24 2014-04-16 凯为公司 用于正则表达式的编译器

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム
US20070226362A1 (en) * 2006-03-21 2007-09-27 At&T Corp. Monitoring regular expressions on out-of-order streams
US8903840B2 (en) * 2006-08-31 2014-12-02 International Business Machines Corporation System and method for launching a specific program from a simple click on a string of characters
JP5120263B2 (ja) * 2007-01-12 2013-01-16 日本電気株式会社 パターンマッチング装置及び方法
US7630982B2 (en) * 2007-02-24 2009-12-08 Trend Micro Incorporated Fast identification of complex strings in a data stream
US20090006316A1 (en) * 2007-06-29 2009-01-01 Wenfei Fan Methods and Apparatus for Rewriting Regular XPath Queries on XML Views
JP5224953B2 (ja) * 2008-07-17 2013-07-03 インターナショナル・ビジネス・マシーンズ・コーポレーション 情報処理装置、情報処理方法およびプログラム
FR2939535B1 (fr) * 2008-12-10 2013-08-16 Canon Kk Procede et systeme de traitement pour la configuration d'un processseur exi
US8862603B1 (en) * 2010-11-03 2014-10-14 Netlogic Microsystems, Inc. Minimizing state lists for non-deterministic finite state automatons
US8990259B2 (en) 2011-06-24 2015-03-24 Cavium, Inc. Anchored patterns
JP5657840B2 (ja) 2011-08-02 2015-01-21 カビウム・インコーポレーテッド ルックアップ・フロントエンド・パケット出力プロセッサ
JP5554304B2 (ja) * 2011-09-16 2014-07-23 株式会社東芝 オートマトン決定化方法、オートマトン決定化装置およびオートマトン決定化プログラム
US8818783B2 (en) * 2011-09-27 2014-08-26 International Business Machines Corporation Representing state transitions
US8775393B2 (en) * 2011-10-03 2014-07-08 Polytechniq Institute of New York University Updating a perfect hash data structure, such as a multi-dimensional perfect hash data structure, used for high-speed string matching
US9336194B2 (en) 2012-03-13 2016-05-10 Hewlett Packard Enterprises Development LP Submatch extraction
US9558299B2 (en) 2012-04-30 2017-01-31 Hewlett Packard Enterprise Development Lp Submatch extraction
US8725749B2 (en) * 2012-07-24 2014-05-13 Hewlett-Packard Development Company, L.P. Matching regular expressions including word boundary symbols
US8793251B2 (en) * 2012-07-31 2014-07-29 Hewlett-Packard Development Company, L.P. Input partitioning and minimization for automaton implementations of capturing group regular expressions
US8938454B2 (en) * 2012-10-10 2015-01-20 Polytechnic Institute Of New York University Using a tunable finite automaton for regular expression matching
US9268881B2 (en) 2012-10-19 2016-02-23 Intel Corporation Child state pre-fetch in NFAs
US9117170B2 (en) 2012-11-19 2015-08-25 Intel Corporation Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel
US9665664B2 (en) 2012-11-26 2017-05-30 Intel Corporation DFA-NFA hybrid
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9251440B2 (en) * 2012-12-18 2016-02-02 Intel Corporation Multiple step non-deterministic finite automaton matching
US9268570B2 (en) 2013-01-23 2016-02-23 Intel Corporation DFA compression and execution
US20140271326A1 (en) 2013-03-15 2014-09-18 3D Systems, Inc. Powder Distribution for Laser Sintering Systems
US9086688B2 (en) * 2013-07-09 2015-07-21 Fisher-Rosemount Systems, Inc. State machine function block with user-definable actions on a transition between states
WO2015084360A1 (en) * 2013-12-05 2015-06-11 Hewlett-Packard Development Company, L.P. Regular expression matching
US9275336B2 (en) 2013-12-31 2016-03-01 Cavium, Inc. Method and system for skipping over group(s) of rules based on skip group rule
US9544402B2 (en) 2013-12-31 2017-01-10 Cavium, Inc. Multi-rule approach to encoding a group of rules
US9667446B2 (en) 2014-01-08 2017-05-30 Cavium, Inc. Condition code approach for comparing rule and packet data that are provided in portions
US11782983B1 (en) * 2020-11-27 2023-10-10 Amazon Technologies, Inc. Expanded character encoding to enhance regular expression filter capabilities

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4764863A (en) * 1985-05-09 1988-08-16 The United States Of America As Represented By The Secretary Of Commerce Hardware interpreter for finite state automata
JP2702927B2 (ja) * 1987-06-15 1998-01-26 株式会社日立製作所 文字列検索装置
US5309358A (en) * 1992-02-18 1994-05-03 International Business Machines Corporation Method for interchange code conversion of multi-byte character string characters
JP2994926B2 (ja) 1993-10-29 1999-12-27 松下電器産業株式会社 有限状態機械作成方法とパターン照合機械作成方法とこれらを変形する方法および駆動方法
JP4021832B2 (ja) 1996-06-27 2007-12-12 富士通株式会社 スパースな状態遷移表に基づく複数記号列の照合装置および方法
JP4118363B2 (ja) * 1996-06-27 2008-07-16 富士通株式会社 スパースな状態遷移表に基づく複数記号列の照合装置および方法
JP4056962B2 (ja) 1996-06-27 2008-03-05 富士通株式会社 スパースな状態遷移表に基づく複数記号列の照合装置および方法
US5995963A (en) * 1996-06-27 1999-11-30 Fujitsu Limited Apparatus and method of multi-string matching based on sparse state transition list
JP3231673B2 (ja) * 1996-11-21 2001-11-26 シャープ株式会社 文字,文字列検索方法及び該方法に用いる記録媒体
EP1436718B1 (en) * 2001-09-12 2007-09-19 SafeNet, Inc. Method of generating a DFA state machine that groups transitions into classes in order to conserve memory
WO2003023548A2 (en) * 2001-09-12 2003-03-20 Raqia Networks, Inc. High speed data stream pattern recognition
US7346511B2 (en) * 2002-12-13 2008-03-18 Xerox Corporation Method and apparatus for recognizing multiword expressions
US7552051B2 (en) * 2002-12-13 2009-06-23 Xerox Corporation Method and apparatus for mapping multiword expressions to identifiers using finite-state networks
US7305391B2 (en) * 2003-02-07 2007-12-04 Safenet, Inc. System and method for determining the start of a match of a regular expression
US7180328B2 (en) * 2003-05-23 2007-02-20 Sensory Networks, Inc. Apparatus and method for large hardware finite state machine with embedded equivalence classes
US20050273450A1 (en) * 2004-05-21 2005-12-08 Mcmillen Robert J Regular expression acceleration engine and processing model
US7539681B2 (en) * 2004-07-26 2009-05-26 Sourcefire, Inc. Methods and systems for multi-pattern searching
US7356663B2 (en) * 2004-11-08 2008-04-08 Intruguard Devices, Inc. Layered memory architecture for deterministic finite automaton based string matching useful in network intrusion detection and prevention systems and apparatuses

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103733590A (zh) * 2011-06-24 2014-04-16 凯为公司 用于正则表达式的编译器
CN102542038A (zh) * 2011-12-27 2012-07-04 浪潮通信信息系统有限公司 一种通用可配置的标准局数据入库方法

Also Published As

Publication number Publication date
WO2006061899A8 (ja) 2007-08-30
CN100524301C (zh) 2009-08-05
JPWO2006061899A1 (ja) 2009-09-03
BRPI0419214A (pt) 2008-04-15
US8032479B2 (en) 2011-10-04
US20080109431A1 (en) 2008-05-08
WO2006061899A1 (ja) 2006-06-15
JP4535130B2 (ja) 2010-09-01

Similar Documents

Publication Publication Date Title
CN101076798A (zh) 字符串对照装置及字符串对照程序
CN1290031C (zh) 字符信息的转换处理系统
CN1763743A (zh) 图表上的自动标签放置系统和方法
CN1107911C (zh) 文件管理装置和方法
CN1331449A (zh) 用于将粘着法构成的文本或文档分段成词的字符串划分或区分的方法及相关系统
CN1750003A (zh) 信息处理装置,信息处理方法,和程序
CN101040554A (zh) 移动目标预测装置和移动目标预测方法
CN1845021A (zh) 指令生成装置
CN1910601A (zh) 限制条件解决方法、限制条件解决装置、以及限制条件解决系统
CN1677570A (zh) 写入多值数据的非易失性半导体存储装置
CN1813252A (zh) 信息处理方法、信息处理程序、信息处理装置及摇控器
CN1991801A (zh) 访问控制设备、方法和存储器访问控制设备、方法
CN101044450A (zh) 处理器
CN1160704C (zh) 音程变换装置
CN1106941A (zh) 逻辑电路的自动设计方法、系统、装置和乘法器
CN101030119A (zh) 用于显示图表和图形的图形显示控制装置
CN1866385A (zh) 内容再现装置、内容再现方法以及程序
CN1296825C (zh) 模拟器及模拟方法
CN1017489B (zh) 数字调制方法
CN1533530A (zh) 信息处理设备和方法
CN1825355A (zh) 计算机图形数据编码装置、解码装置、编码和解码方法
CN1529889A (zh) 相联存储器系统、网络设备及网络系统
CN1405703A (zh) 转换器、转换方法、加密/解密系统、程序和记录媒体
CN1201209A (zh) 信息处理装置
CN1604231A (zh) 存储器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant