正规文法与有限自动机的相互转换
正规式转化为有限自动机的算法综述
正规式转化为有限自动机的算法综述网络工程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)有限自动机转换为正规式对于S上的NFAA/,可以构造一个S上的正规式/?,使得切⑷。
拓广状态转换图的概念,令每条弧可用一个正规式作标记。
为S上的NFA Af构造相应的正规式及,分为如下两步。
(1)在M的状态转换图中加两个节点,一个x节点,一个y节点。
从x节点到NFAM 的初始状态节点引一条弧并用e标记,从NFAM的所有终态节点到y节点引一条弧并用e 标记。
形成一个与A/等价的MS AT只有一个初态jc和一个终态少。
(2)按下面的方法逐步消去中除x和;;的所有节点。
在消除节点的过程中,用正规式来标记弧,最后节点jc和;;之间弧上的标记就是所求的正规式。
消除节点的规则如图2-12所示。
2)正规式转换为有限自动机同样地,对于S上的每个正规式/?,可以构造一个S上的NFAAf,使得L(A0=Z(及)。
(1)对于正规式i,可用图>13所示的拓广状态图表示。
R o(1)通过对正规式/?进行分裂并加入新的节点,逐步把图转变成每条弧上的标记是E上的一个字符或e,转换规则如图2-14所示。
最后所得的图即为一个NFAM,JC为初态节点,少为终态节点。
显然,L(A0=I(及)。
【试题2-24】2011年11月真题48下图所示为一个有限自动机(其中,A是初态、C是终态),该自动机识别的语言可用正规式(48)表示。
A. (0|1)*01B. 1*0*10*1C. 1*(0)*01D. 1*(0|10)*1*分析:在正规式中,符号*表示重复若干次(包括0次),符号|表示“或”。
在状态A,可以输入1或0,如果输入1还可以回到状态A,如果输入0直接到达状态B;在状态B,可以输入0或1,如果输入0则还回到状态B,而输入1,则进入到状态C;在状态C可以输入0或1,输入0到达状态B,输入1到达状态A,但由于C是终态,自动机可识别的语言是由0、1构成的字符串的集合,但该集合必须以01结果,因此选项A正确。
右线性文法转换到FA
右线性文法转换到FA内容定义如何将右线性文法转换成有限自动机(FA)定义右线性文法是正规文法的一种特殊类型,其中G的所有产生式的右侧必须至多有一个变量,此变量必须在所有终结符的右侧。
使用JFLAP,我们将展示如何将右线性文法转换成一个有限状态自动机。
如何将右线性文法转换成有限自动机(FA)我们将通过加载语法开始。
你可以输入文法(在下面显示)或者加载文件regGrammarToNFA.jff。
点击Convert然后Convert Right-Linear Grammar to FA。
当进入转换为FA模式,你的窗口应该是这样的。
这个语法中的每一个变量作为一个状态的标签显示,开始变量标识开始状态。
此外,有一个最终状态没有相关联的变量。
现在,我们需要添加转换来完成FA。
当我们扩大产生式“S->aB”,类似于在状态S阅读“a”然后向状态B移动。
因此,我们应该建立一个从状态S到状态B在字母“a”上的一个转换。
当我们在JFLAP中创建一个转换,您的窗口应该是这样的:注意:有关如何使用FA面板的教程,你应该先阅读关于有限自动机的网页教程。
对于右侧没有变量的产生式,创建一个到达最终状态的转换。
通过点击Done按钮你可以检查你需要添加多少转换。
完成转换的输入, JFLAP会通知您在FA 中那些产生式制作成功。
您也可以让JFLAP通过单击“全部显示”按钮自动填写转换。
当你把所有的转换输入到FA,您的窗口应该是这样的:注意:我们在FA中移动状态来得到更好的图片。
现在,由于所有的转换已添加,我们已经成功地将右线性文法转换成有限状态自动机。
你们可以导出FA。
当您导出已转换的FA,新的有限自动机的窗口会弹出已创建的FA状态和转换。
导出FA后,您的有限自动机的窗口将看起来像这样:我们就这样结束简短的关于将右线性文法转换成FA的教程。
感谢您的阅读!。
2.4 正规文法、正规表达式与有限自动机的等价性
δ 定义为:1) 对A ∈ V: δ ([A],ε )={α |A → α 是G的一个产生式}
2) 对a ∈ T 且[aα ] ∈ Q : δ ([aα ], a ) = {[α ]}
对推导的步数用数学归纳法可证明
[α ] ∈ δ ([ S ], w)
*
当且仅当
S ⇒ wα
G
特别地,当α = ε 时,就有:
• 例2.9 对于下列文法,求其等价的正规表达式。
P : S → 1S | 0 A | ε A → 0S |1A
• 解:转化为方程组
S = 1S + 0 A + ε A = 0 S + 1A
• 解此方程组得唯一解
S = (1 + 01*0)* A = 1*0(1 + 01*0)*
• 因此上述文法所生成的语言是 L((1+01*0)*)
那么易知, G ' 是一个右线性文法,而且 L(G' ) = L(G)R 。对于 G ' ,我们在 前面已构造出一个带ε -转换的 NFA:M 接受 L(G ' ) 。注意上面 M 中只有 一个终止状态,我们把 M 的终止状态作为初始状态,把 M 的初始状态作 为终止状态,把 M 的图形表示中的各条有向边的方向逆转(边上旁标的 ' 字 符 不 变 ), 就 得 到 一 个 新 的 带 ε - 转 换 的 NFA: M , 显 然
G2 ,使得 L(G2 ) = L( M ) 。
(证明请看教材,这里从略)
NFA→右线性文法
• 给定NFA: M=(Q, Σ, δ, q0, F) • 构造右线性文法:G=(Q, Σ, P, q0) • 产生式的构造规则: • 1) q→ap 如果(q,a)→p • 2) q→a 如果(q,a)→p且p∈F • 3) q0 →ε 如果 q0 是终结状态。
RG、FA、RE等相互之间的转换
NFA确定化过程:
(初态、其它状态、终态)
0,1
S0 A ε B ε
C1
Z
0
S ABC BC BCZ
ABC BC BC BC
① δ(S,ε)=;
② δ(S, 0)=A;
③ δ(A, 0)=; δ(B, 0)=B; δ(C, 0)=;
1
state
DFA state
S
S,ABC
S,ABC
S,ABC
BCZ ABC,BC,BCZ S,ABC,BC,BCZ
❖ DFA的终态(为所有含有NFA的终态的状态)
S ABC BC BCZ
0
ABC BC BC BC
1
state
S
S,ABC
BCZ ABC,BC,BCZ
BCZ BC,BCZ
BCZ BCZ
DFA state S,ABC S,ABC S,ABC,BC,BCZ S,ABC,BC,BCZ S,ABC,BC,BCZ 26
1 ε4 b 5 ε
6
令r4= r*3 ,则有:
ε
0ε
ε 1
a
3
ε
ε4 b 5 ε
ε
6ε7
令r5=a, 令r6=b 令r7=b 令r8= r5 r6 令r9= r8 r7
则有
7 a 8 b 9 b 10
令r10= r4 r9 则最终得到NFA M:
ε
ε 0ε 1
2
a
3
ε
ε4 b 5 ε
6 ε 7 a 8 b 9 b 10
S∈I
—— J是从状态子集I中的每个状态出发,经过标记为a的弧 而达到的状态集合.
—— Ia是状态子集,其元素为J中的状态,加上从J中每一个 状态出发通过ε弧到达的状态
第二章:有穷自动机和正规文法
上一页
下一页
退 出
10
2.3 DFA与NFA等效 由于DFA是NFA的特例,所以DFA能接受的语言必能为 NFA所接受,相反,NFA接受的语言,则能找到一个等效 的DFA接受语言。 定理2.3.1 设L(MN)是NFA MN接受的语言,则存在一DFA MD接受L(MD),满足L(MD)=L(MN)
上一页 下一页 退 出
12
n
可见[q1,q2,…,qn]是DFA MD的一个状态 通过对输入行ω的长度作归纳容易证明: δ D(q0D, ω )=[q1,q2,…,qn]⇔ δ (q0, ω )= {q1,q2,…,qn} 当|ω|=0时,即ω=ε,有δD(q0D,ε)=q0D, δ(q0,ε)={q0} 因为q0D=[q0],所以结论成立。 当|ω|≤K时,设 δD(q0D,ω)=[q1,q2,…,qn]⇔ δ(q0,ω)={q1,q2,…,qn}成立。 那么|ω|=K+1时,即:ω=ω1a,ω1∈T*,a∈T,则 δD(q0D,ω1a)=δD(δD(q0D,ω1),a)
T(M)={0,1} * 中的所有含偶数个0和偶数个1的句子集 合。
上一页 下一页 退 出
4
2.2不确定有穷自动机 1. NFA NFA M=(K,∑,δ,q0,把字的输入头右移一个单 元,并选择P1 ,P2 ,…,PK 中任意一个作为下一个状 态。 把映射δ定义域扩大到K×Σ* :当输入一个字符串 时,将δ改为δ'。 △ δʹ(q,ε)={q}和δ(q,xa)= ∪ δ(p,a)
20
2.有ε转换NFA和无ε转换的NFA的等效 如果有ε转换的NFA M接受语言L(M),则存 在无ε转换的NFA M1 使L(M1)=L(M)。 证明:首先对应有ε转换的NFA M=(Q,T,δ,q0,F) 构造无ε转换的 NFA M1=(Q,T,δ1,q0,F1) F1= F∪{q0} 当ε-closure(q0)含F的一个状态 F 否则 定义δ1:对任意q∈Q,a∈T则δ1(q, a)=δ'(q, a) 因为M1是无ε转换,对于δ1’可用δ1代替, 但要区别δ和δ’。 对字符串ω的长度进行归纳证明: δ1(q0,ω)=δ’(q0,ω)
第3章-2-状态转换图
例2:
字母
字母或数字
0
1
其它
②
*
PROCEDURE Pro0; BEGIN Getchar; IF char IN [‘A’..‘Z’ ] then pro1 else error; END; Procedure pro1; begin getchar; while char IN [‘A’..‘Z’, ‘o’..‘g’ ] DO begin concat; getchar; End; pro2; End; procedure pro2; begin retract; return(101,TOKEN ); end;
识别无符号数的状态矩阵
当前状 态 0 扫描字符 d . ther d . E other d E other d other d + other d other d other 语义处理操作或接受动作 {w=0;n=0;p=0;e=1;w=w*10+d} {w=0;n=0;p=0;e=1;} error {w=w*10+d;} {return ( ICON= w ); {n++; w=w*10+d;} {return (FCON =w*pow(10,e*p-n) ) ;} {n++;w=w*10+d;} error {p=p*10+d;} e=-1; error {p=p*10+d;} error {p=p*10+d;} {return (FCON=w*pow(10,e*p-n) ); 后继状 态 1 3 1 2 4 end 2 4 end 2 6 5 5 6 6 end
步骤 1 2 3 4 5 6
当前状态 余留的符号串 R U U U S S 00011 0011 011 11 1 (识别结束)
自动机、正则文法、正则表达式的相互转化.ppt
我们可以通过一例子来说明语法分析过程
7
例:已知符号串S=cad 文法G[Z]:
Z→cAd
A→ab|a 求解 SL(G[Z])
分析过程 是设法建立一棵语法树, 使语法树的末端结点与
给定符号串相匹配.
1.开始:令Z为根结点
文法 E->E+T | T T->T*F | F F->(E) | i
消除左递归后: E->TE’, E’->+TE’ | ε T->FT’, T’->*F T’| ε F->(E) | i
例2 已知G[E]: E->T*F | T/F | F T->F | T*F | T/F
解:左递归改为右递归得:
1. 左递归文法:
左递归文法 回溯问题
文法G,存在U ∈Vn,if U=+=>U…, 则G为左递归文法
自顶向下分析方法的基本缺点:
不能处理具有左递归性的文法
自顶向下分析为什么不能处理左递归文法?
自顶向下分析为什么不能处理左递归文法?
在采用最左推导的自顶向下分析中,左递归的存在是十分有害 的,例如,考虑文法G[S]: SSa|b,分析输入串baaa是否为 文法的合法句子。按照自顶向下分析法,对输入串baaa的当前 输入符b从开始符号S开始进行最左推导,若首次使用SSa则 可能得到:
15
算法描述
1.把G的非终结符整理成某种顺序A1,A2,……An ,使得:
A1 ::= δ1|δ2|……δk
A2 ::= A1 r……
间接左递归
A3 ::= A2u | A1v…..
2.4 正规表达式到有限自动机的构造.
重命名为: S 0 1 2 3 4 5 6
2018/12/5
a 1 3 1 3 6 6 3
b 2 2 4 5 4 4 5
14
于是得到对应的DFA如下:
a a b b
a 0 b b
1
3 2
5 2 a a
a
2 b 4 2 b a
b
6 2
2018/12/5
15
注意:如果DFA的某个状态至少包含NFA的 一个接受状态,那么,这个状态是DFA的一 个接受状态。
2.4.1 由正规式构造等价的NFA M 由正规式构造等价的NFA M的方法 (Thompson构造法): (1) 将正规式R表示为拓广转换图。
X R Y 2
2018/12/5
4
(2) 采用下述三条转换规则构造NFA
1. s i 2. s i
3. s i r1| r2 r1r2 r1* r1 sj
r1*
的转换规则可不可以改为?
e r1 e sj
si
例:(11+)*
2018/12/5
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)
举例说明正则文法与dfa之间的转换关系
举例说明正则文法与dfa之间的转换关系正则文法(Regular Grammar)和确定有限状态自动机(DFA,Deterministic Finite Automaton)是形式语言理论中的两个重要概念,它们之间存在一定的转换关系。
下面将通过一个例子来说明这种转换关系。
假设我们有一个正则文法 G,它由两个产生式A → aBb 和B → b 组成。
这个文法描述的语言是所有以一个 'a' 开头,后跟一个或多个 'b' 的字符串,即 L(G) = {a^n b^n n >= 1}。
我们可以将这个正则文法转换为确定有限状态自动机。
首先,我们需要为文法中的每个非终结符(A 和 B)创建一个状态。
对于产生式A → aBb,我们将创建一个状态 s_1,并将转移函数δ(s_0, a) = s_1 和δ(s_1, b) = s_2,其中 s_0 是初始状态。
对于产生式B → b,我们将创建一个状态 s_3,并将转移函数δ(s_1, b) = s_3。
终止状态集合将包括所有产生式右边的状态,即{s_2, s_3}。
这样,我们就可以得到一个确定有限状态自动机,它的初始状态是 s_0,终止状态集合是 {s_2, s_3},转移函数是δ(s_0, a) = s_1, δ(s_1, b) = s_2, 和δ(s_1, b) = s_3。
这个自动机接受的语言就是由正则文法 G 描述的语言L(G)。
总的来说,正则文法转换为 DFA 的过程可以概括为:对于文法中的每个非终结符,创建一个状态;对于每个产生式,定义转移函数;将所有产生式右边的状态标记为终止状态。
通过这种方式,我们可以将正则文法转换为确定有限状态自动机,从而实现对正则语言的有效识别和匹配。
正规式与有限自动机的等价
V1(V2)* V3
证B. 就正规式V,引入初态X和终态Y. 先构造NFA V
X
Y
法则(P50图3.7): 确定化: 给定 I为M的状态子集, a为 中字符. 引入概念 I的闭包,记为 _closure(I): (a) I中元在闭包中 (b)一切 I中元通过弧能到的状态
Ia= _closure(J): J是所有那些由I中元经a弧能到达的状态全体
j是所有那些由i中元经a弧能到达的状态全体xy例子i?closure112ia?closurej?closure3452345678?a??a?a?15263847转换矩阵构造过程确定化设?abnfam初态集为xiiaib?closurex依ia计算依ib计算选取未出现在第一列者填入第一列下行位置作为i重新计算ia和ib例
D. 最少化算法(P56-58) 例子3.6 (P51图3.8)
I) 令 = {S1, S2} S1为非终态集; S2为终态集. 可区分 II) 设 = {S1, S2, …, Sn } (Si , Sj 可区分, 各Si 待区分) 如果存在 a和某个Si , 使得Sia 分别落在中 p 个不同的子集, 则将Si 分为 p 个更小的状态子集Si1, Si2, …, Sip, 使得对每个Sij 而言, Sija全部包含在 中的同一子集中. (注意: Si 中一切遇a 无定义的状 态归为一类(一个子集)) 如此, 每细分一次得一个 new III) 若 new , 则将 new 作为 重复 II) IV) 对中任意子集Si = {Si1, Si2, …, Sik}选一个代表状态如Si1. 将原来导入 Si2, …, Sik的弧改为导入Si1. 然后删除Si2, …, Sik. Si1为新的初态 Si 中有原初态; Si1为新的终态 Si 中有原终态 V) 在IV步结果基础上,删除所有无用状态. 即从初态永远到达不了的那些状 态.
自动机、正则文法、正则表达式的相互转化
R→Sa|a
Q→Sab|ab|b
4.把Q代入S的右部选择 5.消除S的直接左递归
最后得到文法为:
S→Sabc|abc|bc|c S→(abc|bc|c)S’ S’ →abc S’|ε S→(abc|bc|c)S’ S’ →abc S’|ε Q→Sab|ab|b R→Sa|a
17
最后得到的文法: S→(abc|bc|c)S’ S’ →abc S’|ε Q→Sab|ab|b R→Sa|a
20
例子 设有文法G[S]: S->Aa|Bb A->d|cA B->b|aB
对S: FIRST(Aa)={d,c}, FIRST(Bb)={a,b}, FIRST(Aa) ∩FIRST(Bb)= φ
对A: FIRST(d)={d}, FIRST(CA)={c}, FIRST(d) ∩FIRST(Ca)= φ 对B: FIRST(b)={b}, FIRST(aB)={a}, FIRST(b) ∩FIRST(aB)= φ
可以看出其中关于Q和R的规则是多余的规则 ∴经过压缩后 S→(abc|bc|c)S’ S’ →abc S’|ε 可以证明改写前后的文法是等价的
应该指出,由于对非终结符的排序不同,最后得到的文法在形 式上可能是不一样的,但是不难证明它们的等价.
18
2. 回溯问题
什么是回溯?分析工作要部分地或全部地退回 Nhomakorabea重做叫回溯
E -> T*F | T/F | F
T -> FT’ T’ -> *FT’ | /FT’ | ε
14
②消除一般左递归
基本思想 先用代入法把间接左递归变成直接左递归,再消除 直接左递归,最后去掉多余规则以化简文法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正规文法与有限自动机的相互转换二零一五年十二月二十七日目录摘要 (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。
2系统分析2.1正规式正规式:正则表达式,表示正规集的工具。
一个正规式对应一个正规文法(3型文法)之间能够进行准换三个基本规则:A->xB,B->y 则 A=xy。
A->xA|y 则A=x*y (x*代表x从1到无穷多个)A->x,A->y 则A=x|y正规式主要用到了递归的思想,无论遇到多复杂的正规式都可以拆分成上面这三种形式,然后进行解题。
2.2有限自动机(有穷自动机)DFA(Deterministic Finite Automation ):确定的有限自动机表达式:M=(S,∑,f,So,Z)1.S为一个有限状态集合2.∑是一个字母表,它所包含的的每个元素称为一个输入字符;3.f是一个从SX∑(笛卡尔乘积)至S的单值部分映射。
f(S,a)=s'意味着当现在的状态为s,输入字符a时,将转换到下一状态s'.s'为s的一个后继状态。
4.So∈S,是唯一的初态;5.Z⊆S,是一个终态集。
NFA(Nondeterministic Finite Automata):不确定的有限自动机如果理解了有限自动机,则无限自动机和它的区别就是上面的第四项。
So⊆S,它的初态不是唯一的,而是一个集合。
2.3NFA向DFA的转换这个转换是一个比较简单的过程。
1.如果有一个不确定的有限自动机,则可以转化为图的方式。
此处不详述怎样转图的方式。
2.先将初态确定,然后根据输入的每个元素可以得到哪些状态,依次列表。
3.这些状态集合可以称为这个有限状态集合n个子集。
按0,1,2……的顺序编号。
4.因为这些子集之间的关系是输入一个确定值确定的,所以这些子集之间存在一些关系,即把这些子集的关系写出来完成NFA向DFA的转换。
如果不懂可以从网上找一个例子进行理解。
2.4正规式与有限自动机之间的转换若ab若任意的正规式都可以转换为上述三种的表现形式。
在一个有限自动机转换为正规式时,就是考虑从初态到终态可以输入哪些数据到达。
而这些数据可以用哪种正规式概括进来。
3系统设计3.1从正规文法到有限自动机3.11正规文法到有限自动机的等价性证明定理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)。
3.12 正规文法到有限自动机的构造方法上述定理的证明采用了构造性的证明方法,由此可以得出由正规文法到有限自动机的构造方法。
从右线性正规文法GR=(VT,VN,S,P)构造有限自动机M=( VN {f},VT,d,S,{f})的方法如下:①将VN中每个符号视为一个状态符号,增加一个新的终态符号f,f VN;②对于产生式A→a(a VT {ε}),则构造d(A,a)=f;③对于产生式A→aA1(a VT {ε}),则构造d(A,a)= A1。
从左线性正规文法GL=(VT,VN,S,P)构造有限自动机M=( VN {q},VT,d,q,{S})的方法如下:①将VN中每个符号视为一个状态符号,增加一个新的初态符号q,q VN;②对于产生式A→a(a VT {ε}),则构造d(q,a)=A;③对于产生式A1→Aa(a VT {ε}),则构造d(A,a)= A1。
3.2从有限自动机到正规文法3.21 有限自动机到正规文法的等价性证明定理2:对于每一个有限自动机M,都存在一个右线性正规文法GR和左线性正规文法GL与之等价。
证明:1.设DFAM=(S,∑,d,S0,F),分以下两种情况进行证明:(1)若S0 F,则令GR=(∑,S, S0, P),其中P是由以下规则定义的产生式集合,对任何a ∑及A,B S,若d(A,a)=B,则:①当B F时,令A→aB;②当B F时,令A→aB∣a;显然,上述得到的文法为一个右线性正规文法,下面说明它们的等价性(L(M)=L(GR) )。
在DFAM中,对任何w ∑*,不妨设w=a1a2…ak,其中ai ∑(i=1,2,…,k),若S W,则存在一个最左推导:S0 a1A1 a1a2A2 … a1…aiAi a1…aiai+1Ai+1 …a1…ak,因而,在M中存在一条从S0出发一次经过A1,…,Ak-1到达终态的通路,该通路上所有箭弧的标记依次为a1,…,ak。
反之亦然。
所以,w L(GR)当且仅当w L(M),故L(M)=L(GR)。
(2)若S0 F,因为d(S0,ε)= S0,所以ε L(M),但上面构造的L(GR)中不含ε。
因此,需在文法中添加产生式S0→ε,这样,就有L(M)=L(GR)。
2. 设DFAM=(S,∑,d,S0,F),分以下两种情况进行证明:(1)若S0 F,则令GL=(∑,S, X, P),其中X F,P是由以下规则定义的产生式集合,对任何a ∑及A,B S,若d(A,a)=B,则:①当A≠S0时,令B→Aa;②当A=S0时,令B→a∣Aa;显然,上述得到的文法为一个左线性正规文法,下面说明它们的等价性(L(M)=L(GL) )。
在DFAM中,对任何w ∑*,不妨设w=a1a2…ak,其中ai ∑(i=1,2,…,k),若存在一条从S0到X的通路,通路上所有箭弧的标记依次为a1,…,ak,则在GL中一定存在一个最左推导:X Akak Ak-1ak-1ak … A2a2…ak … a1…ak,即w L(GL)。
反之亦然。
所以,w L(GL)当且仅当w L(M),故L(M)=L(GL)。
(2)若S0 F,则ε L(M),但上面构造的L(GL)中不含ε。
因此,需在文法中添加产生式X→ε,这样,就有L(M)=L(GL)。