正规文法与有限自动机的相互转换
正规式转化为有限自动机的算法综述

正规式转化为有限自动机的算法综述网络工程04379024 刘伟莉[摘要]本文从正规表达式的广阔应用开始,阐述引入有限自动机的必要性与可行性。
详细列举了几种将正规表达式转换为有限自动机的算法,并对它们的特点进行了比较。
[关键词]:正规表达式;有限自动机;Thompson算法0 引言在编译原理的词法分析理论中,从正规表达式到有限自动机的转换是词法分析器自动生成理论研究的重要内容。
其中,正规表达式(Regular Expressions)在编译程序中用来描述程序设计语言中某种单词的词法结构。
而有限自动机(Finite Automata,简称为FA)则用来识别某些字符串是否符合某种词法规则。
[1]二者在编译程序中的作用可由图1[2]所示图1 词法分析器的自动生成将正规表达式转化为有限自动机的算法中,Thompson算法最为经典。
这种算法的思想是根据正规表达式的递归定义,按照正规表达式的构成层次进行归纳构造。
其核心是2个FA进行连接、并和闭包运算。
一般方法是:先构造带ε动作的FA,再构造与其等价的非确定有限自动机(NFA),最后再由NFA构造与其等价的确定有限自动机(DFA)。
[3]显然,当正规表达式的层次较多时,上述方法就显得很繁琐,因此出现了一系列对Thompson算法的改进。
本文将后续介绍其中的两种改进,它们都利用对原算法的分析,改造Thompson结构,以达到减少有限自动机的状态数和ε边,提高编译程序工作效率的目的。
最后,介绍一种非Thompson算法的基于属性文法的正规式到NFA的转换。
本文分为5部分:第1部分将通过对正规表达式应用的讨论解释有限自动机引入的必要性;第2部分通过证明正规表达式与有限自动机的等价性来阐明两者转换的可行性;第3部分具体介绍5种转换算法;第4部分则对上一部分各种算法进行了比较;第5部分是文章小结。
1 正规表达式的应用与有限自动机的引入除了在编译程序构造与设计外,正规表达式还被应用于其他领域,比如字处理软件中的文本检索、数据库查询语言、文件处理语言以及遗传序列的研究等。
(12)第二章 第五讲 正则表达式与有限自动机

a q4 R3=a q5
b q6 R5=b
ε
q7
ε
q5
b
q6
ε
Hale Waihona Puke q8ε 对于R6=ab* ,有:
a q3 q4
R4=R5 *, 即R4=b*
ε
q7
ε
ε
q5
b
q6
ε
q8
最后对于R6+R2=ab*+b,有:
ε
b q1 R2=b q2 q3
a q4 R3=a q5
b q6 R5=b
ε
b q6
q7
ε
q5
ε
q8
RETURN
第二章有限自动机和右线性文法第五讲正则表达式与有限自动机一正则式正则语言有限自动机的关系1正则语言与有限自动机之间的关系所谓正则语言就是由正则式或者由右线性文法所能够描述的语言或者是由有限自动机所能够识别的语言
第二章 有限自动机和右线性文法
第五讲
正则表达式与有限自动机
一、正则式、正则语言、有限自动机的关系 1、正则语言与有限自动机之间的关系
设 M1=(Q1,T1,δ1,q1,{qf1}) , M2=(Q2,T2,δ2,q2,{qf2},) 且 Q1∩Q2=Ø 则构造M=(Q1∪Q2∪{q0,qf},T1∪T2,δ,q0,{qf}),其中δ定义如下: ① δ(q0,ε)={q1,q2}
编译原理--有限自动机

