编译原理简明教程(第3版)-课件 第3章 自动机原理_第1页
编译原理简明教程(第3版)-课件 第3章 自动机原理_第2页
编译原理简明教程(第3版)-课件 第3章 自动机原理_第3页
编译原理简明教程(第3版)-课件 第3章 自动机原理_第4页
编译原理简明教程(第3版)-课件 第3章 自动机原理_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新工科建设·计算机类系列教材

免费提供编译原理16目录第一章引言第二章形式语言理论基础第三章自动机理论基础第四章词法分析第五章语法分析—自顶向下分析方法第六章语法分析—自底向上分析方法第七章语义分析及中间代码的生成第八章代码优化第九章目标代码的生成第十章符号表和出错处理第十一章

面向对象语言的编译第十二章

并行编译技术第十三章

软件构造23自动机理论基础本章主要介绍状态转换图定义、有限自动机的理论及下推自动机的的理论。着重需要掌握以下内容:确定的有限自动机DFA非确定的有限自动机NFANFA到DFA的转换DFA的最小化下推自动机PDA3学习目标

目录3.1有限自动机的基本概念3.2确定有限自动机DFA的化简3.3正则表达式形式定义3.4下推自动机PDA3.5本章小结43.1有限自动机的基础5定义3.1:有限自动机定义为一个五元组:D=(K,Σ,δ,S,F)。K是有穷的非空状态集合;Σ是有穷的输入字母表;δ是从K×Σ到K的映射,表示状态的转换(状态转换函数);S是初始状态;F是终止状态。确定有限自动机

(DFA):每次转换的后继状态都是唯一的不确定有限自动机(NFA):转换的后继状态不是唯一的3.1.1有限自动机的定义和表达式1.状态转换图的引进和构造定义3.2:状态转换图是定义在字母表上的有向图,满足以下三个条件:

至少存在一个初始结点

存在一些终止状态结点(也可为空)

每条边上标有字母表∑上的符号(也可为空串ε)6例:TG接收(or识别)的符号串:从某一初始结点到某一终止结

点的序列。TG所接收的符号串集合:L(TG)={ab,bab,abbb,……}状态转换图:结点------状态------文法的非终结符

初始结点--初始状态

终止结点--终止状态--开始符号

边--------转换关系--终结符号∑={a,b}70S1S2Sbbbba算法3.1

正则文法构造状态转换图算法

将S设为初始状态(假定文法的字母表中不含符号S)以每一个非终结符号作为其它状态对于形如A→b

的每个规则,引一条从初始状态S到状态A的边,其标记为b;

而对于形如A→Bc

的规则,引一条从状态B到A的边,其标

记为c(其中A、B为非终结符号,b、c为终结符号)。④以文法开始符号作为终止状态。

特别地,一个状态转换图可以不止一个初始状态,也可以有不止一个终止状态。8

例3.1:文法G[Z],其中,VN={Z,A,B},VT={a,b}。Z→Za|Aa|BbA→Ba|aB→Ab|b92.应用状态转换图识别句子识别句子:从开始状态到终止状态经过的边上的符号序列。识别句子(α)的步骤:10定理3.1当识别一个符号串α时,如果能从转换图的初始状态出发行进达到α的右端,那么,α为句子的充要条件是:最后的当前状态为终止状态。用状态转换图识别句子的过程,称为运行状态转换图。111从开始状态出发,以它作为当前状态,并从α的最左字符开始,重复第二步到达α的最右端为止2扫描α的下一个字符(当前字符),在当前状态射出的各条边中找出标有该字符的边并沿此边前进,以所达到的状态作为下一个当前状态。例3.2:对句子ababaaa进行分析并生成语法树

当前状态输入串的其余部分语法树SababaaaAbabaaaBabaaaAbaaaBaaaAaaZaZ

123.应用状态转换图为正则语言构造正则文法状态转换正则文法正则语言

ε

a

ab

a|b

13b14正则文法:

A→CbC→Bb|bB→AbA→Ba|a例3.3正则语言{|n≥0}153.1.2有限自动机的机器模型

有限自动机(FA,FiniteAutomata)可看作一个机器模型,由一个带读头的有限控制器和一条字符输入带组成。工作原理:读头从左到右扫描输入带,读到一个字符,状态改变,同时读头右移一个字符,…,直到读头读到“#”,状态进入终止状态。控制器中包括有限个状态,读入一个字符形成状态转换。

后继状态为自身状态转换后继状态为一个DFA后继状态为多个NFA

