dfa最小化算法的探讨与改进.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
dfa最小化算法的探讨与改进

DFA最小化算法的探讨与改进 摘要:很多编译原理教材介绍的DFA最小化算法是“分割法”,但该算法存在一定的问题,本文结合实例分析该算法的漏洞所在,并提出了改进的算法。br  关键词br本文来自:计算机毕业网 :编译原理;DFA;分割法br      br  引言br  br  “编译原理”是计算机专业的一门综合性较强的专业课程,主要介绍如何将高级语言翻译为低级语言的编译程序的工作原理和实现技术。该课程建立在高级语言或汇编语言基础上,综合运用编译理论及数据结构、离散数学等前修课程的相关知识,具有很强的理论性和严密的逻辑性,可以使学生真正了解计算机的工作过程,对提高学生计算机软件素质具有很大作用。本文结合教学工作实际,针对词法分析中确定的有穷自动机(DFA)的最小化算法和具体的做法进行深入的探讨,并对现有算法进行了合理的改进。br  br  1DFA及DFA的化简br  br  编译程序一般包括词法分析、语法分析、语义分析、中间代码生成、目标代码生成、代码优化、表格管理和出错处理等成分。词法分析是编译程序要做的首要工作,它接收输入的源程序符号串,按照构词规则分割为一个个的单词符号并输出。br  有穷自动机是一种能进行运算和自我控制的装置,能准确识别单词符号。因此,可以通过构造有穷自动机来实现词法分析程序的自动构造。有穷自动机分为确定的有穷自动机DFA和不确定的有穷自动机NFA两种。br  定义1DFA 一个确定的有穷自动机M是一个五元组,M=( K,Σ, f , S , Z),其中:K是一个有穷集,其元素称为状态;Σ是一个有穷字母表,其元素称为输入符号;S∈K,称为初态;ZIgrave; K,是终态集;f是转换函数,是K×Σ→K上的映射,f(ki,a)=kj,(ki∈K,kj∈K)表示状态ki,输入符为a时,转换为状态kj。br  定义2无用状态从自动机的开始状态出发,任何输入串也不能到达的那个状态;或者从这个状态没有通路到达终态的状态。br  定义3等价状态如果说两个状态s 和t 是等价的, 应满足如下条件:(a) 一致性条件:s 和t 必须同时为终态或为非终态;(b) 蔓延性条件:对于所有输入符号,状态s 和t 必须转换到等价的状态里。br  一个DFAM可以通过消除无用状态和合并等价状态而转化为一个最小化的与之等价的DFAM’。该过程称为DFA的化简。br  br  2“分割法”化简DFAbr  br  对一个DFAM最少化的基本思想是:把M的状态集划分为一些不相交的子集,使得任何两个不同子集中的状态是(可区别)不等价的,而同一子集的任何两个状态是等价的。具体算法过程描述如下:br  (1) 把S划分为终态和非终态两个子集,形成初始划分P;br  (2) 假定P已含m个子集,记为P= { I1 , I2 , #8943;, Im},则对每一个Ii 和每一个a ∈Σ考察: I i a = f ( I i , a) ,如I i a 中的状态分别落于P中P 个不同的子集,则子集I i 将被P 个更小的状态子集I i1 , I i2 , #8943;, I i p 所细分。令细分后所得的状态集合为Pnew;br  (3) 重复步骤(2 )直到直至所含的子集数不再增加为止,Pnew =P;br  (4) 对P中的每个子集I i ,若该子集包含原有的初态,则此代表状态便为最小化后M 的初态;该子集包含原有的终态,则此状态便为最小化后的终态;br  (5) 删去状态集中的所有死状态,即得到化简后的M’。br  下面我们通过一个例子来看一下该算法中存在的问题。br  例1假定DFA M 如下图1所示。br  使用上述算法进行化简M:初始划分P0={0,{1,2}},此时P0含有两个子集I1和I2,I1不可再分,由于I2a=I2b=2∈I2,没有新集合增加,故可以得到化简后的M’,如图2所示。br  br  图1 DFA Mbr  br  图2 DFA M’br  br  化简后的M’与原来的M是否等价呢?显然,对于符号串ba,原来的DFAM不能识别,而化简后的M’能够识别,这说明二者并不等价。br  br  3DFA最小化算法的改进br  br  通过分析上述化简过程,我们可以找出算法问题所在。算法步骤2中涉及到集合运算,而忽略了空集对于算法的影响。根据定义3,要判断两个状态是否等价必须对于所有输入符号检查一遍,看它们分别转到等价的状态中,如上面例1中状态1不能接受a而状态2能接受a,显然二者不等价。而在算法中,把状态子集{1,2}在接受a后还是转到它自身,所以就出现错误了。br  某个状态下不能接受某个输入符号即为出错,故上述算法没有考虑到出错情况。因此我们可以对上述算法进行如下改

文档评论(0)

didala + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档