(4)S∈K,是唯一的初态;
(5)Z是K的子集,是一个终态集,终态也称为可接收状态或 结束状态。
12
确定的有穷自动机DFA的表示
3.2.1 状态转换图
设DFA有m个状态,n个输入字符,那么这个图含有m 个状态结,每个结点最多有n条箭弧射出和别的结点相连接, 每条弧用Σ中的一个不同输入符号作记号。整个图含有唯一 的一个初态和若干个(可以0个)终态结。
10
3.2 有穷自动机的形式定义
DFA: Deterministic Finite Automata NFA: Nondeterministic Finite Automata
DFA的定义
定义3.1 一个确定的有穷自动机(DFA) M是一个五元组: M = ( K, Σ, f, S, Z )
(1)K是一个非空有穷集合,它的每一个元素称为一个状态;
解:该DFA M的状态图:
0
a
b b
1
a 2
a
3 b
a, b
14
确定的有穷自动机DFA的表示(续)
3.2.2 状态转换矩阵
矩阵的行表示状态,列表示输入字符,矩 阵元素表示相应的状态行在输入字符列下的新 的状态,即f(k,a)的值。
15
例2(题同1)
解:该DFA M的矩阵表示
状态 0 1 2 3 字符 a 1 3 1 3 b 2 2 3 3
例1:(1)到此为止是偶数个a和偶数个b; (2)到此为止是奇数个a和偶数个b; (3)到此为止是偶数个a和奇数个b; (4)到此为止是奇数个a和奇数个b。 根据每种可能性设计一个状态,并根据可能的输入 符号来设计状态之间的转移条件。 a a 2 b b b 3 a a b
1
正规文法与正规式

正规⽂法与正规式 3型⽂法也叫作正规⽂法,它对应于有限状态⾃动机,它是在2型⽂法的基础上满⾜:A->a|aB(右线性)或A->a|Ba(左线性)。
如果有A->a,A->aB,B->a,B->cB则符合3型⽂法的要求。
但是A->ab,A->aB,B->a,B->cB或A->a,A->Ba,B->a,B->cB则不符合3型⽂法的要求。
也就是说,不能够推导出两个终结符,⽽且左线性和右线性只能使⽤⼀种,不能够同时出现。
1.分别写出描述以下语⾔的正规⽂法和正规式:(1)L1={ab n a|n≥0}。
(2)L2={a m b n|n≥1,m ≥1}(3)L3={(ab)n|n≥1}答:(1) S → aA A → bA | a L1 = ab*a (2)S → aAA → aA | bB | b B → bB | b L2 = a*b* (3)S → aA A → bB B → aA | ε L3 = (ab)*2.将以下正规⽂法转换到正规式·Z→0A· A→0A|0B· B→1A|ε答:Z = 0A A = 0A + 0B B = 1A + ε A = 0A + 0(1A + ε) = 0A + 01A + 0 A = aA | b Z = 0(0 | 01)*0Z→U0|V1 U→Z1|1 V→Z0|0答:Z = U0 + V1 U = Z1 + 1 V = Z0 + 0 Z = (Z1+1)0 + V1 Z = (Z1+1)0 +(Z0+0)1 Z = Z10 + 10 +Z01 + 01 Z = Z(10+01)+10+01 Z = (10+01)*1001 Z = (10 | 01)*1001S→aA A→bA|aB|b B→aA答:S = aAA = bA + aB + b B = aA A = bA + a(aA) +b = (b + aa)A +b S = (b | aa)*bI→l|Il|Id答: I = l + Il + Id I = l + I(l +d) I = l(l | d)*。
2.4 正规表达式到有限自动机的构造

