Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 60

形式语言与自动机

Formal Languages and Automata Theory

正则表达式
计算机科学与技术学院
哈尔滨工业大学(深
圳)

汤步洲
课程回顾
• DFA, NFA, -NFA 在表示语言的能力上是等价的
– 相互之间的转换关系

DFA
转换

NFA -NFA
简化

DFA 所接受的语言是正则语言
内容大纲

• 正则表达式
– 正则表达式的递归定义
– 正则表达式的示例
• 有穷自动机和正则表达式
– 由自动机到正则表达式
– 由正则表达式到自动机
• 正则表达式的代数定律
内容大纲

• 正则表达式
– 正则表达式的递归定义
– 正则表达式的示例
• 有穷自动机和正则表达式
– 由自动机到正则表达式
– 由正则表达式到自动机
• 正则表达式的代数定律
正则表达式

• 有穷自动机
– 通过抽象机器装置扫描和接受字符串识别(表示)正
则语言
• 正则表达式
– 通过代数式表示或产生正则语言,便于正则语言的计
算机处理
– 正则表达式所表示的语言与正则语言等价
– 应用广泛
• grep 工具
• Vim 文本编辑器
• 各种程序设计语言(比如 , Perl, Python )
语言运算

• 设和是两个语言,那么
并:
连接:
幂: , , ,
克林闭包:
例子

• 例 : 若有 , 那么

• 例 : 对于空语言
– ,,
四则运算的递归定义

• 任何数都是四则运算表达式。

• 如果和是四则运算表达式,那么

都是四则运算表达式。
正则表达式的递归定义

• 基础 1: 是一个正则表达式,表示空语言。
• 基础 2: 一个正则表达式,表示语言
• 基础 3: 对于任意一个符号 , 是一个正则表达式,
表示语言,其有一个长度为 1 的字符串。
正则表达式的递归定义
• 归纳 1 :如果和是正则表达式,那么也是正
则表达式,且
• 归纳 2 :如果和是正则表达式,那么也是正
则表达式,且
• 归纳 3 :如果是正则表达式,则也是正则表
达式。
• 归纳 4: 如果是正则表达式,则也是正则表达
式,表示语言。
运算符的优先级

• 正则表达式中三种运算以及括号的优先级:
(1)“ 括号”优先级最高 括号
( )

(2)“ 星”运算 : “ 星”
*
“ 连接”
(3)“ 连接”运算 : ( 一般省
略)
(4)“ 加”最低 : “ 加” 低
+
运算符的优先级

• 例:
括号 高
( )
“ 星”
*
“ 连接”
( 一般省
略)
“ 加” 低
+
主观题 10 分

给出正则表达式 (a+b)*(a+bb) 定
义的语言(用集合形式)

作答
正则表达式示例
• 给出正则表达式 (a+b)*(a+bb) 定义的语言

所以 w|w 由 a 和 b 组成,仅以 a 或 bb 结尾 } 。
运算的若干化简规则

• (+E)*=(+E)+=E*
• +*=
• = (零元)
• = (单位元)
内容大纲

• 正则表达式
– 正则表达式的递归定义
– 正则表达式的示例
• 有穷自动机和正则表达式
– 由自动机到正则表达式
– 由正则表达式到自动机
• 正则表达式的代数定律
有穷自动机和正则表达式
• DFA, NFA, -NFA 和正则表达式在表示语言的能
力上是等价的
– 相互之间的转换关系

DFA 正则表达式
转换

NFA -NFA
简化

对于一个 DFA 所能识别的语言,都存在一个正则表达式表示


它。
有穷自动机和正则表达式
• DFA, NFA, -NFA 和正则表达式在表示语言的能
力上是等价的
– 相互之间的转换关系

DFA 正则表达式
转换

NFA -NFA
简化

对于一个 DFA 所能识别的语言,都存在一个正则表达式表示


它。
任何一个正则表达式表示的语言,都可以由一个 -NFA 识别。
DFA 到正则表达式

• 定理:若 是某 DFA 的语言 , 那么存在正则


表达式满足
• 证明方法:
– 递归法
– 状态消除法
DFA-> 正则表达式 : 递归法

• 对的状态进行编号,令 1 为开始状态,即

设正则表达式 表示从 到 但中间节点状态编号


不超过全部路径的字符串集(简称 - 路径 ):
DFA-> 正则表达式 : 递归法
• 归纳基础 :, 为从 直接到 ,没有经过任何中间
节点的字符串集合
• 情况 1 :不等于
– 没有到的状态转移

