一种将有限自动机中的循环转换为正则表达式的方法技术

技术编号:15355730 阅读:96 留言:0更新日期:2017-05-17 14:18
本发明专利技术公开了一种将有限自动机中的循环转换为正则表达式的方法,主要解决了传统方法无法将有限自动机中的复杂循环转换为正则表达式的问题。其步骤是:步骤一:识别有限自动机中的所有循环,包括自循环和间接循环;步骤二:为自循环和间接循环构造新的迁移条件序列;步骤三:若循环是为自循环,则直接删除循环上的状态和迁移条件;若循环为间接循环,则删除除循环初始状态外的所有状态和相关的迁移条件;步骤四:将新的迁移条件序列加入到有限自动机中;步骤五:输出不带循环的有限自动机。本发明专利技术能被应用于软件行为建模、基于模型的测试、硬件电路系统设计、软件工程、编译器、网络协议和计算与语言的研究等领域,显著地提高计算机处对含有复杂循环的有限自动机的处理能力。

【技术实现步骤摘要】

本专利技术涉及计算机科学中的计算机控制和软件开发领域。具体涉及将有限自动机中的自循环和间接循环转换为正则表达式的方法。
技术介绍
有限自动机(FiniteAutomataMachine)是计算机科学的重要基石,它在软件开发领域内通常被称作有限状态机(FiniteStateMachine),是一种应用非常广泛的软件设计模式。现实世界中的很多事物都可以用有限自动机来描述,因此它在计算机科学技术和其他学科中都有非常广泛的应用。由于正则表达式与有限自动机是等价的,而正则表达式能够用字符串表示,因此处理正则表达式比处理有限自动机更加方便,正则表达式在业界获得了广泛的应用,如图灵奖获得者TonyHoare提出的“面向程序的统一建模理论”就是采用正则表达式来构造。为将有限自动机转换为相应的正则表达式,过去一些学者提出了三个转换规则。规则1:对于两个顺序操作的迁移条件a和b,则生成的正则表达式为a.b。规则2:对于两个选择操作的迁移条件a和b,则生成的正则表达式为a+b或a|b。规则3:状态s1输入迁移条件a到达状态s2,s2输入迁移条件b,到达状态s2,而s2输入迁移条件c到达s3,则生成正则表达式a.b*.c。前人的研究极大的推广自动机向正则表达式的转换和应用,但由于没有提出针对复杂自动机转换为正则表达式的规则,特别是带有复杂循环的有限自动机转换为正则表达式的转换规则,因此限制了复杂自动机的应用范围,也降低了计算机对复杂事物的模拟和处理能力。
技术实现思路
根据上述
技术介绍
中存在的缺陷和不足,本专利技术提出了一种将有限自动机中的循环转换为正则表达式的方法。该方法不但能处理有限自动机中的循环,还能处理一般意义上的有限自动机中的循环。本专利技术提及的方法不但能将有限自动机中的自循环或者间接循环转换为正则表达式,而且还能将同时包含自循环和间接循环的复杂循环转换为正则表达式。另外,本专利技术提及的方法还能将有限自动机中包含多个循环外状态的循环转换为正则表达式。本专利技术主要包括:1)循环识别,2)新迁移生成,3)循环约减,4)自动机调整四个阶段。为了实现本专利技术的四个阶段,需要进行如下的定义。定义1(有限自动机):一个有限自动机是一个五元组:M=(Q,∑,δ,q0,F)其中(1)Q是一个有限状态集;(2)∑是一个输入字母表,又称为迁移输入集或迁移条件集;(3)δ:Q×∑→Q是一个迁移转换函数;(4)q0∈Q是一个初始状态;(5)是一个终止状态集。定义2(迁移):一条迁移是被定义为T=<s1,a,s2>,且满足δ(s1,a)=s2,其中s1,s2∈Q,s1被称为迁移T的前状态,s2被称为迁移的后状态,a∈∑是状态s1上的一个迁移条件。定义3(迁移条件序列):在有限自动机中,若p为多个迁移条件进行连接、选择和循环操作的有序组合,且满足δ(s1,p)=s2,则称p为迁移条件序列。定义4(正则表达式):在有限自动机中,对于给定的输入字母表∑,则:(1)对于和空迁移条件ε,a和ε都是正则表达式;(2)如果a和b是正则表达式,则a|b也是正则表达式,其中符号|表示选择操作;(3)如果a和b是正则表达式,则a.b也是正则表达式,其中符号.表示连接操作;(4)如果a是正则表达式,则a*也是正则表达式,其中符号*表示循环操作;(5)如果a是正则表达式,则(a)也是正则表达式。本专利技术中提及的将有限自动机中的循环转换后的正则表达式,满足定义4的同时也满足了定义3,即转换后得到的正则表达式是一个迁移条件序列p,满足δ(s,p)=s。因此本专利技术的核心是为了获取有限自动机中循环的迁移条件序列。定义5(自循环):在有限自动机中,若存在s∈Q和a∈∑,使得δ(s,a)=s,则称自动机在状态s上有一个自循环。定义6(间接循环):在有限自动机中,若存在一个非空的迁移序列p,使得δ(s,p)=s,则称自动机包括一个间接循环。定义7(出循环状态和循环外状态):若有限自动机中的某个状态s处于循环中,且存在s1∈Q和a∈∑,使得δ(s,a)=s1及状态s1并不在该循环中,则称s为该循环的一个出循环状态,s1为s对应的一个循环外状态。本专利技术提出了一种将有限自动机中的循环转换为正则表达式的方法,包括以下步骤:步骤一:识别有限自动机中的所有循环,包括自循环和间接循环;步骤二:为自循环和间接循环构造新的迁移条件序列;步骤三:若循环是为自循环,则直接删除循环上的状态和迁移条件;若循环为间接循环,则删除除循环初始状态外的所有状态和相关的迁移条件;步骤四:将新的迁移条件序列加入到有限自动机中;步骤五:输出不带循环的有限自动机。其中,进一步地,步骤一中识别有限自动机中的所有循环可以采用以下两种方法:采用图的搜索方式遍历有限自动机,获取有限自动机中的循环信息,包括深度优先搜索方法和广度优先搜索方法;或在构造有限自动机时,标记出其中的循环信息,包括循环的初始点、循环的迁移条件和循环的类型。其中,进一步地,采用深度优先搜索方式,获取有限自动机中所有循环的算法包括以下步骤:步骤11:构建一个栈来存储深度优先搜索有限自动机时的中间状态;步骤12:由有限自动机的初始状态出发,按照深度优先策略遍历有限自动机,将初始状态存入栈中;步骤13:标记初始状态为已经访问过的状态;步骤14:若栈不空,则判断栈顶的状态是否存在下一个状态;步骤15:如果栈顶的状态存在下一个状态s,则将状态s进栈,并将状态s标记为已访问过状态,否则栈顶的状态出栈;步骤16:若栈顶的状态与栈中其他位置的状态一样,则栈顶到该位置所存储的所有状态为一个循环;步骤17:设置栈顶的状态为该循环的循环初始状态;步骤18:存储该循环中的所有状态信息;步骤19:将栈顶的状态出栈;步骤110:跳转到步骤14,直到栈为空,遍历结束。其中,进一步地,采用图的广度优先搜索方法,获取有限自动机中所有循环的算法包括以下步骤:步骤21:构造一个队列来存储广度优先搜索有限自动机时的中间状态;步骤22:构造一个数组来存储某个状态的前驱状态;步骤23:将有限自动机的初始状态进入队列;步骤24:队列头部存储的状态出队列并标记为已经访问状态;步骤25:如果该状态包含后续状态,则取该状态的后续所有状态,并依次进入队列尾部;步骤26:在数组中依次记录队列中每个状态的前驱状态为刚出队列的状态;步骤27:若队列尾部的状态为已标记过的状态时,则从队列尾部取该状态并标记该状态为循环的初始状态;步骤28:令循环的初始状态为当前状态;步骤29:在数组中找到当前状态的前驱状态;步骤210:令前驱状态为当前状态;步骤211:跳转到步骤29,直到在队列中找到该循环的循环初始状态为止;步骤212:将队尾元素和获取的所有前驱状态组成一个循环,并记录该循环中的所有状态;步骤213:跳转到步骤24,直到队列为空,遍历结束。其中,进一步地,在构造有限自动机时,标记出其中循环信息的算法包括以下步骤:步骤31:在构造有限自动机时,为循环的初始状态增加一个特殊标记符;步骤32:在构造有限自动机时,为循环中状态的迁移条件增加一个特殊的标记符,用于记录该循环的类型;步骤33:记录循环的初始状态和循环中的所有状态。其中,步骤二中为每个循环构新的迁移条件序列包括为自循环和为间接循环构造新的迁移条件序列。其中,本文档来自技高网...
一种将有限自动机中的循环转换为正则表达式的方法