2.4.3 DFA M的化简 (DFA Minimization) NFA确定化所得的DFA可能含有多余 的状态, 需化简。所谓DFA M的化简,是 指寻找一个状态数比M少的DFA M',使得 L(M) = L(M')。 化简后的DFA M' 满足下述条件: (1) 无多余状态 (死状态); (2) 状态集中无相互等价(不可区别) 的状态。
2014-9-28 9
例2.7 对下图,取 I=e_CLOSURE{1}={1,2}, 求从状态I出发经一条有向边a所能 到达的状态集J和e_CLOSURE(J)。
a 5 e e a e 6
1
e
a
2 4
3 7
e
8
J={5, 3, 4} e_CLOSURE(J)={5, 6, 2, 3, 8, 4, 7}
S 0 1 a 1 1 b 1 1
2014-9-28
30
于是得到DFA 如下: a a 1 0 b b 化简: 因{0,1}a={1}, 故不划分。 因{0,1}b={1}, 故不划分。 因此, 最简DFA如下: a 0 b
2014-9-28 31
(2) (a*b*)*对应的NFA如图2-20所示, 用子集法将NFA确定化得下述转换表:
r1*
的转换规则可不可以改为?
e r1 e sj
si
例:(11+)*
2014-9-28
8
2.4.2 NFA M的确定化 --子集构造法(Subset Construction) 首先 定义FA M的任一状态子集 I 的 e_CLOSURE(I): (1)若si∈I, 则si∈e_CLOSURE(I); (2)若si∈I, 则从 si 出发经过e所能到达的 状态 sj 属于e_CLOSURE(I)。 其次 定义Ia: 对FA M的任一状态子集 I , 若a是Σ中的 一个字符,则定义 Ia=e_CLOSURE(J), 其中 J 是从 I 中某一状态出发经过a所能 到达的所有状态的集合。 J=move(I,a)
正规文法与有限自动机的相互转换.

正规文法与有限自动机的相互转换二零一五年十二月二十七日目录摘要 (1)关键词 (1)1课题综述 (1)1.1目的 (1)1.2设计内容 (1)1.3设计原则 (1)2系统分析 (2)2.1正规式 (2)2.2有限自动机(有穷自动机) (2)2.3NFA向DFA的转换 (3)2.4正规式与有限自动机之间的转换 (3)3系统设计 (4)3.1从正规文法到有限自动机 (4)3.11正规文法到有限自动机的等价性证明 (4)3.12 正规文法到有限自动机的构造方法 (5)3.2从有限自动机到正规文法 (6)3.21 有限自动机到正规文法的等价性证明 (6)3.22 有限自动机到正规文法的构造方法 (7)4 运行与测试 (7)总结 (9)参考文献 (9)附录 (10)摘要:正规文法包括左线性文法和右线性文法。
由于正规文法和正规表达式在描述语言的能力上是等价的,而正规表达式和有限自动机在描述语言的能力上也是等价的,因此,正规文法和有限自动机之间也存在着等价性。
通常,对于正规文法G和有限自动机M,G所定义的语言记作L(G),M所能识别的语言记作L(M),如果有L(G)=L(M),则称G和M是等价的。
关键词:正规文法;有限自动机;等价性;构造方法1课题综述1.1目的1.理解正规文法与有限自动机(FA)的本质联系;2.掌握正规文法与有限自动机之间相互转化的算法原理;3.学会使用Visual C++等编程工具实现正规文法与有限自动机之间的相互转化;1.2设计内容使用Visual C++/Visual C#等工具,设计软件MySoft_3,可以实现以下功能:1.根据用户输入的文本文件(*.txt)的名称,打开文件,并从文件中获取文法的产生式、非终结符、终结符、开始符等基本信息;2.判断该文法是否为正规文法,若是,则将其转化为有限自动机;3.根据用户输入的文本文件(*.txt)的名称,打开文件,并从文件中获取有限自动机的状态集、字母表、初态、终态集、转移函数等基本信息;4.判断该自动机是否合法,若合法,则将其转化为正规文法;1.3设计原则正规文法与有穷自动机有着特殊的关系,采用下面的规则可从正规文法G直接构造一个有穷自动机NFA M;使得L(M)=L(G):(1)M的字母表与G的终结符相同;(2)为G中的每一个非终结符生成M的一个状态,G的开始符S是开始状态;(3)增加一个新状态Z,作为NFA的终态;(4)对G中的形如A->tB的规则(其中T为终结符或,A为非终结符的产生式),构造M的一个转换函数f(A,t)=B;(5)对G中形如A->t的产生式,构造M的一个转换函数f(A,t)=Z。
第6讲 词法分析3--正规式与有限自动机的等价性