– 有一个到的转移

– 有多个到的转移
DFA-> 正则表达式 : 递归法
• 归纳基础 :, 为从 直接到 ,没有经过任何中间
节点的字符串集合
• 情况 2: 等于
– 状态没有到自身的转移
– 状态有一个到自身的转移
– 状态有多个到自身的转移
路径的情况
• 两种情况:
– 不经过状态
– 经过状态一次或者多次

首次从到
不经过的 最后,从到
路径集合 一次或多次
从到
递归关系示意图

• 递归关系:
递归关系示意图

递推关系为:
- 路径示例

1 • 从 2 to 3
0- 路径 :
1 2
0 1- 路径 :
0 0
1 1 2- 路径 :
3
DFA-> 正则表达式

• 如果 1 是开始结点,则和 DFA 等价的正则表达


式就是

即,从状态 1 到终结状态的所有路径的集合。
主观题 10 分

• 例 : 把下图所示 DFA 转换为正则表达式。


这个 DFA 接受至少含有一个 0 的串。
1 0,1

start 0
q1 q2

• 状态总数,状态 1 为开始状态,状态 2 为
结束状态,所以需要求解

作答
DFA-> 正则表达式示例
• 把下图所示 DFA 转换为正则表达式。这个 DFA
接受至少含有一个 0 的串。
0,1 的情况 ( 状
1
态直接到状
start
q1
0
q2 态 ):


𝑹(𝒌)
𝒊𝒋 =𝑹(𝒌 −𝟏)
𝒊𝒋 ∪ 𝑹( 𝒌− 𝟏)
𝒊𝒌 (𝑹 ¿ ¿𝒌𝒌( 𝒌 −𝟏 )
) 𝑹(𝒌 −𝟏)
𝒌𝒋 ¿
DFA-> 正则表达式示例
• 把下图所示 DFA 转换为正则表达式。这个 DFA
接受至少含有一个 0 的串。
0,1 简化规则:
1
(+E)*=(+E)+=E*
start 0 +*=
q1 q2
= (零元)
= (单位元)


𝑹(𝒌)
𝒊𝒋 =𝑹(𝒌 −𝟏)
𝒊𝒋 ∪ 𝑹( 𝒌− 𝟏)
𝒊𝒌 (𝑹 ¿ ¿𝒌𝒌( 𝒌 −𝟏 )
) 𝑹(𝒌 −𝟏)
𝒌𝒋 ¿
DFA-> 正则表达式示例
• 把下图所示 DFA 转换为正则表达式。这个 DFA
接受至少含有一个 0 的串。
0,1 简化规则:
1
(+E)*=(+E)+=E*
start 0 +*=
q1 q2
= (零元)
= (单位元)


𝑹(𝒌)
𝒊𝒋 =𝑹(𝒌 −𝟏)
𝒊𝒋 ∪ 𝑹( 𝒌− 𝟏)
𝒊𝒌 (𝑹 ¿ ¿𝒌𝒌( 𝒌 −𝟏 )
) 𝑹(𝒌 −𝟏)
𝒌𝒋 ¿
DFA-> 正则表达式 : 状态消除法

• 从 DFA 中逐个删除状态
– 会消除掉状态的原有路径,因此要补上等价的
路径
• 用标记了正则表达式的新路径替换被删掉的路径
保持“自动机”等价
DFA-> 正则表达式 : 状态消除法
• 正则表达式运算(连接,加,闭包)和 DFA 中路
径的关系
DFA-> 正则表达式 : 状态消除法

• 更一般的情况,要为被删除的状态的每个“入”和
“出”路径的组合 , 补一条等价的新路径 , 并用新
的正则表达式表示

• 2 条入, 2 条出,要补 4 条(到 , 到 , 到 , 到)


主观题 10 分

• 例 : 将以下 DFA 转换成正则表达式。“由 0 和 1 构成的


串中,接受全部以 01 结尾的串。”
• DFA :

作答
DFA-> 正则表达式 : 状态消除法
• 例 : 将以下 DFA 转换成正则表达式。“由 0 和 1 构成的
串中,接受全部以 01 结尾的串。”
• DFA :

(1) 利用空转移,增加新的开始 (s) 和结束状态


(f )
状态消除法示例
(2) 消除状态,需要增加其“入”度和“出”度之
间的边和 , 即
状态消除法示例
(3) 消除状态,需要增加其“入”度和“出”度之
间的边和,即和
状态消除法示例

( 4 )消除状态 q2 ,需要增加其“入”度和“出”
度之间的边,即