【技术保护点】
一种将有限自动机中的循环转换为正则表达式的方法,其特征在于,包括以下步骤:步骤一:识别有限自动机中的所有循环,包括自循环和间接循环;步骤二:为自循环和间接循环构造新的迁移条件序列;步骤三:若循环是为自循环,则直接删除循环上的状态和迁移条件;若循环为间接循环,则删除除循环初始状态外的所有状态和相关的迁移条件;步骤四:将新的迁移条件序列加入到有限自动机中;步骤五:输出不带循环的有限自动机。

【技术特征摘要】
1.一种将有限自动机中的循环转换为正则表达式的方法,其特征在于,包括以下步骤:步骤一:识别有限自动机中的所有循环,包括自循环和间接循环;步骤二:为自循环和间接循环构造新的迁移条件序列;步骤三:若循环是为自循环,则直接删除循环上的状态和迁移条件;若循环为间接循环,则删除除循环初始状态外的所有状态和相关的迁移条件;步骤四:将新的迁移条件序列加入到有限自动机中;步骤五:输出不带循环的有限自动机。2.如权利要求1所述的将有限自动机中的循环转换为正则表达式的方法,其特征在于,所述步骤一中识别有限自动机中的所有循环包括以下两种方法:采用图的搜索方式遍历有限自动机,获取有限自动机中的所有循环,包括深度优先搜索方法和广度优先搜索方法;或在构造有限自动机时,标记出相关的循环信息,包括循环的初始点、循环的迁移条件和循环的类型。3.如权利要求2所述的将有限自动机中的循环转换为正则表达式的方法,其特征在于,进一步地,采用深度优先搜索方法获得有限自动机的循环包括如下步骤:步骤11:构建一个栈来存储深度优先搜索有限自动机时的中间状态;步骤12:由有限自动机的初始状态出发,按照深度优先策略遍历有限自动机,将初始状态存入栈中;步骤13:标记初始状态为已经访问过的状态;步骤14:若栈不空,则判断栈顶的状态是否存在下一个状态;步骤15:如果栈顶的状态存在下一个状态s,则将状态s进栈,并将状态s标记为已访问过状态,否则栈顶的状态出栈;步骤16:若栈顶的状态与栈中其他位置的状态一样,则栈顶到该位置所存储的所有状态为一个循环;步骤17:设置栈顶的状态为该循环的循环初始状态;步骤18:存储该循环中的所有状态信息;步骤19:将栈顶的状态出栈;步骤110:跳转到步骤14,直到栈为空,遍历结束。4.如权利要求2所述的将有限自动机中的循环转换为正则表达式的方法,其特征在于,进一步地,步骤一中,采用广度优先搜索方法获得有限自动机的循环包括如下步骤:步骤21:构造一个队列来存储广度优先搜索有限自动机时的中间状态;步骤22:构造一个数组来存储某个状态的前驱状态;步骤23:将有限自动机的初始状态进入队列;步骤24:将队列头部状态出队列并标记为已经访问状态;步骤25:如果该状态包含后续状态...

【专利技术属性】
技术研发人员:刘攀蔡立志刘振宇胡芸傅志仁廖文昭
申请(专利权)人:上海计算机软件技术开发中心上海商学院上海市信息网络有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1