第二章词法分析确定有限自动机_第1页
第二章词法分析确定有限自动机_第2页
第二章词法分析确定有限自动机_第3页
第二章词法分析确定有限自动机_第4页
第二章词法分析确定有限自动机_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第二章词法分析确定有限自动机第一页,共三十七页,编辑于2023年,星期四第2章outline一、词法分析概述1,词法分析程序的功能2,词法分析相关的一些问题二、正则表达式三、有限自动机1,确定有限自动机DFA2,非确定有限自动机NFA,NFA到DFA的转换3,DFA的化简4,正则表达式到NFA的转换四、词法分析程序构造√√第二页,共三十七页,编辑于2023年,星期四三、有限自动机正则表达式-specification有限自动机–Implementation什么是有限自动机? 有限自动机是描述有限状态系统的数学模型。有限状态系统:状态:是将事物区分开的一种标识.具有离散状态的系统:如数字电路(0,1);电灯开关(on,off);十字路口的红绿灯;其状态数是有限的。具有连续状态的系统:水库的水位、室内的温度等可以连续发生变化;可以有无穷个状态.有限状态系统是离散状态系统。在很多领域,如网络协议分析、形式验证、代码安全、排版系统等有重要应用。第三页,共三十七页,编辑于2023年,星期四有限自动机的例子-经典的过河问题一个人带着一头狼,一头羊,以及一棵白菜处于河的左岸。人和他的伴随品都希望渡到河的右岸。有一条小船,每摆渡一次,只能携带人和其余三者之一。如果单独留下狼和羊,狼会吃羊;如果单独留下羊和白菜,羊会吃菜。怎样才能渡河,而羊和白菜不会被吃掉呢?第四页,共三十七页,编辑于2023年,星期四过河问题模型化第五页,共三十七页,编辑于2023年,星期四有限自动机的模型有限自动机FA可以理解成状态控制器FA有有限个状态,其中有初始状态,终止状态起始:处于初始状态,读头位于输入带开头中间:从左到右依次读取字符,发生状态迁移结束:读头到达输入带末尾,状态到达终态10110…状态控制器读头输入带输出第六页,共三十七页,编辑于2023年,星期四有限自动机的五要素有限状态集SS有限输入符号集转移函数(s,a)=t一个开始状态s0一个终止状态集TS输入:字符串输出:若输入字符串结束,且到达终止状态,则接受,否则拒绝。例如:“101”

输出拒绝,“1010”输出接受。第七页,共三十七页,编辑于2023年,星期四1、确定有限自动机DFA确定有限自动机DFA是一个五元组M=(SS,,,S0,TS),SS:有限的状态集合{S0,S1,S2,…}:有限的输入字符表:状态转换函数,SSSS{}是单值全映射函数;S0:初始状态,S0

SSTS:终止状态集,TSSS

第八页,共三十七页,编辑于2023年,星期四例1:DFAM=({0,1,2,3,4},{a,b},,{0},{3})其中为:

(0,a)=1(0,b)=4

(1,a)=4(1,b)=2

(2,a)=3(2,b)=4

(3,a)=3(3,b)=3

(4,a)=4(4,b)=4第九页,共三十七页,编辑于2023年,星期四DFA的两种表示形式转换表(transitiontable)易于实现转换图(transitiongraph)直观,易于理解第十页,共三十七页,编辑于2023年,星期四转换表行:状态列:字符元素:表示状态转换,状态或开始状态:默认表的第一行表示开始状态,或者状态加上角标+终止状态:状态加上角标-ab0+14142………3-33第十一页,共三十七页,编辑于2023年,星期四转换表例1:DFAM=({0,1,2,3,4},{a,b},,{0},{3})其中为:

(0,a)=1(0,b)=4

(1,a)=4(1,b)=2

(2,a)=3(2,b)=4

(3,a)=3(3,b)=3

(4,a)=4(4,b)=4ab0+141422343-33444第十二页,共三十七页,编辑于2023年,星期四转换图状态转换边

f(S1,a)=S2开始状态终止状态S0SS

aS1S2第十三页,共三十七页,编辑于2023年,星期四转换图ab0+141422343-334440213abababba4ab第十四页,共三十七页,编辑于2023年,星期四转换图ab0+112233-330213aabbaab0+112233-33第十五页,共三十七页,编辑于2023年,星期四DFA的例子例2::{a,b,c,d}SS:{S0,S1,S2,S3}开始状态:S0

终止状态集:{S3}f:{(S0,a)S1,(S0,c)S2,(S0,d)S3,(S1,b)S1,(S1,d)S2,(S2,a)S3,(S3,c)S3}S0aS1S2S3cddabc第十六页,共三十七页,编辑于2023年,星期四DFA的确定性形式定义初始状态唯一:S0转换函数是单值函数,即对任一状态和输入符号,唯一地确定了下一个状态转换表初始状态唯一:第一行表元素唯一转换图初始状态唯一:每个状态最多发出n条边,n是字母表中字母的个数,且发出的任意两条边上标的字母都不同第十七页,共三十七页,编辑于2023年,星期四DFA的一些概念DFA接受的字符串如果M是一个DFA,a1

a2…

an

是一个字符串,如果存在一个状态序列(S0,S1,…,Sn),满足

