用于多正则表达式联合搜索的扩展有限状态机及搜索方法

文档序号:6339490阅读:162来源:国知局
专利名称:用于多正则表达式联合搜索的扩展有限状态机及搜索方法
技术领域
本发明涉及一种用于实现多正则表达式联合搜索的扩展有限状态 机,也涉及利用该扩展有限状态机实现字符串搜索的方法,属于计算机 技术领域。
背景技术
随着IT技术的发展,信息量呈爆炸性增长趋势,信息检索占据了越 来越重要的地位。基于正则表达式的搜索方法,由于实现简单、性能高 效,在字符串搜索中得到了广泛应用,并且出现了一大批成熟的支持工 具,grep、 egrep、 awk、 sed等就是其中的典型代表。
正则表达式(Regular Expression),又称正规表达式或常规表达式, 常用来描述或匹配一系列符合某个句法规则的字符串。简单地说, 一个 正则表达式是由普通字符(例如字符a到z)以及特殊字符(称为元字符) 组成的文字模式,该模式描述在查找文字主体时待匹配的一个或多个字 符串。正则表达式及后文提及的有限状态机等内容,是计算机领域人员 的公共常识,此处及后文不再赘述。
基于正则表达式的搜索方法, 一般先把正则表达式转换成对应的有 限状态机,然后基于有限状态机来完成搜索过程。有限状态机有两种基 本形态不确定性有限状态机(NFA)和确定性有限状态机(DFA)。不确定 性有限状态机M是一个五元式,M=(Q, VtU{e}, S, qO, F),其中,Q 为有穷状态集合,Vt为输入字母表,e为空串,S为状态转换函数,q0 为始态,F为终止状态集。确定性有限状态机M也是一个五元式,M-(Q, Vt, S, q0, F},其中,各个参数的含义与不确定性有限状态机中对应参数 的含义相同。二者的区别在于,NFA可以接受空串e作为输入并且状态转 换函数允许是多值的,DFA不能接受空串e作为输入并且状态转换函数必 须是单值的。不确定性有限状态机和确定性有限状态机的描述能力是等 价的,可以相互转换,转换的方法可以采用现在广泛采用的子集构造算 法。
目前流行的基于正则表达式的搜索方法,多以单个正则表达式为处
理对象。如果要同时搜索多个正则表达式, 一般有两种处理方法 一种 是对每个子正则表达式分别进行搜索,最后把各次得到的搜索结果合并; 另一种是通过选择运算把这些子正则表达式结合成一个新的正则表达 式,然后对新得到的正则表达式进行搜索。无论采用哪种方法,均存在 一定不足。第一种方法弊病在于扫描遍数过多,速度太慢;第二种方法 搜索速度很快,然而却损失了单个正则表达式的信息,如果不添加额外 处理,通过选择运算后得到的新正则表达式无法区分出组成它的各个子 正则表达式。这种"只见森林不见树木"的处理方法,在很多场合都是 不方便的。比如,如果不对搜索过程添加特殊处理例程,该方法无法知 道搜索结果到底匹配了哪个子正则表达式。
如何高效地并行搜索多个正则表达式,同时又有效保留原有的单个 正则表达式的信息,是字符串搜索中的一个常见问题。实际中,多采用 上述提及的第二种方法,这样可以获得较快的搜索速度,但需要用户手 工编写特别的处理例程,给用户带来了额外的处理负担。
字符串搜索另一个常见问题是字符串的回退。例如考虑从字符串 "This is a black box"中同时搜索"black"和"lack"两个正则表 达式,在搜索到了 "black"之后,必须把匹配的字符串回退到源字符串 中,否则"lack"就不会得到匹配。在现有技术中,对于单个正则表达 式的回退处理比较容易,只需把已匹配的字符串全部回退到源字符串中, 同时把相应的有限状态机重置到开始状态即可。对于同时搜索多个正则 表达式的回退,处理起来比较复杂,目前多是通过用户编写额外的处理 例程解决,加重了用户的处理负担。