视频区域
为正规式构造NFA
(a|b)*(aa|bb)(a|b)*
(a|b)*(aa|bb)(a|b)*
X
Y
a a5a
ε
ε
X
1
2
3ε
b6 b b
视频区域
a
4εY b
为正规式构造NFA
a
a
a
aa
Xε 1 ε 2
3ε 4 ε Y
b
bb
b
M’
为NFA构造正规式
假定NFA M=<S, Σ, δ, S0, F>,我们对M的状 态转换图进行以下改造:
在M的转换图上加进两个状态X和Y,从X用ε弧连接 到M的所有初态结点,从M的所有终态结点用视ε频弧区连域 接到Y,从而形成一个新的NFA,记为M’,它只有一 个初态X和一个终态Y,显然L(M)=L(M’)。
构造Σ上的NFA M’ 使得 L(r)=L(M’)
首先,把r表示成
视频区域
Xr Y
为正规式构造NFA
按下面的三条规则对r进行分裂
i r1r2 k 代之为 i r1 j r2 k
r1
视频区域
i r1|r2 j 代之为
i
j
i
r1*
r2 k 代之为 i ε j ε k
r1
为正规式构造NFA
正规式 -> FA
对任何正规式r,都存在一个FA M,使得L(M)=L(r)。
编译原理
正规式与有限自动机的等价性 ——为NFA构造正规式
为NFA构造正规式
对转换图概念拓广,令每条弧可用一个正规式 作标记。
编译原理2.2 自动机理论

