正规文法与有限自动机的相互转换
- 格式:doc
- 大小:120.00 KB
- 文档页数:15
正规式转化为有限自动机的算法综述网络工程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 正规表达式的应用与有限自动机的引入除了在编译程序构造与设计外,正规表达式还被应用于其他领域,比如字处理软件中的文本检索、数据库查询语言、文件处理语言以及遗传序列的研究等。
正规⽂法与正规式 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)*。
正规文法与有限自动机的相互转换二零一五年十二月二十七日目录摘要 (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。
淮阴工学院编译原理课程设计报告选题名称:正规文法与有限自动机的相互转换系(院):计算机工程学院专业:计算机科学与技术(软件工程方向)班级:软件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)。