发明内容
本发明的首要目的在于提供一种用于实现多正则表达式联合搜索的 扩展有限状态机。该扩展有限状态机通过对传统有限状态机的功能扩展, 可以一遍扫描同时搜索多个正则表达式,同时又可以有效保留单个正则 表达式的信息。
本发明的另外一个目的是提供上述扩展有限状态机实现字符串搜索 的方法。
为实现上述的发明目的,本发明采用下述的技术方案
一种用于多正则表达式联合搜索的扩展有限状态机,包括有穷状态 集合、输入字母表、状态转换函数、始态和终止状态集,其特征在于还包括
状态标识集合,用于给状态机中的每一个状态加一个标识; 状态与状态标识的映射函数,用于通过该函数计算出一个给定状态 的状态标识;
状态转换函数的标识集合,用于给状态机中的每一个状态转换关系都引入一个唯一的标识;
状态转换函数与状态转换函数标识的映射函数,用于计算与一条状态转换关系对应的标识。
所述扩展有限状态机分为扩展非确定性有限状态机和扩展确定性有限状态机;
其中,扩展非确定性有限状态机中的状态转换函数允许是多值的, 扩展确定性有限状态机不接受空串作为输入并且状态转换函数必须是单 值的。
一种基于扩展有限状态机的多正则表达式联合搜索方法,其特征在于
(1) 构造同时识别多个正则表达式的扩展非确定性有限状态机或扩 展确定性有限状态机;
(2) 分配一个足够大的状态转换函数标识空间S,该空间中的每一个 元素用来存放一个状态转换函数标识,用变量flag标识该空间的使用状 况,置flag-O;记当前状态标识集合U= P (q。),其中q。为自动机的始 态;
(3) 正向搜索时,每当调用一次状态转换函数δ (p, a)=q,则自动 执行下面三个步骤
u=un p (q),
S[flag] = w (p, a, q),
flag=flag+l,
(4) 逆向回退字符时
(4. l)如果只沿着某个特定的正则表达式回退,若该正则表达式 的标识为i,执行如下步骤记状态机当前状态为m,若i∈p(m),则可 以回退字符,否则停止回退,若可以回退字符,则査找状态转换函数标 识空间对应的状态转换标识函数ω(p, a, m),然后把字符a回退回输入串中,同时把p设为当前状态,执行flag=flag-l,即flag自动减l,释放标识空间,若继续回退字符,则重复本步骤,否则结束回退;
(4. 2)如果不沿着某个特定的正则表达式回退,则执行如下步骤 记状态机当前状态为m,査找状态转换函数标识空间对应的状态转换标识 函数w(p, a, m),然后把字符a回退回输入串中,同时把p设为当前状 态,执行flag=flag-1,若继续回退字符,则重复本步骤,否则结束回 退。
所述步骤(l)中,构造同时识别多个正则表达式的扩展非确定性有限 状态机E-NFA包括如下步骤
(11) 为多个子正则表达式的每一个分别构造相应的扩展非确定性 有限状态机E-NFA ;
(12) 增加一个新的始态s作为E-NFA的始态,从s到(ll)中构造的 各个E-NFAm的始态分别引一条e弧,把s作为E-NFA的始态;增加一个 新的终态e作为E-NFA的终态,从各个E-NFA,的终态分别引入一条e弧 到e;
(13) 计算状态集,该状态集为各个E-NFAm的状态集加上步骤(ll)新
生成的始态和终态;
(14) 计算状态转换函数,各个E-NFl的状态转换关系均为E-NFA中 有效的状态转换函数关系,步骤(11)中新添加的状态转换关系也是E-NFA 中有效的状态转换函数关系;
(15) 计算状态标识集合,该集合为各个E-NFl的状态标识集合的合
集;
(16) 计算状态与状态标识的映射函数,其中E-NFA的始态s的状态 标识为各个E-NFA^的始态的状态标识之和,E-NFA的终态e的状态标识为 各个E-NFAm的终态集的状态标识之和,各个E-NFA^中每个映射函数关系 都是E-NFA中的有效映射函数关系;
(17) 计算状态转换函数与状态转换函数标识的映射函数,其中各个 E-NFAm中的每个映射函数关系都是E-NFA中的有效映射函数关系;对步骤 (ll)新添加的每一个状态转换函数,生成一个唯一的标识,将该标识加 入到集合N,中,并且在映射函数中记录;
(18) 计算状态转换函数标识集合,E-NFA的状态转换函数标识集合 为各个E-NFAm的状态转换函数标识集与步骤(16)新生成的N^的合集;
(19) 计算字母表,E-NFA的字母表为各个E-NFm字母表的合集;
(20)计算终态集合,E-NFA的终态集合为各个E-NFA,终态集合之和 加上步骤(ll)新生成的终态e。
所述步骤(1)中,首先按照上述的方法构造识别多个正则表达式的 扩展非确定性有限状态机,然后按照确定化方法将其构造成扩展确定性 有限状态机。
本发明通过扩展传统的有限状态机,给状态引入标识,同时给状态 转换函数也引入标识,从而可以有效解决上述提及的串搜索中的两个常 见问题,用户无需编写额外例程即可实现高效的多正则表达式的并行搜 索,又可以保留单个正则表达式的信息,同时可以有效处理字符串回退。
具体实施例方式
本发明的核心技术思想在于扩充了传统的非确定性有限状态机和确 定性有限状态机,给其引入了状态标识和状态转换函数标识,本发明人 将其分别命名为扩展非确定性有限状态机和扩展确定性有限状态机,它 们的定义如下
定义1扩展非确定性有限状态机(E-NFA)
扩展非确定性有限状态机M是一个九元式,M=(Q, P, N, VtU{ε}, rho , ω , δ , q0, F)。其中
Q、 Vt、 ε、 δ、 q0、 F的含义与非确定性有限状态机中对应参数含义相同;
P表示有穷状态标识集合;
N表示有穷状态转换函数标识集合;
rho表示状态与状态标识的映射函数,为Q->2P,其中2P表示P的 幂集;
ω表示状态转换函数与状态转换函数标识的映射函数,为QX (Vt
U { ε } ) XQ->N的映射。
定义2 扩展确定性有限状态机(E-DFA)
扩展确定性有限状态机M是一个九元式,M=(Q, P, N, VtU{ε}, rho , ω , δ , q0, F),其中
Q、 Vt、 δ、 q0、 F、 P、 N、 rho的含义与确定性有限状态机中对应 参数含义相同;
ω表示状态转换函数与状态转换函数标识的映射函数,为QXVt XQ-〉N的映射。
定义3令P是一状态机M的状态集的子集,定义P (P)为<formula>see original document page 10</formula>
同时搜索多个正则表达式时,传统方法一般通过选择运算先把各个 子正则表达式结合成一个新的正则表达式,然后基于新得到的正则表达 式完成搜索过程。这样做的不足之处在于新得到的正则表达式中见不 到组成它的各个子正则表达式的信息。因此,即使某个字符串匹配了新 得到的正则表达式,也无法获知到底匹配了哪个子正则表达式,除非人 工编写特定例程去记录这些信息。为了弥补这个不足,本发明在传统的 五元有限状态机的基础上引入了两个新的参数P和P ,相当于给有限状 态机的每一个状态都加一个标签,该标签可以记录一些附加信息,如该 状态属于原来的哪个子正则表达式等。
有限状态机在进行状态转换时有一个特点即使正向的状态转换都 是单值的,逆向回退时也可能是多值的。比如,对于状态转换关系δ(m, a)=q、 δ (n, a)=q,状态m和n在遇到字符a时都转移到状态q,正向的 状态转移都是单值的,可在状态q逆向回退时却有两条不同的回退路径。 对于此类情况,试探每一条回退路径是可能的,但这样做一来速度太慢, 二来选择的回退路径可能根本就是错误的。因此,有必要记下正向搜索 时所用过的状态转换函数序列,这样,就可以唯一地确定正向搜索时的 运行轨迹,从而可以有效的沿着该轨迹回退回去。本质上,这是一种以 空间换时间的策略。因此,本发明给传统的有限状态机引入了另外两个 参数N和ω,给每个状态转换函数都打上一个唯一标识(标签),所有这 些标识(标签)就构成了集合N,ω定义了状态转换函数与状态转换函数标 识(标签)的映射关系。
根据所基于状态机的不同形态(NFA或DFA),扩展后的状态机也包括 两种扩展非确定性有限状态机和扩展确定性有限状态机,分别记为 E-NFA和E-DFA。
E-NFA和E-DFA是本发明所述的多正则表达式联合搜索的基础,下面 的算法说明了如何构造E-NFA和E-DFA。
算法l:构造识别单个正则表达式的E-NFA
算法输入 一个单个的正则表达式Reg
算法输出Reg对应的E-NFA=(Q, P, N, VtU { ε }, p, ω, δ , q。,
F)
算法步骤
(1) 给正则表达式Reg生成一个唯一的编号标识i;
(2) 置集合P二U),置集合N为空集;
(3) 以Thompson结构为基础,构造识别Reg的标准NFA,这样可以得 到Q、 Vt、 S, q。, F五个参数。(由正则表达式构造其对应的标准NFA的 算法可参考编译原理教科书);
(4) 对状态集合Q中的每一个状态q,加入p(q)二i;
(5) 对每一个状态转换函数S (p, a)=q,生成一个唯一的标识j,把 j加入到集合N中,并且记w(p, a, q)二j。
构造可以同时识别K个正则表达式的E-NFA时,首先按照算法1构 造识别每个子正则表达式的E-NFAm(l《ra《K, K>1),然后执行算法2。
算法2:构造同时识别K个正则表达式的E-NFA
算法输入K个正则表达式对应的E-NFA =(Qm Pm, Nm, VtmU{e}, p m, " m, 5 m, q0m, Fm)
算法输出同时识别K个正则表达式的E_NFA=(Q, P, N, VtU{e}, P , co , S , q0, F)
算法步骤
(1) 增加一个新的始态s作为E-NFA的始态,从s到各个E-NFAb的始 态分别引一条e弧,置q。-s;增加一个新的终态e作为E-NFA的终态, 从各个E-NFAm的终态分别引入一条e弧到e。
(2) 计算状态集Q。 Q-Q!UQ2U…UQhUQkU {s, e},即E-NFA的状 态集为各个E-NFAm的状态集加上步骤(l)新生成的始态和终态。
(3) 计算状态转换函数5 。各个E-NFA^的状态转换关系"均为E-NFA 中有效的5关系,步骤(l)中新添加的状态转换关系也是E-NFA中有效的 S关系。
(4) 计算状态标识集合P。 P = P,UP2U…UPhUPk,即E-NFA的状态 标识集合P为各个E-NFAm的状态标识集合的合集。
(5) 计算状态与状态标识的映射函数P 。
P (s) = P (q。J U p (q。2) U…U p (q。k—,) U p (q。k),即E-NFA的始态s的状态标识为各个E-NFAm 的始态的状态标识之和。p (e)=p (F》u p (F2)u…u p (Fk—,)u p (Fk), 即E-NFA的终态e的状态标识为各个E-NF^的终态集的状态标识之和。 此外,各个E-NFA^中每个p m关系都是E-NFA中的有效p关系。
(6) 计算状态转换函数与状态转换函数标识的映射函数co。各个 E-NFAm中的每个"m关系都是E-NFA中的有效co关系;对步骤(l)新添加的 每一个状态转换函数S (p, a)=q,生成一个唯一的标识j,把j加入到 集合N^中,并且记co(p, a, q)=j。
(7) 计算状态转换函数标识集合N。 N-^UNsU…UNhUNkUN^,即 E-NFA的状态转换函数标识集合N为各个E-NFAm的状态转换函数标识集与 步骤(6)新生成的&。 的合集。
(8) 计算字母表Vt。 Vt = VtlUVtlU…UVtHUVtK,艮卩E-NFA的字母表 为各个E-NFAm字母表的合集。
(9) 计算终态集合F。 E-NFA的终态集合F为各个E-NFAm终态集合之 和加上步骤(l)新生成的终态e。
'如果想获得更快的处理速度,可以对E-NFA做确定化处理,得到E-NFA 对应的E-DFA,然后基于新产生的E-DFA来进行字符串搜索。算法3以经 典的子集构造算法为骨架,给出了由E-NFA构造对应的E-DFA的方法。
算法3:由E-NFA构造E-DFA的确定化方法
算法输入 一个E-NFA=(Q, P, N, VtU{e}, p, co , S, q。, F)
算法输出E-NFA对应的E-DFA=(q, , P, , N, , Vt, , p,,",, S , , q。, , F,)
算法步骤
(1) 初始化。
(1. l)计算e -closure(q。)。初始时,e-closure (qQ)是Q,的唯—— 个状态,并且把该状态标记为未处理状态;(e -closure为状态的e闭包 计算操作)
(1. 2)利用定义3计算P ( e -closure (q。)); (1.3)置P, =P, Vt, =Vt, q。, = e -closure (q0)
(2) 当Q'存在一个未处理的状态T,把状态T标识为已处理状态,检 查字母表中的每一个字符在状态T下所能转移到的状态集合U,如果U不 在集合Q'中,按照定义3计算P' (U),把U标记为未处理状态并加入
到集合Q'中。不断重复本步骤直到Q'中的每一个状态都为已处理状态。
(3) 对(2)中得到的每一个状态转换关系S ' (p, a)=q(p、 qEQ' , a
EVt,),生成一个唯一的标识j,把j加入到集合N'中,并且记o)' (p, a, q)=j。
(4)把E-DFA中包含E-NFA终态的所有状态都加入E-DFA的终态集合 F'。
上面介绍了能同时识别多个正则表达式的扩展有限状态机(E-NFA或 E-DFA)的构造过程,下面进一步介绍如何基于扩展的有限状态机来同时 搜索多个正则表达式。
(1) 利用算法2或算法3构造同时识别多个正则表达式的E-NFA或 E-DFA。
(2) 初始化搜索过程。分配一个足够大的状态转换函数标识空间S, 该空间中的每一个元素用来存放一个状态转换函数标识。用变量flag标 识该空间的使用状况,置flag = 0;记当前状态标识集合U= P (q。)( q。 为自动机的始态)。
(3) 正向搜索时,每当调用一次状态转换函数5 (p, a)=q,则自动
调用下面三条语句
u=un p (q) /*将新状态标识与已有状态标识集合
*的交集放入当前状态标识集合U中, *用于确定目前匹配的正则表达式集合*/
S[flag]="(p, a, q) /*记录当前所用的状态转换函数,
*把其标识存入空间s*/
flag = flag+l /*空间的使用数目加1*/
(4) 逆向回退字符时
(4. l)如果只沿着某个特定的正则表达式回退,若该正则表达式的 标识为i,执行如下步骤记状态机当前状态为m,若iep(m),则可以 回退字符,否则停止回退。若可以回退字符,则查找S[flag]对应的状态 转换标识函数co(p, a, ra),然后把字符a回退回输入串中,同时把p设 为当前状态,执行flag=flag-1,即flag自动减l,释放标识空间。若 继续回退字符,则重复本步骤,否则结束回退;
(4.2)如果不沿着某个特定的正则表达式回退,则执行如下步骤 记状态机当前状态为ra,查找S[flag]对应的状态转换标识函数"(p, a, m),然后把字符a回退回输入串中,同时把p设为当前状态,执行flag -flag-1。若继续回退字符,则重复本步骤,否则结束回退。
上述步骤中的变量U记录了当前所匹配的状态标识的集合,根据这 个参数,就可以获知该状态属于哪一个子正则表达式,从而可以获知哪个正则表达式得到了匹配。同时,借助于P、 co,可以有效记录正向的 执行轨迹,从而可以方便的处理回退。这样,用户无需添加额外的处理 例程,就可有效解决前文提及的串搜索中的两个常见问题。
需要指出的是
(1) 如果要基于E-DFA来搜索,不一定要把正则表达式先转换成 E-NFA,然后再把E-NFA转换成E-DFA。实际上,存在由正则表达式直接 构造其对应的DFA的算法,因此,理论上讲,可以由正则表达式直接构 造其对应的E-DFA。
(2) 上述给出的搜索执行流程只是一个总体框架,实际中可以做进一 步的优化,比如,如果U中只包含一个元素,则后续步骤中不必再计算U =un p (q)。
以上对本发明的具体实施方式
进行了详细的解说。对于本技术领 域的一般技术人员来说,在不背离本发明所述方法的精神和权利要求 范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围 之内。
权利要求
1.一种用于多正则表达式联合搜索的扩展有限状态机,包括有穷状态集合、输入字母表、状态转换函数、始态和终止状态集,其特征在于还包括状态标识集合,用于给状态机中的每一个状态加一个标识;状态与状态标识的映射函数,用于通过该函数计算出一个给定状态的状态标识;状态转换函数的标识集合,用于给状态机中的每一个状态转换关系都引入一个唯一的标识;状态转换函数与状态转换函数标识的映射函数,用于计算与一条状态转换关系对应的标识。
2. 如权利要求l所述的用于多正则表达式联合搜索的扩展有限状态 机,其特征在于所述扩展有限状态机分为扩展非确定性有限状态机和扩展确定性有 限状态机;其中,扩展非确定性有限状态机中的状态转换函数允许是多值的, 扩展确定性有限状态机不接受空串作为输入并且状态转换函数必须是单 值的。
3. —种基于扩展有限状态机的多正则表达式联合搜索方法,其特征在于-(1) 构造同时识别多个正则表达式的扩展非确定性有限状态机或扩 展确定性有限状态机;(2) 分配一个足够大的状态转换函数标识空间S,该空间中的每一个 元素用来存放一个状态转换函数标识,用变量flag标识该空间的使用状况,置flag二0;记当前状态标识集合U= P(qn),其中qη为自动机的始态;(3)正向搜索时,每当调用一次状态转换函数δ(p,a)=q,则自动 执行下面三个步骤U=U∩P(q),S[flag] = ω(p, a, q),flag= flag+l , (4)逆向回退字符时(4. l)如果只沿着某个特定的正则表达式回退,若该正则表达式 的标识为i,执行如下步骤记状态机当前状态为m,若iep(m),则可 以回退字符,否则停止回退,若可以回退字符,则査找状态转换函数标 识空间对应的状态转换标识函数co(p, a, m),然后把字符a回退回输入 串中,同时把P设为当前状态,执行flag = flag-1,即flag自动减l, 释放标识空间,若继续回退字符,则重复本步骤,否则结束回退;(4.2)如果不沿着某个特定的正则表达式回退,则执行如下步骤 记状态机当前状态为m,査找状态转换函数标识空间对应的状态转换标识 函数w(p, a, m),然后把字符a回退回输入串中,同时把p设为当前状 态,执行flag=flag-1,若继续回退字符,则重复本步骤,否则结束回 退。
4.如权利要求3所述的基于扩展有限状态机的多正则表达式联合搜 索方法,其特征在于-所述步骤(l)中,构造同时识别多个正则表达式的扩展非确定性有限 状态机E-NFA包括如下步骤(11) 为多个子正则表达式的每一个分别构造相应的扩展非确定性 有限状态机E-NFAra;(12) 增加一个新的始态s作为E-NFA的始态,从s到(ll)中构造的 各个E-NFAm的始态分别引一条ε弧,把s作为E-NFA的始态;增加一个 新的终态e作为E-NFA的终态,从各个E-NFAm的终态分别引入一条ε弧 到e;(13) 计算状态集,该状态集为各个E-NFAm的状态集加上步骤(ll)新 生成的始态和终态;(14) 计算状态转换函数,各个E-NFAm的状态转换关系均为E-NFA中 有效的状态转换函数关系,步骤(ll)中新添加的状态转换关系也是E-NFA 中有效的状态转换函数关系;(15) 计算状态标识集合,该集合为各个E-NF。的状态标识集合的合集;(16) 计算状态与状态标识的映射函数,其中E-NFA。的始态s的状态 标识为各个E-NFAm的始态的状态标识之和,E-NFA的终态e的状态标识为各个E-NFAm的终态集的状态标识之和,各个E-NFAm中每个映射函数关系 都是E-NFA中的有效映射函数关系;(17) 计算状态转换函数与状态转换函数标识的映射函数,其中各个 E-NF&中的每个映射函数关系都是E-NFA中的有效映射函数关系;对步骤 (ll)新添加的每一个状态转换函数,生成一个唯一的标识,将该标识加 入到集合1 中,并且在映射函数中记录;(18) 计算状态转换函数标识集合,E-NFA的状态转换函数标识集合 为各个E-NFAm的状态转换函数标识集与步骤(16)新生成的N^的合集;(19) 计算字母表,E-NFA的字母表为各个E-NFA,字母表的合集;(20) 计算终态集合,E-NFA的终态集合为各个E-NFA^终态集合之和 加上步骤(ll)新生成的终态e。
5. 如权利要求4所述的基于扩展有限状态机的多正则表达式联合搜 索方法,其特征在于所述步骤(ll)中,构造识别单个正则表达式的扩展非确定性有限状 态机E-NFA^包括如下的步骤(111) 给每一个正则表达式生成一个唯一的编号标识i;(112) 置扩展非确定性有限状态机的状态标识集合P={i},置状态转 换函数标识集合N为空集;(113) 以Thompson结构为基础,构造识别单个正则表达式的标准非 确定性有限状态机,得到扩展非确定性有限状态机的状态集合、字母表、 状态转换函数,开始状态和结束状态;(114) 计算状态与状态标识的映射函数P,对状态集合中的每一个 状态q,加入P (q) =i;(115) 计算状态转换函数的标识集合及状态转换函数与状态转换函 数标识的映射函数,对每一个状态转换函数,生成一个唯一的标识,将 该标识加入到标识集合中,并且在映射函数中记录。
6. 如权利要求3或4所述的基于扩展有限状态机的多正则表达式联 合搜索方法,其特征在于所述步骤(1)中,首先按照如权利要求4所述的方法构造识别多个正则表达式的扩展非确定性有限状态机,然后按照确定化方法将其构造 成扩展确定性有限状态机。
全文摘要
本发明公开了一种扩展有限状态机,同时还公开了利用该扩展有限状态机实现对多个正则表达式同时进行搜索的方法。该扩展有限状态机增加了状态标识集合、状态转换函数标识集合、状态与状态标识的映射函数、状态转换函数与状态转换函数标识的映射函数等四个参数,通过给状态引入标识,同时给状态转换函数也引入标识,可以使用户无需编写额外例程即可实现高效的多正则表达式的并行搜索,可以保留单个正则表达式的信息,同时还可以有效处理字符串回退。
文档编号G06F17/30GK101174261SQ20061011431
公开日2008年5月7日 申请日期2006年11月3日 优先权日2006年11月3日
发明者超 刘, 虎 李, 福 许, 金茂忠 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1