A=(aA|dA)|(a|d)
A=a|d
将它化为正规文法 变成A→
A=(a|d)A|(a|d)
A=(a|d)*(a|d)
(a|d)A|(a|d)
再根据上述 规则2转换 x=y= (a|d)
19
将A代入S=aA|a得到如下: S=a( (a|d)*(a|d)) |a =a(a|d)+|a
=a((a|d)+|)= a(a|d)+
含义:当前状态为 Ki,输入字符a, 转换为Kj状态
DFA映射的唯一性和初态的唯一性
22
DFA等价表示法:
DFA形式定义=状态转换图=状态矩阵
1、单词的构成规则用状态转换图表示
方法如下: 初始态用 “-”或“”表示;
终态点用 “+” 或“” 表示;
若f(Ki ,a)= Kj ,则从状态点Ki 到Kj画弧,标
“” 都是左结合的
9
讨论下面两个例子 例1 令={l,d},则上的正规式 r=l(ld)定义 的正规集为: {l,ll,ld,ldd,„„},其中l 代表字母,d代表数字,正规式 即是 字母 (字母|数字) ,它表示的正规集中的每个 元素的模式是“字母打头的字母数字串”, 就是Pascal和多数程序设计语言允许的标 识符的词法规则.
对于Σ*中的任何字符串t,若存在一条初态到 某一终态的路,且这条路上所有弧的标记符连接成 的字符串等于t,则称t可为DFA M所接受。 若M的初态同时又是终态,则空字可为M所接 受。
33
4、接受(识别)的理解:
① 设QK,函数f(Q,)=Q,则输入字符串是 空串,并停留在原状态上。
② 输入字符串t(t表示成Tt1形式,TΣ,t1 Σ*),在DFA M上运行的定义为:f(Q,Tt1) =f(f(Q,T),t1),其中QK。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮阴工学院编译原理课程设计报告选题名称:正规文法与有限自动机的相互转换系(院):计算机工程学院专业:计算机科学与技术(软件工程方向)班级:软件1082姓名:陈超学号: 02指导教师:高丽王文豪江波于永彦学年学期:2011 ~ 2012 学年第 1 学期2012 年 01 月 07 日摘要:正规文法包括左线性文法和右线性文法。
由于正规文法和正规表达式在描述语言的能力上是等价的,而正规表达式和有限自动机在描述语言的能力上也是等价的,因此,正规文法和有限自动机之间也存在着等价性。
通常,对于正规文法G和有限自动机M,G所定义的语言记作L(G),M所能识别的语言记作L(M),如果有L(G)=L(M),则称G和M是等价的。
关键词:正规文法;有限自动机;等价性;构造方法目录1课题综述...................................... 错误!未定义书签。
目的························错误!未定义书签。
设计内容······················错误!未定义书签。
设计原则······················错误!未定义书签。
2系统分析...................................... 错误!未定义书签。
正规式·······················错误!未定义书签。
有限自动机(有穷自动机)··············错误!未定义书签。
向DFA的转换····················错误!未定义书签。
正规式与有限自动机之间的转换············错误!未定义书签。
3系统设计...................................... 错误!未定义书签。
从正规文法到有限自动机···············错误!未定义书签。
正规文法到有限自动机的等价性证明................. 错误!未定义书签。
正规文法到有限自动机的构造方法................ 错误!未定义书签。
从有限自动机到正规文法···············错误!未定义书签。
有限自动机到正规文法的等价性证明............... 错误!未定义书签。
有限自动机到正规文法的构造方法................. 错误!未定义书签。
4代码编写...................................... 错误!未定义书签。
5运行与测试.................................... 错误!未定义书签。
1课题综述目的1.理解正规文法与有限自动机(FA)的本质联系;2.掌握正规文法与有限自动机之间相互转化的算法原理;3.学会使用Visual C++等编程工具实现正规文法与有限自动机之间的相互转化;设计内容使用Visual C++/Visual C#等工具,设计软件MySoft_3,可以实现以下功能:1.根据用户输入的文本文件(*.txt)的名称,打开文件,并从文件中获取文法的产生式、非终结符、终结符、开始符等基本信息;2.判断该文法是否为正规文法,若是,则将其转化为有限自动机;3.根据用户输入的文本文件(*.txt)的名称,打开文件,并从文件中获取有限自动机的状态集、字母表、初态、终态集、转移函数等基本信息;4.判断该自动机是否合法,若合法,则将其转化为正规文法;设计原则正规文法与有穷自动机有着特殊的关系,采用下面的规则可从正规文法G 直接构造一个有穷自动机NFA M;使得L(M)=L(G):(1)M的字母表与G的终结符相同;(2)为G中的每一个非终结符生成M的一个状态,G的开始符S是开始状态;(3)增加一个新状态Z,作为NFA的终态;(4)对G中的形如A->tB的规则(其中T为终结符或,A为非终结符的产生式),构造M的一个转换函数f(A,t)=B;(5)对G中形如A->t的产生式,构造M的一个转换函数f(A,t)=Z。
2系统分析正规式正规式:正则表达式,表示正规集的工具。
一个正规式对应一个正规文法(3型文法)之间能够进行准换三个基本规则:A->xB,B->y 则 A=xy。
A->xA|y 则A=x*y (x*代表x从1到无穷多个)A->x,A->y 则A=x|y正规式主要用到了递归的思想,无论遇到多复杂的正规式都可以拆分成上面这三种形式,然后进行解题。
有限自动机(有穷自动机)DFA(Deterministic Finite Automation ):确定的有限自动机表达式:M=(S,∑,f,So,Z)为一个有限状态集合2.∑是一个字母表,它所包含的的每个元素称为一个输入字符;是一个从SX∑(笛卡尔乘积)至S的单值部分映射。
f(S,a)=s'意味着当现在的状态为s,输入字符a时,将转换到下一状态s'.s'为s的一个后继状态。
∈S,是唯一的初态;⊆S,是一个终态集。
NFA(Nondeterministic Finite Automata):不确定的有限自动机如果理解了有限自动机,则无限自动机和它的区别就是上面的第四项。
So⊆S,它的初态不是唯一的,而是一个集合。
向DFA的转换这个转换是一个比较简单的过程。
1.如果有一个不确定的有限自动机,则可以转化为图的方式。
此处不详述怎样转图的方式。
2.先将初态确定,然后根据输入的每个元素可以得到哪些状态,依次列表。
3.这些状态集合可以称为这个有限状态集合n个子集。
按0,1,2……的顺序编号。
4.因为这些子集之间的关系是输入一个确定值确定的,所以这些子集之间存在一些关系,即把这些子集的关系写出来完成NFA向DFA的转换。
如果不懂可以从网上找一个例子进行理解。
正规式与有限自动机之间的转换任意的正规式都可以转换为上述三种的表现形式。
在一个有限自动机转换为正规式时,就是考虑从初态到终态可以输入哪些数据到达。
而这些数据可以用哪种正规式概括进来。
3系统设计从正规文法到有限自动机正规文法到有限自动机的等价性证明定理1:对于每一个右线性正规文法GR和左线性正规文法GL,都存在一个有限自动机M与之等价。
证明:1.设右线性文法GR=(VT,VN,S,P),将VN中每个非终结符视为状态符号,并增加一个新的终止符号f,(f VN)。
令M=(VN {f},VT,d,S,{f}),其中状态转换函数d由以下规则定义:①若对某个A VN及a VT {ε},P中有产生式A →a,则令d(A,a)=f;②对任意的A VN及a VT {ε},设P中左端为A右端第一个符号为a的所有产生式为A→aA1∣aA2∣…∣aAk(不包括A→a),则令d(A,a)={ A1,A2,…,Ak}。
显然上述得到的M为一个NFA。
到此,已说明存在一个FAM与该右线性文法对应,下面说明它们的等价性(L(GR)=L(M) )。
对右线性正规文法GR,在S W的最左推导过程中,利用A→aB一次就相当于在M中从状态A出发经标记为a的箭弧到达状态B(包括a=ε的情形)。
在推导过程的最后,利用A→a一次则相当于在M中从状态A出发经标记为a的箭弧到达终态f(包括a=ε的情形)。
综上所述,在正规文法GR中,S W的充要条件是:在M中,从状态S到状态f有一条通路,其上所有箭弧的标记符号依次连接起来恰好等于W,这就是说,W L(GR)当且仅当W L(M),故L(GR)=L(M)。
2. 设左线性文法GL=(VT,VN,S,P),将VN中每个非终结符视为状态符号,并增加一个新的初始状态符号q,(q VN)。
令M=(VN {q},VT,d,q,{S}),其中状态转换函数d由以下规则定义:①若对某个A VN及a VT {ε},P中有产生式A→a,则令d(q,a)=A;②对任意的A VN及a VT {ε},设P中所有右端第一个符号为A,第二个符号为a的所有产生式为A1→Aa,A2→Aa,…,AK→Aa,则令d(A,a)={ A1,A2,…,Ak}。
显然上述得到的M为一个NFA。
到此,已说明存在一个FAM与该左线性文法对应,下面说明它们的等价性(L(GL)=L(M) )。
对左线性正规文法GL,在S W的最左推导过程中,利用B→Aa一次就相当于从状态A出发经标记为a的箭弧到达状态B(包括a=ε的情形)。
在推导的最后,利用A→a一次则相当于在M中从状态q出发经标记为a的箭弧到达状态A(包括a=ε的情形)。
综上所述,在正规文法GL中,S W的充要条件是:在M中,从状态q到状态S有一条通路,其上所有箭弧的标记符号依次连接起来恰好等于W,这就是说,W L(GL)当且仅当W L(M),故L(GL)=L(M)。