第3章 有穷自动机
合集下载
第三章有穷自动机

例:将图示的DFA M最小化。
a
b
6
4
a
a
a
b
a
1
ab
5a
7
b3
b
b
2 b
1、将M状态分为两个子集: P0=({1,2,3,4},{5,6,7})
2、{1,2,3,4}读入a后划为: P1=({1,2},{3,4},{5,6,7})
3、进一步划分: P2=({1,2},{3},{4},{5,6,7})
对M的状态集S进行划分的步骤:
①把S的终态与非终态分开,分成两个子集, 形成基本划分,属于这两个不同子集的 状态是可区别的。
②假定某个时候已含m个子集,记={I(1) , I(2) , …,I(m) }且属于不同子集的状态是可 区别的,再检查中的每个I能否进一步划 分,对于某个I(i) ,令I(i) ={S1,S2,…,Sk}, 若存在一个输入字符使得move(I(i) ,a)不包 含在现行的某一子集I(i)中,则将I(i)一分 为二。
若M的某些结既是初态结,又是终态结,
或者存在一条从某个初态结到某个终态结 的道路,则空字可为M所接受。
例: NFA M=({0,1,2,3,4},{a,b},f,{0},{2,4})
f(0,a)={0,3} f(2,b)={2} f(0,b)={0,1}
f(3,a)={4} f(1,b)={2} f(4,a)={4}
M’=(K, ,f,S,Z)
一个含有m个状态和n个输入字符的NFA 可表示为一张状态转换图,该图含有m个 状态结,每个结可射出若干条 箭弧与别的 结点相连接,每条弧用*中的一个字(不 一定要不同的字,且可以为空字)作标记 (称输入字),整个图至少含有一个初态 结以及若干个终态结。
编译原理第三章_有穷自动机

5
例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。
例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。
第三章有穷自动机-PPT课件

q 0 c h a rc h ,n a m e [ k ] n a m e r e a d ( c h ) 若 c h = l q 1 q 2 符 号 表 , n a m e查 n a m e n a m e + c h 非 l , d 用 r e a d ( c h ) 若 没 有 , 则 填 表 , 否 则 返 回 其 地 址 r e a d ( c h ) 若 c h = lo rd
自动机接受(收)字符串
• 3)自动机接收语言 自动机 M所能接收的串组成一个集合, 则称该集合为自动机 M所能接收(识别)的 语言。 用L(M)表示: L ( M ) = {ω ∣ t(q0, ω )∈ F , ω ∈ * }
3.2.4 自动机的等价性
•定义3.2 M和M是等价的,当且仅当 对每一个串x,M接收x当且仅当M接收x。 •定义3.3 如果M仅通过重新标记它的 状态就能转换称M,则M和M称为同构的 (Isomorphic)。 •FSA的一个基本定理是:对每一个自动 机M,存在一个等价的具有最少状态个 数的自动机M,而且对于每一个其状态 个数与M相同且等价于M的自动机M″, 必是与M同构的。换句话说,M在结构 上是唯一的。
3.2.5 非确定有穷状态自动机
•定义3.4 一个非确定有穷自动机NDFSA是一个
五元组
NDFSA=(Q, , t, q0, F) 其中,Q是一个非空有穷状态集, 是一个非空有穷输入字母集, 映射t为QQ的子集(即t是一个多值映射), Q0Q是开始状态集, FQ是终止状态集。 •同样的,NDFSA也可以用状态转换表和状态转换 图表示。
3.2.3 构形和移动(2)
• 构形(q0,ω)称为初始构形,其中q0 是初始状态,ω是由该自动机可接 收或拒绝的任何输入串。构形(q, ) 称为终止构形,其中是空串, qF(终态集)。 • 自动机的移动(记为├)是从一种构 形到另一种构形的转换。 • DFSA的工作过程就是一系列的移动 过程。 • 记号├+称为├的传递闭包;├*称为 ├的自反闭包。 ├*表示“0次或多 次移动”;├+表示“一次或多次移 动”。
自动机接受(收)字符串
• 3)自动机接收语言 自动机 M所能接收的串组成一个集合, 则称该集合为自动机 M所能接收(识别)的 语言。 用L(M)表示: L ( M ) = {ω ∣ t(q0, ω )∈ F , ω ∈ * }
3.2.4 自动机的等价性
•定义3.2 M和M是等价的,当且仅当 对每一个串x,M接收x当且仅当M接收x。 •定义3.3 如果M仅通过重新标记它的 状态就能转换称M,则M和M称为同构的 (Isomorphic)。 •FSA的一个基本定理是:对每一个自动 机M,存在一个等价的具有最少状态个 数的自动机M,而且对于每一个其状态 个数与M相同且等价于M的自动机M″, 必是与M同构的。换句话说,M在结构 上是唯一的。
3.2.5 非确定有穷状态自动机
•定义3.4 一个非确定有穷自动机NDFSA是一个
五元组
NDFSA=(Q, , t, q0, F) 其中,Q是一个非空有穷状态集, 是一个非空有穷输入字母集, 映射t为QQ的子集(即t是一个多值映射), Q0Q是开始状态集, FQ是终止状态集。 •同样的,NDFSA也可以用状态转换表和状态转换 图表示。
3.2.3 构形和移动(2)
• 构形(q0,ω)称为初始构形,其中q0 是初始状态,ω是由该自动机可接 收或拒绝的任何输入串。构形(q, ) 称为终止构形,其中是空串, qF(终态集)。 • 自动机的移动(记为├)是从一种构 形到另一种构形的转换。 • DFSA的工作过程就是一系列的移动 过程。 • 记号├+称为├的传递闭包;├*称为 ├的自反闭包。 ├*表示“0次或多 次移动”;├+表示“一次或多次移 动”。
第3章有穷自动机