输入带ababa…#控制器163.1.3

确定有限自动机(DFA)

定义3.3:DFA是一个五元组

D=(Κ,Σ,,Ѕ,F)

其中:Κ是状态的非空有限集

Σ有穷的输入字母表

是从ΚXΣ到Κ的映射,且为单值,即如果有转换函数(,a)=,、∈Κ表示当前状态为,输入符号为a时,转换到

Ѕ初始状态Ѕ∈Κ

F非空的终止状态集FΚDFA----DeterministicFiniteAotomaton17例3.4:由例3.1的状态转换图构造DFA如下

D1=

({S,Z,A,B},{a,b},,S,{Z})

其中:(S,a)=A,(S,b)=B

(A,a)=Z,(A,b)=B

(B,a)=A,(B,b)=Z

(Z,a)=Z

同理,由例3.3中的状态转换图构造确定有限自动机如下:D2=({S,A,B

,C,Z},{a,b},,S,{Z})

18(S,a)=A

(S,a)=C(A,b)=

(B,a)=

(B,b)=C(C,b)=

19定义3.5

由有限自动机接受的符号串集合称为正则集,记为L(D)。20定义3.4对于某个DFAD=(K,Σ,δ,S,F),如果δ(S,α)=P,P∈F,则称字符串α可被该DFAD所接受(识别)。3.1.4有限自动机在计算机内的表示

1、矩阵表示

例3.6

注:

S0表示初始状态,0表示无后继状态

输入状态abS0=SAB

S1=AZB

S2=BAZ

S3=ZZ0ABZZZAB021上例:

输入状态abc222.表结构表示状态名射出边数标记1指向下一状态……标记k指向下一状态k233.1.5不确定有限自动机(NFA)定义3.6

NFA是一个五元组,=(Κ,Σ,,Ѕ,F)其中:Κ是状态的非空有限集Σ有穷的输入字母表是从ΚXΣ到Κ的子集的映射Ѕ开始状态ЅΚF终止状态FΚ24例:=(Κ,Σ,,Ѕ,F)其中

Κ={,,

}Σ={a,b}Ѕ={,}F={}(,a)={}(,b)={,}(,a)=Φ(,b)={}(,a)=Φ(,b)={}25

得出:

输入状态ab

26例3.7由正则文法G[Z]=(VN,VT,S,P)构造NFA其中VN={Z,A,B}VT={a,b}P集为Z→Za|Aa|BbA→Ba|Za|aB→Ab|Ba|b27步骤当前状态输入串余留部分可能的后继状态选择状态

1SbabbabbBB2BabbabbA,BA3AbbabbBB4BbabbZZ5ZabbA,ZA6AbbBB7BbZZ8.

例3.8对于输入符号串babbabb运行过程:28

由此可见,在NFA中由于某些状态的转换需从若干个可能的后继状态中进行选择,这种不确定性给识别过程带来反复,影响了工作效率。

解决这一问题的一个方法就是下面将介绍的使NFA转换成等价的DFA。293.1.6NFA到DFA的等价转换定理3.3:设L是一个为某NFA所接受的符号串集合,则存在一个接受L的DFA,即L(D)=L(N)。

算法3.2:NFAN=

(Κ,Σ,,Ѕ,F)DFAN’=(,,,,)

1、若NFA中全部初始状态为,,…,

则令DFA的初始状态=[,,…,]

[]表示由若干状态构成的某一状态302、设Q=[,,…,]是DFA的一个状态

在NFA中,({,,…,},a)={,,…,}

则令([,,…,],a)=[,,…,]。3、重复第2步,直到不出现新的状态为止。4、上面得到DFA的状态集,映射,Σ不变。5、在DFA中,含有NFA终止状态的状态均为DFA的终止状态。31例3.9=(Κ,Σ,,Ѕ,F)其中S={,}K={,,}Σ={a,b}F={}32

转换:①=[,]②({,},a)={}({,},b)={,}∴([,],a)=[]([,],b)=[,]③({},a)=Φ({},b)={}({,},a)={}({,},b)={,,}∴([],b)=[]

33

([,],a)=[]([,],b)=[,,]({},b)={}([],b)=[]({,,},a)={}([,,],a)=[]({,,},b)={,,}

([,,],b)=[,,]∴={[,],[],[,],[],[,,]}=[,]={[],[,],[,,]}3435

输入状态ab

[][][,][][]

[,][][,,][]

[][,,][][,,]363.2确定有限自动机DFA的化简