因此,该自动机的正则表达式式为 :

(1+0)*01
内容大纲

• 正则表达式
– 正则表达式的递归定义
– 正则表达式的示例
• 有穷自动机和正则表达式
– 由自动机到正则表达式
– 由正则表达式到自动机
• 正则表达式的代数定律
正则表达式的递归定义 ( 回顾 )
基础:
 是一个正则表达式,表示空语言。
 一个正则表达式,表示语言
 对于任意一个符号 , 是一个正则表达式,表
示语言,其有一个长度为 1 的字符串。
归纳:如果和是正则表达式,则
 也是正则表达式
 也是正则表达式。
 归则也是正则表达式。
 也是正则表达式。
DFA-> 正则表达式 : 递归法 ( 回顾 )

• 对的状态进行编号,令 1 为开始状态,即

设正则表达式 表示从 到 但中间节点状态编号


不超过全部路径的字符串集(简称 - 路径 ):
递归关系示意图 ( 回顾 )

• 递归关系:
DFA-> 正则表达式 : 状态消除法 ( 回
顾)
• 更一般的情况,要为被删除的状态的每个“入”和
“出”路径的组合 , 补一条等价的新路径 , 并用新
的正则表达式表示

• 2 条入, 2 条出,要补 4 条(到 , 到 , 到 , 到)


正则表达式到自动机
• 定理 : 每个正则表达式定义的语言,都可被有穷
自动机识别。
•  任何正则表达式,都存在与其等价的 -NFA ,
即,并且满足 :
– 仅有一个接受状态;
– 没有进入开始状态的边;
– 没有离开接受状态的边。

Start 𝜀 − 𝑁𝐹𝐴
归纳法证明
• 归纳基础:
1. 对正则表达式,有

2. 对正则表达式,有

3. ,对正则表达式 a ,有
归纳法证明

• 归纳递推 :
假设若和为正则表达式,则它们对应的 -NFA 分别
为𝑅和𝑆。
归纳法证明

• 归纳递推 :

• 添加一个开始状态和一个接受状态;
• 将和通过空转移以并的方式连接起来。
归纳法证明

• 归纳递推 :

• 通过空转移将的接受状态和的开始状态连接起来。
归纳法证明
• 归纳递推 :

• 添加一个开始状态和一个接受状态;
• 通过空转移将开始状态连接,将接受状态连接;
• 把原来的接受状态改为非接受状态,通过空转移跳转回
原来的开始状态(表示闭包 0 次);
• 闭包里的 0 次通过空转移连接开始状态和接受状态实现。
归纳法证明

• 归纳递推 :
若和为正则表达式,则它们对应的 -NFA 别为𝑅和𝑆。

因此对于任何正则表达式,可以构造等价的 -NFA 。
主观题 10 分

• 例 : 将正则表达式 构造为 -NFA 。

作答
示例

• 例 : 将正则表达式 构造为 -NFA 。

( 1 )构造 (0+1) ( 2 )构造


0 ε
ε ε 0
ε ε ε ε
ε 1 ε
ε 1 ε
ε

( 3 )构造 1
ε
0
ε ε ε ε ε 1
ε 1 ε
ε
示例

( 4 )构造 (0+1)*1(0+1)
ε
0 0
start ε ε ε ε ε 1 ε ε ε

ε 1 ε ε 1 ε
ε

ε-NFADFA
内容大纲

• 正则表达式
– 正则表达式的递归定义
– 正则表达式的示例
• 有穷自动机和正则表达式
– 由自动机到正则表达式
– 由正则表达式到自动机
• 正则表达式的代数定律
正则表达式的代数定律

• 结合律和交换律
– 并的交换律
– 并的结合律
– 连接的结合律
– 连接不满足交换律
正则表达式的代数定律

• 单位元
– 并运算的单位元
– 连接运算的单位元 ε

• 零元
– 连接运算的零元
正则表达式的代数定律

• 分配律
– 连接对并满足左分配律
– 连接对并满足右分配律
示例: 0+01∗=0ε+01∗=0(ε+1∗)=01∗
• 幂等律
– L+L==L 并的幂等律
正则表达式的代数定律

• 有关闭包的定律
– ,对某语言的闭包再取闭包

– 空串的闭包仍然是空串
• 发现正则表达式的定律
– =
小结

• 正则表达式基本概念
• 正则表达式与有穷自动机的转换
– DFA 正则表达式:构造法+状态消除法
– 正则表达式 DFA
• 正则表达式的代数定律

You might also like