S0S1,S1S2,……,Sn-1Sn其中S0

是开始状态,Sn

是接受状态之一,则串a1

a2…

an

被DFAM接受.DFA定义的串的集合(DFA接受的语言)DFAM接受的所有串的集合,称为M定义的语言,记为L(M)a1a2an第十八页,共三十七页,编辑于2023年,星期四DFA接受的语言例1中自动机接受的语言是L(aba(a|b)*)例2中自动机接受的语言是L((ab*da|ca|d)c*)0213aabbaS0aS1S2S3cddabc第十九页,共三十七页,编辑于2023年,星期四DFA接受的语言若DFAM只有一个状态,既是开始状态又是终止状态,则DFAM定义的串集是L()={}若若DFAM只有一个状态,并且是开始状态或DFAM有若干个状态,但开始状态到终止状态之间没有通路,则DFAM定义的串集是空集SS0或S0SS’S’’第二十页,共三十七页,编辑于2023年,星期四设计有限自动机自动机的设计是一个创造过程,没有固定的算法和过程例1:={a,b},构造自动机识别由所有奇数个a和奇数个b组成的字符串。S奇a,奇bS奇a,偶bS偶a,奇bS偶a,偶bbbbaabaa关键:不需要记住所看到的整个字符串,只需记住至此所看到的a和b的个数是奇数还是偶数第二十一页,共三十七页,编辑于2023年,星期四设计有限自动机例2:设计有限自动机M,识别{0,1}上的语言

L={x000y|x,y{0|1}*}

分析:该语言的特点是每个串都包含连续3个0的子串。自动机的任务就是识别/检查000

的子串。q0q1q2q300011101第二十二页,共三十七页,编辑于2023年,星期四设计有限自动机例3:设计有限自动机M,识别{0,1,2}上的语言,每个字符串代表的数字能整除3。分析:(1)一个十进制数除以3,余数只能是0,1,2;(2)被3整除的十进制数的特点:十进制数的所有位数字的和能整除3。q0q1q2110210022第二十三页,共三十七页,编辑于2023年,星期四DFA与程序设计语言的单词结构例4:使用DFA定义程序设计语言的无符号实数

0.12,34.15接受

00.12,00.,.,33.拒绝S0S30,1,…,90,1,2,…,9S10S2.

1,2,…,9S4.0,1,…,9第二十四页,共三十七页,编辑于2023年,星期四DFA与程序设计语言的单词结构例5:使用DFA定义程序设计语言的标识符x,Xy,x123,xYz接受23x,12_x,_x拒绝q0q1letterletterdigit第二十五页,共三十七页,编辑于2023年,星期四DFA与程序设计语言的单词结构例6:使用DFA定义程序设计语言的保留字{if,else,while,for}ifseelilhewrof第二十六页,共三十七页,编辑于2023年,星期四DFA的实现目的给定一个DFAM定义了一个串集编写一个程序,检查给定的串是否被DFAM所识别或接受两种途径基于转换表基于转换图第二十七页,共三十七页,编辑于2023年,星期四基于转换表的DFA实现主要思想输入:一个字符串,以’#’结尾.输出:如果接受则输出true

否则输出false数据结构:转换表(二维数组T)两个变量State:记录当前状态;CurrentChar:记录串中当前正在被读的字符;第二十八页,共三十七页,编辑于2023年,星期四基于转换表的DFA实现算法主要思想1.State=InitState;

2.Read(CurrentChar);

3.whileT(State,CurrentChar)<>error&&CurrentChar<>‘#’dobeginState=T(State,CurrentChar);Read(CurrentChar);end;4.ifCurrentChar=‘#’&&StateFinalStates,

returntrue;otherwise,returnfalse.第二十九页,共三十七页,编辑于2023年,星期四S0(c)S2(a)S3(b)S0(a)S1(b)S1(d)S2(a)S3(c)S3(c)S3abcdS0+S1⊥S2S3S1⊥S1⊥S2S2S3⊥⊥⊥S3-⊥⊥S3⊥1)cab接受or拒绝?2)abdacc接受or拒绝?拒绝接受第三十页,共三十七页,编辑于2023年,星期四基于转换图的DFA实现每个状态对应一个带标号的case语句每条边对应一个goto

语句对于每个终止状态,增加一个分支,如果当前字符是字符串的结束符#,则接受;ibjkaLi:caseCurrentCharofa:gotoLjb:gotoLkother:Error()第三十一页,共三十七页,编辑于2023年,星期四基于转换图的DFA实现每个状态对应一个带标号的case语句每条边对应一个goto

语句对于每个终止状态,增加一个分支,如果当前字符是字符串的结束符#,则接受;bjkaiLi:caseCurrentCharofa:gotoLjb:gotoLk

#:returntrue;other:returnfalse;第三十二页,共三十七页,编辑于2023年,星期四S0aS1S2S3cddabcLS0:Read(CurrentChar);

switch(CurrentChar){casea:gotoLS1;

casec:gotoLS2:

cased:gotoLS3;other:returnfalse;}LS1:Read(CurrentChar);

switch(CurrentChar){caseb:gotoLS1;

温馨提示

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

评论

0/150

提交评论