化简:对于一个DFA,构造另一DFA,使L()=L()且的状态个数不多于

的状态个数。定义3.7:设A1与A2是两个有限自动机,如果L(A1)=L(A2),即接受相同的语言,则称这两个有限自动机A1与A2等价。373.2.1等价状态和无关状态定义3.8从Si出发能导出的所有符号串集合记为L(Si),设有两个状态Si和Sj,若有L(Si)=L(Sj)则称Si和Sj是等价状态。定义3.9无关状态包括无用状态和死状态。对于状态Si

,若从初始状态不可能到达该状态,则称Si为无用状态。对于状态Si,若从该状态出发不能到达终止状态,则称Si为死状态。38L()=L(),是等价状态例(如图3.9):39AbabbSBZABAB

死状态

无用状态403.2.2自动机的化简上例合并等价状态删除无关状态

1、不等价状态的区别对于状态,有(,a)=,(,a)=若与等价,则称,等价,否则,不等价。(,a)=,(,b)=,、等价吗?41

2.自动机的化简

算法3.3自动机的化简

1、划分状态K=(终止状态集,非终止状态集)

2、进一步划分,

直到不产生新的划分。

对于(,a)=,(,a)=若,属同一状态集合,则,将放在同一集合,否则分两个集合。

3、重复步骤2,直到每个集合不能再划分为止,此时每个状态集合中的状态均是等价的。

4、合并等价状态,即在等价状态集合中取任一状态作为代表,删去其他一切等价状态。

5、若有无关状态,则将其删除。42

例:解:10

{,,}{,}(,a)=,(,a)=,(,a)=(,b)=,(,b)=,(,b)=43

∴{,

,

}={

,}{

}又∵(,b)=∴{

,}={}{}{}{}{}{

,}

合并,得:443.3正则表达式形式定义

用正则运算符来构造描述语言的表达式,称作正则表达式。

1.α;α∈∑;2.ε;3.Φ;4.(R1∪R2),这里R1和R2是正则表达式;5.(R1·R2),这里R1和R2是正则表达式;6.(R1*),这里R1是正则表达式。45定义3.10正则表达式的形式定义:

如果R1和R2是正则表达式,则以下1~6项都是正则表达式。例:Σ={a,b}正则表达式:

ε,Φ,a,b,ab,

,

,…

L(ε)={ε},L(Φ)=Φ,L(a)={a}L()={ε,a,aa,aaa,…}L()={ε,aa,ab,aab,…}L()={a,aab,aabab,…}正则集:见书P53

正则表达式也是描述单词的重要工具。46

对于标识符的描述

Σ={<字母>,<数字>}

正则表达式

<字母>

正则集

L(R)={<字母>,<字母><字母>,

<字母><数字>,…}

类似于扩充的BNF表示法<标识符>∷=<字母>{<字母>|<数字>}

47例:G=({A},{α,β},A,P)

P:A→αA|βL(G[A])={β,αβ,ααβ,…}={β|n≥0}

用正则表达式β

正则集L(β)={β,αβ,ααβ,…}483.4下推自动机(PDA)例:文法G[Z]:Z→Z(Z)|ε

49自动机:下推自动机可解决上述自动机的缺陷

语言:

ε,(),(()),((())),()(),…成对括号3.4.1下推自动机的机器模型

由一条输入带,一个有限控制器和一个下推栈组成abaa…#控制器输入带┆栈顶下推栈503.4.2PDA的形式定义定义3.12PDA定义为一个七元组

P=(K,∑,,δ,S,,F)其中:K是状态集合∑是输入字母表下推字母表(栈符号的有限集)δ从Kx(∑∪{ε})x→Kx的映射下推栈中的初始下推符号号∈ S初始状态集SKF终止状态集FK51转换函数

δ(,a,)=(,β)表示:在状态,输入a,栈顶符号为时,进入状态,由符号串β代替,同时读头右移一格。

(β的最左符号放在栈顶,即β的逆串放入下推栈)特别:当β=ε时,表示被弹出,读头右移;当a=ε时,表示读头不动,状态仍转换。52【例3.11】

Z→Z(Z)|

ε

其中K={},∑={(,)},={A,(}S={},=A,F={}δ(,(,A)=(,(A)δ(,(,()=(,(()δ(,),()=(,ε)δ(,ε,A)=(,ε)=(K,∑,,δ,S,,F)53

当前状态下推栈

输入符号A(()(()))A(()(()))A(()(()))A((()))A((()))A((()))A(())A(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论