第二章 词法分析2 确定有限自动机DFA 确定有限自动机(DFA)的定义 DFA的两种表示方法 DFA接受的集合 DFA的确定性

Slides:



Advertisements
Similar presentations
1 、谁能说说什么是因数? 在整数范围内( 0 除外),如果甲数 能被乙数整除,我们就说甲数是乙数的 倍数,乙数是甲数的因数。 如: 12÷4=3 4 就是 12 的因数 2 、回顾一下,我们认识的自然数可以分 成几类? 3 、其实自然数还有一种新的分类方法, 你知道吗?这就是我们今天这节课的学.
Advertisements

因数与倍数 2 、 5 的倍数的特征
因数与倍数 2 、 5 的倍数的特征 绿色圃中小学教育网 扶余市蔡家沟镇中心小学 雷可心.
一、 一阶线性微分方程及其解法 二、 一阶线性微分方程的简单应用 三、 小结及作业 §6.2 一阶线性微分方程.
2 、 5 的倍数的特征 玉田百姓. 1 、在 2 、 3 、 5 、 8 、 10 、 12 、 25 、 40 这几个数中, 40 的因数有几个? 5 的倍数有几个? 复习: 2 、在 6 、 10 、 12 、 15 、 18 、 20 这几个数中,哪些数 是 2 的倍数?哪些数是 5 的倍数?
2 、 5 的倍数特征 集合 2 的倍数(要求) 在百数表上依次将 2 的倍数找出 并用红色的彩笔涂上颜色。
新材料作文.
忠孝國小自立午餐老師的叮嚀 教師指導手冊.
《高等数学》(理学) 常数项级数的概念 袁安锋
第一章 行列式 第五节 Cramer定理 设含有n 个未知量的n个方程构成的线性方程组为 (Ⅰ) 由未知数的系数组成的n阶行列式
DFA的化简 1. DFA的化简 所谓一个DFA M 的化简是指寻找一个状态数比 M 少的 DFA M' ,使得 L(M)=L(M')
第三章 词法分析 编译程序首先是在单词级别上来分析和翻译源程序的。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。因此,词法分析是编译的基础。执行词法分析的程序称为词法分析器。 3。1 对词法分析器的要求 词法分析器功能和输出形式.
第三章 词法分析 赵建华 南京大学计算机系 2009年2月.
第三章 词法分析与有穷自动机 有穷自动机是构造词法分析程序的理 论基础。本章主要介绍词法分析程序的 设计原理和构造方法,重点介绍有穷自
§5.3 定积分的换元法 和分部积分法 一、 定积分的换元法 二、 定积分的分部积分法 三、 小结、作业.
初中数学八年级下册 (苏科版) 10.4 探索三角形 相似的条件(2).
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
成才之路 · 语文 人教版 • 中国古代诗歌散文欣赏 路漫漫其修远兮 吾将上下而求索.
UI 软件 设计 网页基本元素设计(二).
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第二章 词法分析 词法记号及属性 词法记号的描述与识别 有限自动机 DFA构建 DFA化简 词法模式的识别过程 子集构造法.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
字符串(1) 字母表: 任意非空有穷集合 (字符)串: 连接: ={0,1} ={a,b,c,…,x,y,z,空格}
第二章 Java语言基础.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
2.3 正则表达式 主要内容: 1.正则表达式和正则集; 2.正则表达式和有限自动机的相互转化。.
第三章 词法分析 本章将讨论词法分析程序的设计原则,单词的描述技术,识别机制及词法分析程序的自动构造原理。 3.1 对于词法分析程序的要求
第一章 函数与极限.
本节内容 字符编码 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
自动机与形式语言 报告人:姜勇刚 郑奘巍.
第二章 词法分析3 非确定有限自动机NFA 非确定有限自动机(NFA)的定义 NFA的确定化:NFA到DFA的转换(子集法)
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
§6.7 子空间的直和 一、直和的定义 二、直和的判定 三、多个子空间的直和.
3.16 枚举算法及其程序实现 ——数组的作用.
词法分析
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
2、5的倍数的特征 马郎小学 陈伟.
复习:程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符
第二章 Java基本语法 讲师:复凡.
第二节 函数的极限 一、函数极限的定义 二、函数极限的性质 三、小结 思考题.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第二章 形式语言与自动机 Part II自动机.
主讲教师 欧阳丹彤 吉林大学计算机科学与技术学院
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
编译原理 Compiler Principles 第三章 词法分析 湖南大学信息科学与工程学院 软件工程系 杨金民 2019/02.
数据表示 第 2 讲.
第三章:词法分析 戴新宇 南京大学 计算机科学与技术系.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
编译原理 第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法
第二次课后作业答案 函数式编程和逻辑式编程
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
9.3多项式乘多项式.
Presentation transcript:

