- 1、本文档共37页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于转换图的DFA实现 每个状态对应一个带标号的case 语句 每条边对应一个 goto 语句 对于每个终止状态,增加一个分支,如果当前字符是字符串的结束符#,则接受; i b j k a Li: case CurrentChar of a :goto Lj b : goto Lk other : Error( ) 基于转换图的DFA实现 每个状态对应一个带标号的case 语句 每条边对应一个 goto 语句 对于每个终止状态,增加一个分支,如果当前字符是字符串的结束符#,则接受; b j k a i Li: case CurrentChar of a :goto Lj b : goto Lk # : return true; other : return false; S0 a S1 S2 S3 c d d a b c LS0: Read(CurrentChar); switch (CurrentChar) { case a : goto LS1; case c : goto LS2: case d : goto LS3; other : return false; } LS1: Read(CurrentChar); switch (CurrentChar) { case b : goto LS1; case d : goto LS2: other : return false; } S0 a S1 S2 S3 c d d a b c LS2: Read(CurrentChar); switch (CurrentChar) { case a : goto LS3; other : return false; } LS3: Read(CurrentChar); switch (CurrentChar) { case c : goto LS3: case # : return true; other : return false; } 两种实现方式的比较 转换表方式: 是通用的算法,不同的语言,只需改变输入的转换表,识别程序不需改变; 转换图方式: 不需要存储转换表(通常转换表是很大的),但当语言改变即自动机的结构改变时,整个识别程序都需要改变。 小结 确定有限自动机 确定有限自动机定义的语言 确定有限自动机的实现 作 业 构造一个DFA,使它能够识别出所有能被3整除的二进制数。 分别用转换表方式和转换图方式编程实现上述自动机,并用实例验证上述自动机是否正确。 * * * * * * 转换表的优点是能够很容易地确定和一个给定状态和一个输入符号相对应的转换。缺点是如果输入字母表很大,且大多数状态在大多数输入字符上没有转换的时候,转换表要占用大量空间。 * * * * * * * * * * * * * * * * * * 编译程序原理与实现 张晶 2013.02 第2章 outline 一、词法分析概述 1,词法分析程序的功能 2,词法分析相关的一些问题 二、正则表达式 三、有限自动机 1,确定有限自动机DFA 2,非确定有限自动机NFA,NFA到DFA的转换 3,DFA的化简 4,正则表达式到NFA的转换 四、词法分析程序构造 √ √ 三、有限自动机 正则表达式 - specification 有限自动机 – Implementation 什么是有限自动机? 有限自动机是描述有限状态系统的数学模型。 有限状态系统: 状态:是将事物区分开的一种标识. 具有离散状态的系统:如数字电路(0,1);电灯开关(on,off);十字路口的红绿灯;其状态数是有限的。 具有连续状态的系统:水库的水位、室内的温度等可以连续发生变化;可以有无穷个状态. 有限状态系统是离散状态系统。 在很多领域,如网络协议分析、形式验证、代码安全、排版系统等有重要应用。 有限自动机的例子-经典的过河问题 一个人带着一头狼,一头羊,以及一棵白菜处于河的左岸。人和他的伴随品都希望渡到河的右岸。有一条小
文档评论(0)