从正则表达式到NFA(Thompson算法)

正规式

定义

也叫正则表达式(regular expression,常简写为RE或regex)。是计算机科学标准化的成就之一。描述了一种字符串的模式。

形式上正则表达式是用于表征一组字符串的代数表示法。

构建

由较小的正则表达式按照特定规则递归地构建。

每个正则表达式r定义一个语言。这个语言也是根据r的子表达式所表示的语言递归定义的。

正规式与正规集

字母表∑上的正规式和正规集递归定义如下:

归纳基础

ε和φ都是∑上的正规式,它们所表示的正规集分别为{ε}和 φ。其中:ε为空字符串,φ为空集。

任意元素a∈∑,a是∑上的一个正规式,它所表示的正规集是{a}。

归纳步骤:假定R和S都是∑上的正规式,所表示的正规集记为L(R)和L(S),由小正则表达式生成大的正则表达式的规则如下。

选择:(R | S) 是正规式,正规集为L(R)∪L(S)

连接:(R · S) 是正规式,正规集为L(R)L(S)

闭包:(R)* 是正规式,正规集为(L(R))*

(U) 是正规式,正规集为L(U)

仅由有限次使用上述步骤得到的表达式才是∑上的正规式,它们表示的集合是∑上的正规集。

注:n正则式是一个表达式,正规集是一个集合。

 

例:已知∑={a, b} ,下列正规式相应的正规集是什么?

正规式

正规集

ba*

所有以b为首,后跟任意多个a的字符串

a(a|b)* 

所有以a为首的字符串

(a|b)*(aa|bb)(a|b)*

所有含有两个连续的a或连续的b的字符串 

 

非确定的有限自动机——NFA

定义

一个非确定的有限自动机(NFA)M 是一个五元组: M = ( S, Σ, δ,  S0, F ),其中:

(1)S和 Σ的定义同前;

(2)δ: S × {Σ ∪ ε} →2S(状态子集);

对于某个状态s ⊆ S 和一个输入字母a:

δ(s, a)=S’⊆ S

(3)S0 ⊆ S为非空初态集;

(4)F ⊆ S为终态集

 

Thompson算法 : RE -->NFA

基础规则

1. 对于 ε,构造为

2. 对于a (输入的字符以a为例),构造为

一个圆圈前加一个箭头表示初始状态,两个圆圈表示终结状态,中间用箭头连接,箭头上标明要输入的字符

归纳规则

1. 对于 a | b,构造为

2. 对于 ab,构造为

3. 对于 a*  = a^n |  ε,构造为

1.增加一个新的开始状态和一个新的结束状态。

2.将新的开始状态指向原来所有的开始状态。原来的终结状态指向新的终结状态。弧上为 ε 。

例题

设正则表达式 1*0(0|1)*, 构造等价的NFA

                                                 

                                                 

                                        

                                   

 

 

  • 12
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值