▪ 正规式为 :(10 | 01) (10 | 01)*
第3章有穷自动机
▪ 习题:P55-3.5
第3章有穷自动机
3.3.2 正规表达式RE 正规文法G
▪ 同理,对任何一个正规表达式e,都存在一个等价的 正规文法G ,使得 L(e) =L(G) 。
▪ 具体转换方法如下: ▪ 1) 令VT= ∑ ▪ 2) 对任意正规式R选择一个非终结符Z生成规则 ▪ Z→R , 并令S=Z,即Z是开始符号;
第3章有穷自动机
RE与FA——RE的性质
设A、B、C均为正规表达式,则有下列关系成立: ⑴ A|B=B|A ⑵ A|(B|C)=(A|B)|C ⑶ A(BC)=(AB)C ⑷ A(B|C)=AB|AC (B|C)A=BA|CA ⑸ εA=Aε=A ⑹ (A*)*=A* ⑺ A* = A |A* =ε|AA* = (ε|A)* ⑻ A = A= ⑼ A | =A
第3章有穷自动机
▪ (4) (a | b)* 是正规式 , 则相应正规集为 ▪ L((a | b)*)=(L(a | b))*= { a, b }*={ε,a,b,ab,ba, …}
▪ (5) ba* 是正规式 , 则相应正规集为 ▪ L(ba*)=L(b)L(a*)={b,ba,baa,baaa,…}
多数程序设计语言的单词符号都能用正规文法来描 述,但直观上比较繁琐,不利于词法分析程序的构造。
正规表达式是用于描述称之为正规集的语言类的另
一种表示形式,习惯用 RE 来表示。
第3章有穷自动机
例如: 表示标识符的文法用左线性文法来描述: <标识符>→<字母>|<标识符><字母>|<标识符><数字> 可抽象为: I→ l | I l | I d 我们可以用正规式来描述
编译原理 第3章 词法分析与有穷自动机(第5-8讲)

它所对应的状态表如图:
状态 0 1 2 3 a 1 3 1 3 后继 状态 b 2 2 3 3
输入字符 接受 否 否 否 是
式的转化
22
第3章 词法分析与有穷自动机
■DFA所识别的语言
给定DFA M,对于字符c1,c2,…,cn,当以下条件成立时, 称M接受由c1,c2,…,cn组成的字符串c1c2…cn: 存在状态序列s0,s1,s2,…,sn,使得s1=f(S,c1), s2=f(s1,c2),…,sn=f(sn-1,cn),且sn∈Z。 由DFA M接受的语言L(M)是所有M接受的字符串组成的集 合。
25
第3章 词法分析与有穷自动机
判断下图是DFA还是NFA的状态转换图,并 写出其他2种表示形式
26
第3章 词法分析与有穷自动机
■由正规表达式R构造NFA
1.基本正规表达式 (a)对于正规式φ,所构造NFA: (b)对于正规式ε,所构造NFA: (c)对于正规式a,a∈Σ,则 NFA:
x ε y
练习:若S=a|bb,则L((a|bb)*)=?
5
第3章 词法分析与有穷自动机
■正规式中运算的优先级
括号优先,* 次之,•(连接)再次之,| 最后 例:a|bc* ≌ a|(b(c*)) ab|c*d ≌ (ab)|((c*)d)
■ 正规式与正规集举例
L(a|bc*)=L(a)∪L(bc*) 思考:L(ab|c*d)=? =L(a)∪L(b)L(c*) =L(a)∪L(b)(L(c))* ={a}∪{b}{ε,c,cc,ccc……} ={a,b,bc,bcc,bccc,……}
17
第3章 词法分析与有穷自动机
■有穷自动机的状态转移图表示方法
第3章词法分析与有穷自动机20090319