第二章 词法分析2 确定有限自动机DFA 确定有限自动机(DFA)的定义 DFA的两种表示方法 DFA接受的集合 DFA的确定性 自动机的实现

2.4 有限自动机FA(Finite Automata ) 有限自动机FA作为一种识别装置,它能准确识别正规集。引入FA这个理论,正是为词法分析程序的自动构造寻找一种特殊的方法和工具。 确定有限自动机(DFA: Deterministic Finite Automata ) 非确定有限自动机(NFA: Nondeterministic Finite Automata )

(一) 确定有限自动机DFA的定义 确定有限自动机M为一个五元组: M = ( S , , f , s0 , Z ),其中: 是一个有穷字母表,它的每个元素称为一个输入字符; f是状态转换函数:S S,且单值函数.f(Si,a)=Sk 表示当前状态为Si,遇输入字符a 时,自动机将唯一地转换到状态 Sk,称Sk为 Si的一个后继状态; s0S,是唯一的一个初始状态(开始状态); ZS,是终止状态集,其中的每个元素称为终止状态(可接受状态、结束状态),Z可空.

一个DFA的例子 DFA M=({S0, S1, S2, S3} , {a,b}, f , S0 , {S3}), 其中f 定义为: f (S0, a )=S1 f (S2, a )=S1 f (S0, b )=S2 f (S2, b )= S3 f (S1, a )= S3 f (S3, a )= S3 f (S1, b )= S2 f (S3, b )= S3

(二) DFA的两种表示方式 (1) 状态转换图 :用有向图表示自动机,比较直观,易于理解; (2) 状态转换矩阵:用二维数组描述自动机,易于程序的自动实现;

(1) 状态转换图 :用有向图表示自动机 1. 结点:表示状态: 1) 非终止状态: 2)终止状态: 3)开始状态: 1) 非终止状态: 2)终止状态: 3)开始状态: 2. 边:表示状态转换函数: Si Sk S0 a f(Si,a)=Sj Si Sj

a a a ,b b a b b 状态转换图 DFA M=( {S0, S1, S2, S3}, {a,b}, f, S0, {S3}), f (S0, a )=S1 f (S2, a )=S1 f (S0, b )=S2 f (S2, b )= S3 f (S1, a )= S3 f (S3, a )= S3 f (S1, b )= S2 f (S3, b )= S3 S1 a a a ,b b a S3 S0 b b S2 状态转换图

 a b (2) 状态转换矩阵:用二维数组描述DFA 行:表示所有的状态; 初始状态:一般约定,第一行表示开始状态, 或在右上角标注“+”; 终止状态:右上角标有“*”或“-” ; 列:表示上的所有输入字符; 矩阵元素:表示状态转换函数.  状态 a b S0+ S1 S2 S3 S3*

DFA M=( {S0, S1, S2, S3}, {a,b}, f, S0, {S3}), 其中 f 定义为: f (S0, a )=S1 f (S2, a )=S1 f (S0, b )=S2 f (S2, b )= S3 f (S1, a )= S3 f (S3, a )= S3 f (S1, b )= S2 f (S3, b )= S3 输入字符 状态 a b S0+ S1 S2 S3 S3*

(三) 陷阱状态 1 2 3 4 设有DFA M=({0,1,2,3,4},{a,b},f,0,{3}) 其中 f 定义为: f(0,a) = 1 f(0,b) = 4 f(1,a) = 4 f(1,b) = 2 f(2,a) = 3 f(2,b) = 4 f(3,a) = 3 f(3,b) = 3 f(4,a) = 4 f(4,b) = 4 1 2 3 a b a, b a, b a b 4

Σ S a b 0+ 1 2 3 3* 4 4 4 4 4 4 1 2 3 a b a, b

(四) DFA的确定性 初始状态唯一. 状态转换函数f: f是一个单值函数,也就是说,对任何状态sS,和输入符号a,f(s,a)值唯一,即唯一地确定了下一个后继状态。 没有输入为空边,即不接受没有任何输入就进行状态转换的情况。

(五)DFA接受的字符串 对于中的任何字符串a1a2...an,若在DFA M中存在一条从初始结点到某一终止结点的路径,且这条路上所有弧上的标记符连接成的字符串等于a1a2...an,则称该字符串可为DFA M所接受(识别)。 S0 S1 S2 S3 a b S4 aba(ab)* √ aba √ abaa ×  √ abaab √

DFA接受的语言 定义: DFA M所能接受的字符串的全体,称为DFA M 接受(识别)的语言,记为L(M)。

例1:L( M2 )={a, ab, abb, abbb,…} 1 a b DFA M2

