2 词法基础分析-DFA_第1页
2 词法基础分析-DFA_第2页
2 词法基础分析-DFA_第3页
2 词法基础分析-DFA_第4页
2 词法基础分析-DFA_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第二章:词法分析

DFA——确定有限自动机内容介绍确定有限自动机(DFA)的定义DFA的表示DFA接受的集合应用实例用DFA描述单词自动机的实现注意的问题自动机等价1.确定有限自动机的定义确定有限自动机M为一个五元组:M=(S,,S0,f,Z),其中:S是一个有穷状态集,它的每个元素称为一个状态;

是一个有穷字母表,它的每个元素称为一个输入字符;S0S,是唯一的一个初始状态(开始状态);f是状态转换函数:S

S,且单值函数.f(Si,a)=Sk

表示:当前状态为Si,遇输入字符a时,自动机将唯一地转换到状态Sk,称Sk为Si的一个后继状态;ZS,是终止状态集(可接受状态集、结束状态集),其中的每个元素称为终止状态(可接受状态、结束状态),Z可空.任意自动机一定要有这五个要素!!1.确定有限自动机的定义DFA的确定性:初始状态唯一状态转换函数f:S

S是一个单值函数,也就是说,对任何状态s

S,和输入符号

a

,f(S,a)唯一地确定了下一个状态,即至多确定一个状态1.确定有限自动机的定义例子S{0,1,2},={a,b},f(0,a)=1,f(0,b)=2,f(1,a)=2S0=0,Z={2}这是个啥?2.DFA的表示状态转换矩阵用自动机的输入字符表示列标用状态来表示行标矩阵元素表示自动机的状态转换函数.标识初始状态和终止状态:一般约定,第一行表示开始状态S0,或在右上角标注“+”;右上角标有“*”或“-”的状态为终止状态;DFAM=({S,U,V,Q},{a,b},f,S,{Q}),其中f定义为:

f(S,a)=U

f(V,a)=Uf(S,b)=V

f(V,b)=Qf(U,a)=Qf(Q,a)=Qf(U,b)=V

f(Q,b)=Q2.DFA的表示输入字符状态abS+UVUQVVUQQ*QQ易于计算机存储使用,但不直观状态转换图:用有向图表示自动机1.

结点表示状态:

1.1非终止状态由单圆圈围住的状态标识来表示;1.2终止状态由双圆圈围住的状态标识来表示(或由单圆圈围住的状态标识并标识以“-”来表示);

1.3

开始状态由一个箭头指向的状态结点来表示(或标识以“+”来表示).2.状态转换函数用有向边来表示,若f(Si,a)=Sk,则由表示Si的状态节点到表示Sk的状态节点发出一条标识为a的有向边.2.DFA的表示

状态2.DFA的表示状态转换图:用有向图表示自动机G=(V,E)

转换终止状态?SQ01a

初始状态?DFAM=({S,U,V,Q},{a,b},f,S,{Q}),其中f定义为:

f(S,a)=Uf(V,a)=Uf(S,b)=Vf(V,b)=Qf(U,a)=Qf(Q,a)=Qf(U,b)=Vf(Q,b)=Q状态转换图USVQaababab,b自动机的含义是什么?3.DFA接受的串对于

*中的任何字符串t,若存在一条从初始结点到某一终止结点的路径,且这条路上所有弧的标记符连接成的字符串等于t,则称t可为DFAM所接受(识别)。若DFAM的初始状态同时又是终止状态,则空字符串可为DFAM所接受(识别)DFAM所能接受的字符串的全体记为L(M).3.DFA接受的串abdc……输入带读头有限状态控制器

例:L(M1)={aba,abaa,abab,abaab,…}DFAM10123abaa,babaCurrentCharCurrentStateCurrentStateCurrentCharCurrentStateCurrentCharCurrentStateCurrentChar

例:L(M2)={a,ab,abb,abbb,…}DFAM201ab

例:L(M3)={

,b,bb,bbb,…}DFAM31b4.应用实例待机待选择冲调待取不足投币投币选择恰当/金额充足付咖啡/找零钱取咖啡/取零钱金额不足超时退款退款超时4.应用实例一道考研题:给定一个字符串,判断其是否合法1)这个字符串由0,1组成,由#作为结尾2)合法的要求是不能出现两个1串。如0101#就是非法的,011#是合法的。4.应用实例一个稍微需要技巧性的例子:用自动机描述被3整除的十进制数。S10,3,6,9S22,5,8S30,3,6,91,4,70,3,6,92,5,81,4,72,5,81,4,7定义好状态的含义5.DFA描述单词标识符的描述我们用I表示所有字母,D表示数字,则有:01II|D5.DFA描述单词常数的描述D1=1|2|3|...|9无符号整数带符号整数实数01D1D320405..6DD.+|-D15.DFA描述单词特殊符号01{2+3EOF6.自动机的实现直接转换法每个状态对应一个带标号的switch语句转向边对应goto语句状态转换矩阵自动机存储在矩阵中,状态比较多,每次都去查表,跳转。bijkaLi:switch(CurrentChar){case‘a’:gotoLj;case‘b’:gotoLk;default:Error();}直接转换法的实现1.非终止状态对应的switch语句2.终止状态对应的switch语句ijkLi:switch(CurrentChar){case‘a’: gotoLj;case‘b’: gotoLk;case‘Eof’: Accept;default:Error();}ab直接转换法的实现aca,b102abcL0:switch(CurrentChar){case‘c’: gotoL1;case‘a’: gotoL0;case‘b’: gotoL0;default:Error();}直接转换法实现的例子双switch来写aca,b102abcS=S0ch=getchar();while(ch!=Eof){switch(S)......case‘S1’Switch(ch)case‘c’S=S2break......}直接转换法实现的例子双switch来写状态转换矩阵的实现 1.当前状态State置为初始状态; 2.读一个字符

CurrentChar; 3.如果CurrentChar

Eof并且

T(State,CurrentChar)

error,

则当前状态转为新的状态:

State

=T(State,CurrentChar),读下一字符

CurrentChar;重复第3步工作.4.如果当前字符为Eof并且当前状态属于终止状态,则接受当前字符串,程序结束;否则报错.直接转换VS状态转换矩阵 直接转换

状态转换矩阵

多段代码

书写复杂,效率高

书写简单,但要存储表

适合状态

温馨提示

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

评论

0/150

提交评论