形式语言与自动机 6 正则表达式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

http://www.jmgangwan.com/
1
UJS
例题1:: 算术表达式:(5+4)×2, 值为18,是一个数字 正则表达式:(0∪1)0*, 正则表达式的值是一个语言





注意: (0∪1)0* 表示的是01后加任意多个0构成的字符串所组 成的语言 0和1是集合{0}和{1}的缩写,就是{0}∪{1}, 这部分的 值是语言{0, 1} 0*就是{0}*,其值为所有包含任意个0的字符串构成的语 言 在正则表达式中省略了连结运算符号o, (0∪1)0*实际上 是(0∪1) o0* 正则表达式可以用来描述满足“某种模式”的字符串。
0*10* ∑*1∑* ∑*001∑* (∑∑)* {ω|ω恰好有一个1} {ω|ω至少有一个1} {ω|ω中含有子串001} {ω|ω是偶长度的字符串}
(∑∑∑)*
01∪10
{ω|ω是长度为3的字符串}
{01, 10}
0∑*0∪1∑*1∪0∪ {ω|ω以相同的字符开始和结束} 1 (0∪ε)1* (0∪ε) (1∪ε) 01*∪1* 说明:(0∪ε)表示语言{0,ε} {ε, 0, 1, 01}
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM

5
10/23/2018 10:44 PM
http://www.jmgangwan.com/
说明:

UJS


在(1)和(2)中,a和ε分别表示{ a }和{ε} 在(3)条中,φ表示空语言 在第(4)、(5)、(6)表示通过正则运算并、连结 和星号获得正则表达式
(用较小的正则表达式定义较大的正则表达式,是归纳定义中的 归纳步骤)
10/23/2018 10:44 PM
பைடு நூலகம்
http://www.jmgangwan.com/
21
UJS

广义非确定型有穷自动机GNFA
ab * aa
并 ba ab
q起 始

b
a*
(a a) *
q接 受
b* ab
10/23/2018 10:44 PM
http://www.jmgangwan.com/
22
1*φ
φ*
10/23/2018 10:44 PM
φ
{ε} 说明:*运算只能把0个字符串连接在一 起,得到的唯一的一个字符串是ε
http://www.jmgangwan.com/ 8
UJS 例题4:设R是任意的正则表达式,有下述恒等式成立。
几个正则表达式 的恒等式
这些恒等式有助于对正则表 达式定义的理解 空语言加上任何一个语言不 改变这个语言 空串加上任何一个字符串上 不改变这个字符串 但是:R∪ε不一定等于R, Roφ不一定等于R
http://www.jmgangwan.com/ 9
R∪φ = R
Roε = R
10/23/2018 10:44 PM
UJS

例题5:程序设计语言中的基本单位称为单字, 如变量名和常量,这些东西可以用正则表达式 描述。
通常是包括小数部分和正负号的的数值常量可以描 述成下述语言的一个成员: {+, --, ε}(DD*∪DD*. D*∪D*.DD*) 其中,D = {0, 1, 2, …, 9},则72,3.14, +7.和 -.01 是该语言的字符串。

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM
http://www.jmgangwan.com/
7
UJS
例题3:在下面的句子中,字母表为{0,1}
12
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM
11
定理1:一个语言是正则的,当且仅当可以 用正则表达式描述它。
定理
当且仅当
UJS
引 理 1: 当
如果一个语言可以用正则表达式 描述,则它是正则的
引 理 2: 仅 当
如果一个语言是正则的,则它可 以用正则表达式描述
正则语言 定义
假 设 正 则 表 达 式 R描 述 语 言 A, 要 通 过 R构 造 一 台 能 识 别 A的 NFA
UJS
GNFA其实就是NFA,只是转移箭头可以 用任何正则表达式作标号,而不是只能 用字母和ε做标号。 GNFA读入输入符号段,而不必一次值读 一个符号。 GNFA是非确定性的,有几种不同的方式 处理同一个符号串

10/23/2018 10:44 PM
http://www.jmgangwan.com/
正则 表达式 定义
如何构造?
10/23/2018 10:44 PM
正则语言 定义
假 设 DFA识 别 语 言 A, 要 构 造 一 个 把 DFA转 换 为 正 则 表达式的方法。
首先 把 DFA转 换 成 GNFA
http://www.jmgangwan.com/
然后 把 GNFA成 正 则表达式

在编译中,只要程序设计语言中的单字的语法 用正则表达式描述出来,自动系统能够生成词 法分析程序。这是编译程序的一部分,用来在 开始阶段处理输入程序。
http://www.jmgangwan.com/ 10
10/23/2018 10:44 PM
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义
10/23/2018 10:44 PM http://www.jmgangwan.com/ 15
UJS