例2:L( M3 )={, b, bb, bbb,…} 1 b DFA M3

DFA的应用 在语言学中:自动机作为语言识别器。 在计算机科学中:自动机用作计算机和计算过程的动态数学模型,用来研究计算机的体系结构、逻辑操作、程序设计等。 在自动控制领域内:自动机可作为控制信号序列进行逻辑处理的装置。

例3:试用自动机描绘复印机的工作过程: 复印机启动后进入等候状态。接到复印命令进入复印状态执行复印任务,完成任务后回到等候状态。接到关机命令进入结束状态; 复印机执行复印任务时发现没纸,则进入缺纸状态,发出警告等待装纸,装纸结束后回到等候状态; 复印时发现卡纸,则进入卡纸状态,发出警告等待维修,故障排除后回到等候状态。

复印机工作过程状态转换图 复印 命令 启动 命令 开始 等待 复印 完成 关机 命令 装纸 故障 排除 卡纸 没纸 结束 卡纸 缺纸

例4:设计DFA以识别所有能被3整除 的二进制数的集合. S0: 00 01 S0:余0状态(能被3整除状态) S1:余1状态 S2:余2状态 S1: 10 11 S2: 100 101 1 1 1 S1 S0 S2

设计DFA以识别所有能被3整除的无符号十进制数。 例5 设计DFA以识别所有能被3整除的无符号十进制数。 S0:能被3整除状态 S1:余1状态 S2:余2状态 1 2 0,3,6,9 1,4,7 2,5,8 21

(六) DFA描述单词 标识符的描述 L=a|b|…|z|A|B|…|Z|_ 则有: 1 L表示所有字母与下划线: D表示数字: D=0|1|2|…|9 则有: L|D 上次课我们说了,单词可以分成四类,分别是保留字、标示符、常数、特殊符号(运算符 界限符 格式符),或者说3类把保留字归入特殊符号,下面就看看用自动机怎么描述他们并组成一个大的自动机 L 1

. . . 2 1 5 6 3 4 常数的描述 D=0|1|2|…|9 , D1=1|2|…|9 无符号整数: D1D*|0 举几个例子试试~ 我们看到,画了这些自动机以后,如果输入的字符可以从开始状态出发到达终止状态,并停留在终止状态上,那么这个串就是该自动机可以接受的串,至于说如何来区分他是哪类的单词 这个实际上是很好办的,因为停在不同的终止状态上反映了我们识别的是不同类型的单词。比如停留在2上说明是整数,1上说明是整数,6说明是实数。所以看一个串是否可以接受,看停留状态的类型,看一个它是哪类单词,就看停在哪个终止状态上。 D1 1 . 5 D 6 4 . +|- D1 3

特殊符号 1 { 2 + 3 > 4 = 保留字 特殊符号的单词可能更好画,虽然相对麻烦一点,因为这类的单词是有限的,我们就可以用枚举的方式把这些信息都枚举出来 把所有的都枚举了就行。 注意个问题,一个是到达终止状态后,还要继续读 包括标识符 常数 双目运算符 同时我们的词法分析程序并不是把这些自动机分开画的,而是拼在一起,把他们的初始状态合并成一个。 这个时候会有细心的同学发现+ -号的问题,如果合成一个就区分不出4+5的+5了,所以遇到这种问题的时候要往前看一个符号,来决定当前符号的类型 这是用自动机描述单词,假如开始的时候没有把问题分析清楚,直接做词法分析程序,会很麻烦也很难保证准确性,描述了以后就好办了,剩下就是看怎么实现自动机了 3 f 1 o 2 r 4 i 5

(七) DFA程序实现 编写程序考察输入任意以‘#’结尾的字符串是否可被DFA M识别 DFA实现方法有两种 直接转向法:基于状态转化图 基于状态转换矩阵

方法1:直接转向法 例: 每个状态对应一个带标号的switch语句,转向边对应goto语句 Li: switch ( CurChar ) { case ‘ a’ : goto Lj; case ‘b’ : goto Lk; case ‘#’ : Accept; default : Error( ); } i j k a b 特点: 程序的结构一样,但程序随着状态图的不同而改变

方法2:基于状态转换矩阵 state=S0; return(true); 特点:程序内容不变,只需改变 curChar=readNextChar(); while(curChar!=‘#’ && T[state,curchar]error) { //则当前状态转为新的状态 state = T[state,curChar]; curChar=readNextChar() ; } if(curChar==‘#’ && state FinalState) return(true); else return(false); 特点:程序内容不变,只需改变 状态表内容,但状态多时占用存储空间大.

练习: 设字母表={x,y,z}, 所有上定义的串。 不包含y的所有符号串集合。 包含偶数个x的所有符号串。