单词的种类 (1)关键字:if、for、while (2)标识符: (3) 常数: (4) 运算符:+、-、* (5)分界符:, 、;、(、)
编译原理
2013年8月27日
词法分析程序的输出形式-----二元式
单词类别 单词的属性值
单词类别可以用整数编码表示:一类一种或一字一种
单词类别 关键字 标识符 常数 运算符 分界符
编译原理
2013年8月27日
【例3.9】将描述标识符的正规式R=l(l∣d)*转换 成相应的正规文法。
• 令S为文法的开始符号, 根据规则(2) 有 • S→l(l∣d)* • 根据规则(3)变换为: • S→lA • A→(l∣d)* • 根据规则(4)变换为: • S→lA • A→(l∣d)A∣ε •
有穷自动机的作用
实质上是提供了一种逻辑的探测方式,去探测一 些输入串是否属于某种语言,即: 它可以作为一种 语法检查器。
编译原理
2013年8月27日
3.4.1
确定的有穷自动机(DFA)
M=(Σ, Q, f,S, Z)
Σ:有穷字母表,它的每个元素称为一个输入符号 Q:有穷状态集,它的每个元素称为一个状态 S∈K,是唯一的初态
运算符的优先级: 先*, 后 • , 最后 | • 在正规式中可以省略.
正规式相等 这两个正规式表示的语言相等
编译原理
2013年8月27日
正规式举例
• 例:设有字母表 ∑={a,b},根据正规式与正规集的定义,有以 下的正规式和正规集 正规式 正规集 a {a} a∣b {a,b} ab {ab} ( a∣b)( a∣b) {aa,ab,ba,bb} a* {ε,a,aa,aaa,…,任意个a的串} (a∣b)* {ε,a,b,aa,ab,ba,bb,…所有a,b组成的串} (a︱b) *(aa︱bb) (a︱b) * ∑*上所有含两个连续的a 或两 个连续的b组成的串
3 FA 语言与自动机导论

A
i FA M
B
状态 A i B d F
FA f (A, i) = B f (B, i) = B f (B, d) = B (B为终止状态)
RG AiB BiB BdB Bε
B
B
B
1
状态转换矩阵
11
FA的状态转换图
状态转换图显示了一个由状态、转换组成的状态 机。
有限自动机的状态转换图说明系统的动态视图。 状态图强调一个对象按事件次序发生的行为。
22
例3.3扩:接受语言{x000 | x {0,1}*} ∪{x001 | x {0,1}*}的 FA
解:该语言定义的句子以000或001结尾。设q0为DFA的开 始状态,用q1记住结尾串中的第一个0;用q2记住在q1之 后紧接着又读到的一个0;用q3记住在q2后紧接着又读到 的一个0,用q4记住在q2后紧接着又读到的一个1,识别 该语言的FA如下图(3-5):
则 A也作为终止状态
13
3.2 有穷状态自动机
主要内容:
1、DFA的形式化定义
2、DFA的仿真算法(伪代码描述)
14
一.有穷自动机的形式化定义
1. 确定的有穷自动机DFA
一个确定的有穷自动机DFAM是一个五元组(5-tuple): M=(K,Σ, δ ,q0,F) 其中:K:状态的非空有穷集 Σ:有穷输入字母表 δ:K× Σ到K的一个映射(是单值函数)
q0∈K 是开始状态
F K 是终止状态集
15
例3-2:构造一个DFA,识别语言{x000y | x,y {0,1}*} 解:该语言定义的句子都会有三个连续的0。设q0为DFA 的开始状态,用q1记住子串“000”的第一个0;用q2记住 在q1之后紧接着又读到的一个0,这可能是子串“000”的 第2个0;用q3记住在q2后紧接着又读到的一个0,发现子 串“000”即识别结束。识别该语言的确定的有穷状态自 动机如下图:
chapter 3-有穷状态自动机