例题6:分若干阶段把正则表达式 (ab∪a)*转换成NFA,从最小的子表达式 到大一点到大一点的子表达式逐步建立。 使用构造证明中的方法一般不能给出状 态最少的NFA。
a b
a和b (1)
10/23/2018 10:44 PM
http://www.jmgangwan.com/
13
UJS

引理1 如果一个语言可以用正则表达式描 述,则它是正则的。
证明:考虑正则表达式R定义的6种情况 (1) R = a, 这里a是字母表∑中的一个元素,那么 L(R)= {a}, 下述NFA识别L(R) a
(注意:这台机器符合NFA的定义,但是不符合DFA的定义,因为(1) …(2)…)
10/23/2018 10:44 PM
http://www.jmgangwan.com/
2
很多应用程序及现代程序设计语言、文本编 辑程序都提供用正则表达式描述模式的手段。

UJS
例题2:正则表达式(0∪1)* 其值为:由0和1的所有字符串组成的语言,也 表示为{0, 1}* 表示方法:记∑为字母表,∑也可以表示该字 母表中所有长度为1的字符串,而∑*为由该字 母表中所有字符串组成的语言。 如:(0∑*)∪(∑*1)表示所有以0开头而以1结尾 的字符串 正则运算的优先级:先星号,后连结,最后并, 要改变这种惯常的顺序需要用括号。
http://www.jmgangwan.com/
16
UJS
a

b
ab (2)

a a

b
ab∪a
10/23/2018 10:44 PM http://www.jmgangwan.com/
(3)
17
UJS

a a

b

(ab∪a)*
(4)
思考:本例题一共给出了8个状态,而最小的表 示该表达式的NFA,只要2个状态,怎么表示?

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM
http://www.jmgangwan.com/
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM
http://www.jmgangwan.com/
4
UJS
定义 称R是一个正则表达式,如果R是
a, 这里a是字母表∑中的一个元素; ε; φ; (R1∪R2),这里R1和R2是正则表达式; (R1oR2),这里R1和R2是正则表达式; (R1*),这里R1是正则表达式;
形式的表示,N = ({q1,q2}, ∑, δ, q1, {,q2} ), 其中δ 的定义为 δ (q1, a) = q2 δ (q1, b) =φ, 若
r q1 , 或b a
10/23/2018 10:44 PM http://www.jmgangwan.com/ 14
UJS 2.
R =ε;下述NFA识别L(R)
习题:把正则表达式(a∪b)*aba转换成一台NFA。请一步步 根据步骤给出。
10/23/2018 10:44 PM http://www.jmgangwan.com/ 18
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性


此处ε和φ的区别:有一个空语句的语言,和空 语言 要想明显的区分正则表达式R和它所表示的语 言时,后者用L(R)表示。
http://www.jmgangwan.com/ 6
10/23/2018 10:44 PM
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题
http://www.jmgangwan.com/
20
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
http://www.jmgangwan.com/ 3


10/23/2018 10:44 PM
UJS
第六章 正则表达式
6.1 引例 6.2 正则表达式的形式定义

6.2.1形式定义 6.2.2 例题

6.3 正则表达式与有穷自动机的等价性
6.3.1充分性证明 6.3.2必要性的证明
UJS
DFA能够很容易的转化成这种特 殊形式的GNFA
添加一个新的起始状态和一个新的接受状态; 从新的起始状态到老的起始状态有一个ε箭头; 从每一个老的接受状态到新接受状态有一个ε箭头; 如果一个箭头有多个标记(即两个状态之间有多个 方向相同的箭头),则把它替换为一个标记着原先 标记的并集的箭头; 在没有箭头的状态之间添加φ标记。(此步骤不改 变识别的语言,因为φ标记的箭头永远不能被使用 )
3.
4.
R =φ;那么L(R)= φ, 下述NFA识别L(R)
(R1∪R2),这里R1和R2是正则表达式;
5. 6.
(R1oR2),这里R1和R2是正则表达式; (R1*),这里R1是正则表达式;
(4)、(5)、(6)三种情况由正则语言类在正则运算 下的封闭性的证明中给出的构造证明方法,很 容易得出需要的NFA。
23
UJS
对GNFA的一些特殊要求:
起始状态有射到其他每一个状态的箭头, 但是没有从其他任何状态射入的箭头 有唯一的一个接受状态,并且它有从其 它每一个状态射入的箭头,但是没有射 到其他任何状态的箭头; 除起始状态和接受状态外,每一个状态 到自身或其他状态都有一个箭头。

10/23/2018 10:44 PM http://www.jmgangwan.com/ 24
6.3.1充分性证明 6.3.2必要性的证明
(1)首先说明如何把DFA转换成GNFA (2)说明如何把GNFA转换成正则表达式
10/23/2018 10:44 PM
http://www.jmgangwan.com/
19
UJS

引理2 如果一个语言是正则的,那么它可 以用正则表达式描述。
10/23/2018 10:44 PM
相关文档
最新文档