例2、假设字母表为{0,1},构造一个识别含有001字串的所有 字符串的DFA的状态图。
1 0 q1 1 q2 0
0 1 q3
0,1
q4
第三章、有穷状态自动机
例2、假设字母表为{0,1},构造一个识别含有001子串的所有 字符串的DFA的状态图。
1 0 q1 1 q2 0
0 1 q3
0,1
q4
第三章、有穷状态自动机
关键问题:DFA与NFA等价吗?
第三章、有穷状态自动机
第三章、有穷状态自动机
NFA与DFA的等价性
NFA与DFA等价是指两种模型识别相同的语言类(正则语言)。 对于任意给定的DFA,存在一个NFA与之等价; 对于任意给定的NFA,存在一个DFA与之等价。 DFA本身就是一种NFA,所以,要证明DFA与NFA等价,只需证明 对于任意给定的NFA,存在一个DFA与之等价。 下面根据给定的NFA构造一个DFA: 这里M2=(Q2,Σ,δ,q0,F ),Q2 =P(Q),
第三章、有穷状态自动机
δ1
q01 q1 q2
0 1
q1 q2 q1
0 q02 q3 q4
q01 q1 Q2
1 q3 q4 q5
δ2
q02 q3 q4
q5
q5
q5
第三章、有穷状态自动机
下面构造M= (Q,Σ,δ,q,F), (1)Q={(r1,r2) ∣ r1∈Q1且r2∈Q2}; (2)Σ= {0,1}; (3)转移函数 δ((r1,r2) ,a)= δ (δ1 (r1,a) ,δ 2(r2,a)), 如下页表所示; (4)q0=(q01,q02)是M的起始状态; (5)F={(q2,q02),(q2,q3),(q2,q4),(q2,q5),(q01,q4), (q1,q4)}。
1 0 q1 1 q2 0
0 1 q3
0,1
q4
第三章、有穷状态自动机
例2、假设字母表为{0,1},构造一个识别含有001子串的所有 字符串的DFA的状态图。
1 0 q1 1 q2 0
0 1 q3
0,1
q4
第三章、有穷状态自动机
关键问题:DFA与NFA等价吗?
第三章、有穷状态自动机
第三章、有穷状态自动机
NFA与DFA的等价性
NFA与DFA等价是指两种模型识别相同的语言类(正则语言)。 对于任意给定的DFA,存在一个NFA与之等价; 对于任意给定的NFA,存在一个DFA与之等价。 DFA本身就是一种NFA,所以,要证明DFA与NFA等价,只需证明 对于任意给定的NFA,存在一个DFA与之等价。 下面根据给定的NFA构造一个DFA: 这里M2=(Q2,Σ,δ,q0,F ),Q2 =P(Q),
第三章、有穷状态自动机
δ1
q01 q1 q2
0 1
q1 q2 q1
0 q02 q3 q4
q01 q1 Q2
1 q3 q4 q5
δ2
q02 q3 q4
q5
q5
q5
第三章、有穷状态自动机
下面构造M= (Q,Σ,δ,q,F), (1)Q={(r1,r2) ∣ r1∈Q1且r2∈Q2}; (2)Σ= {0,1}; (3)转移函数 δ((r1,r2) ,a)= δ (δ1 (r1,a) ,δ 2(r2,a)), 如下页表所示; (4)q0=(q01,q02)是M的起始状态; (5)F={(q2,q02),(q2,q3),(q2,q4),(q2,q5),(q01,q4), (q1,q4)}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例3.10
NDFA =(Q,,t,Q0,F)其中 Q={q0, q1, q2, q3}, ={x, y}, Q0={q0}, F={q1}. t(q0,x)={q1, q2}, t(q0,y )={q0}, t(q1, x)={q0}, t(q1,y )={q1,q2}, t(q2,x)={q3}, t(q2,y) ={q3}, t(q3,x)={q1,q3}, t(q3,y)={q3} DFA =(Q’, , t’,q0, F’). (1) ={x,y}; (2)Q’={[q0], [q1], [q2], [q3], [q0, q1], [q0, q2], [q0, q3], [q1, q2], [q1, q3], [q2, q3], [q0, q1, q2], [q0, q1, q3], [q0, q2, q3], [q1, q2, q3], [q0, q1, q2, q3]} (3)定义映射t’: t’([q0], x)=[q1,q2], t’([q0], y)=[q0], t’([q1], x)=[q0], t’([q1], y)=[q1, q2], t’([q2], x)=[q3], t’([q2], y)=[q3], t’([q3], x)=[q1, q3], t’([q3], y)=[q3], t’([q0, q1], x)=[q0, q1,q2], t’([q0, q1], y)=[q0, q1,q2], …. t’([q0, q1 , q2 , q3], x)=[q0, q1,q2 ,q3], t’([q0, q1 , q2 , q3], y)=[q0, q1,q2 ,q3]. (4)DFA的开始状态q0’=[q0] (5) DFA的开始状态集合F=[q1], [q0, q1], [q2, q1], [q3, q1], [q0, q1, q2], [q0, q1, q3], [q1, q2, q3], [q1, q2, q3 , q4]
例3.1状态转换表
DFSA 例3.2
DFA A=({q0, q1, q2, q3}, {a,b}, t, q0, {q0})其 中 t 定义为:
t(q0 ,a)= q1 t( q2 ,a)= q3
t(q0 ,b)= q3
t(q1 ,a)=q0
t( q2 ,b)= q1
t( q3 ,a)= q2
t(q1 ,b)= q2
t( q3 ,b)= q0
状态转换表
t(q0 ,a)= q1 t(q0 ,b)= q3 t(q1 ,a)=q0 t(q1 ,b)= q2
状态 字符
t( q2 ,a)= q3 t( q2 ,b)= q1 t( q3 ,a)= q2 t( q3 ,b)= q0
q0 q1 q2 q3
a q1 q0 q3 q2
DFSA 可接受的符号串
DFSA=(Q, ∑, t, q0, F), 扩充的映射t: Q×Σ*→Q 定义为:
(1)t(q,)= q
q∈Q, a∈∑, ∈ ∑*
(2) t(q, a)=t(t(q,a), ) 其中
DFSA=(Q, ∑, t, q0, F),如果t(q0, )=q∈F,则符号
x
q2
y
x,y
y
q1
x
q3
x,y
NDFSA与DFSA的区别
• NDFSA有一个开始状态集合,而DFA只有一个 开始状态; • NDFSA的映射是Q Q的子集,是一个多值 映射,而DFSA是Q Q的一个单值映射。
例3.7 证明符号串xyx能被例3.6中的NDFSA,所 接受。 证明:因为t(q0, xyx)=t(q1,yx) t(q2,yx) (∵t(q0, x)={q1, q2})=t(q1,x) t(q2,x) t(q3,x) (∵t(q1, y)={q1, q2}, t(q2, y)={q3})={q0} {q3}
q0
q1
a b
q2
a
q4
a b
a
q0
q2
b
b
q3
b
q3
b
(1)
(2)
确定化-子集法(自学)
• 给定一个NDFSA A=(Q, ∑, t, Q0, F)是一个非确定的有穷 自动机,一定可以构造一个和它等价的确定有穷自动机 DFSA A’=(Q’, ∑, t’, q0, F’),即L(A)=L(A’)。
例子
NDFSA N=({S,P,Z},{0,1},t,{S,P}, {Z}) 其中 N状态图表示 t(S,0)={P} 1
t(S,1)={S,Z} t(P,1)={Z} t(Z,0)={P} t(Z,1)={P}
1 S 0,1 Z 1
0
P
例子3.6
NDFSA =(Q,,t,Q0,F)其中 Q={q0, q1, q2, q3}, ={x, y}, Q0={q0}, F={q1}. t(q0,x)={q1, q2}, t(q0,y )={q0}, t(q1,x)={q0}, t(q1,y )={q1,q2} t(q2,x)={q3}, t(q2,y)={q3} t(q3,x)={q1,q3}, t(q3,y)={q3} NDFA状态图表示 y q0 x x
非确定的有穷自动机NDFSA
• 定义3.4 一个非确定的有穷自动机是一个五元组, NDFA=Q,,t,Q0,F,其中Q为状态的有穷非空集, 为有穷输入字母表,t为Q 到Q的子集(多值映射), Q0Q是初始状态集,F Q为终止状态集。
一个确定的有穷自动机(DFSA)M是一个五元组:M=(Q,Σ,t,q0,F) 其中
{q1, q3}={q0, q1, q3}
∵q1∈ t(q0, xyx)={q0, q1, q3}, q1 ∈F 所以xyx能被该NDFSA所接受。
空移环路的寻找
• 如果自动机的弧上允许标记,则称此自动 机为自动机,记为NDFSA或DFSA.
q1 q2 q1
q2
q3
(a)
q1 q2
3 t是转换函数,是在Q×Σ→Q上的映射,即,如: t=(q,x)=q’,(q,q’Q)就意味着,当前状态为q, 输入符为x时,将转换为下一个状态q’,我们把q’称作q 的一个后继状态;
4 q0 Q是唯一的一个开始状态; 5 F Q是一个终止状态集,它至少由一个终止状态组成。
状态转换表
FSA例3.1 :识别一个由带符号或无符号十进制数组成的语言。
终止状态
开始状态
有穷自动机DFSA定义3.1: 一个确定的有穷自动机(DFSA)M是一个五元组:M= (Q,Σ,t,q0,F)其中 1 Q是一个有穷集,它的每个元素称为一个状态; 2 Σ 是一个有穷字母表,它的每个元素称为一个输入符 号,所以也称Σ 为输入符号字母表;
确定化-造表法
子集法的确定,如果状态数n很大,确定化 后的状态数将更大2n-1,并且其中很多是不可到 达的状态而造表法,更加简单而有效。 步骤: 确定DFSA的开始状态,从开始状态开始分别计算 对不同输入字母的映象,如果产生新的状态,则 继续计算新状态的映象,重复这个过程一直到没 有新的状态出现为止。
b q3 q2 q1 q0
DFSA 的状态图表示
t(q0 ,a)= q1 t(q0 ,b)= q3 t( q2 ,a)= q3 t( q2 ,b)= q1
t(q1 ,a)=q0
t(q1 ,b)= q2
t( q3 ,a)= q2
b
t( q3 ,b)= q0
q2
a a
b
q1
a
a
q3
b
q0
b
DFSA 例3.3:DFSA M=({0,1,2,3},{a,b}, f,0,{3}), 其中:f素称为一个状态;
2 Σ 是一个有穷字母表,它的每个元素称为一个输入符号,所以也称Σ 为 输入符号字母表; 3 t是转换函数,是在Q×Σ→Q上的映射,即,如: t=(q,x)=q’,(q, q’Q)就意味着,当前状态为q,输入符为x时,将转换为下一个状态q’, 我们把q’称作q的一个后继状态; 4 q0 Q是唯一的一个开始状态; 5 F Q是一个终止状态集,它至少由一个终止状态组成。
第3章 有穷自动机
• • • • • • 有穷自动机形式定义 NDFSA DFSA 的转换 正规文法与有穷自动机 正规表达式与FA DFSA在计算机中的表示 小结
有穷自动机 有穷自动机(也称有限自动机)作为一种识别装 置,它能准确地识别正规集,即识别正规文法 所定义的语言和正规式所表示的集合,引入有 穷自动机这个理论,正是为词法分析程序的自 动构造寻找特殊的方法和工具。 有穷自动机分为两类:确定的有穷自动机 (Deterministic Finite State Automata)和不确定 的有穷自动机(NonDeterministic Finite State Automata) 。
t(q0 ,a)= q1
t(q0 ,b)= q3 t(q1 ,a)=q0
t( q2 ,a)= q3
t( q2 ,b)= q1 t( q3 ,a)= q2
t(q1 ,b)= q2
t( q3 ,b)= q0
q2 a a
b b
q1
a a
b b
q3
q0
自动机的等价
定义3.2 给定两个有穷自动机M和M’,如果L(M)=L(M’),则 称自动机M和M’等价。 例3.4 DFSA M=({q0,q1}, {a,b}, t, q0, {q0} ), 其中t(q0,a)=q1, t(q1,b)=q0. DFSA M’=({q0’,q1’,q2’}, {a,b}, t’, q0’, {q2’} ), 其中 t’(q0’,a)=q1’, t’(q1’,b)=q2’, t’(q2’,a)=q1’. 则L(M)=L(M’)={(ab)n|n1}, 所以自动机M,M’等价。