您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > NFA转化为DFA的转换算法及实现
编译原理课程实践报告设计名称:NFA转化为DFA的转换算法及实现二级学院:数学与计算机科学学院专业:计算机科学与技术班级:计科本091班姓名:学号:指导老师:日期:2012年6月28日2摘要有穷自动机分为确定的有穷自动机(DFA)和不确定的有穷自动机(NFA)两类。两者各有特点、作用于不同的地方,因此需要进行转化。NFA转化为DFA的理论在词法构造乃至整个编译器构造过程中起着至关重要的作用,同时它们被广泛应用于计算机科学的各个领域,它们与计算机其它学科之间也有着很密切的关系。本文主要介绍基于编译器构造技术中的由NFA转化为DFA的算法设计和实现技术:主要包括NFA转化为与其等价的DFA所使用的子集构造算法以及把DFA化简的算法,实现词法分析,最后使用VisualC++语言加以实现。NFA转化为与其等价的DFA需分两步进行:1、构造NFA的状态的子集的算法;2、计算ε-closure。完成这些子模块的设计后,再通过某一中间模块的总控程序对其调用,最后再由主程序总调用,也就实现了NFA转化为其等价的DFA,接下来就是以分割法的思想为指导实现DFA的化简,最后并以实例加以说明。关键词:有穷自动机;NFA;DFA;转化;化简3目录1前言......................................................................................................................................................31.1选题的依据和必要性...................................................................................................................31.2课题意义.......................................................................................................................................32NFA转化为DFA的算法及实现...........................................................................................................42.1基本定义.......................................................................................................................................42.1.2DFA的概念.........................................................................................................................52.1.3NFA与DFA的矩阵表示...................................................................................................52.1.4NFA向DFA的转换的思路...............................................................................................63DFA的化简.......................................................................................................................................73.1化简的理论基础...........................................................................................................................73.2化简的基本思想..........................................................................................................................73.3化简的代码实现...........................................................................................................................84程序设计............................................................................................................................................144.1程序分析....................................................................................................................................144.1.1流程图................................................................................................................................144.1.2子集构造法........................................................................................................................164.2具体的转换过程........................................................................................................................181前言1.1选题的依据和必要性由于很多计算机系统都配有多个高级语言的编译程序,对有些高级语言甚至配置了几个不同性质的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。语言翻译程序把源语言书写的程序翻译成目标语言的等价程序。经过编译程序的设计可以大大提高学生的编程能力。编译程序的工作过程通常是词法分析、语法分析、语义分析、代码生成、代码优化[1]。由于现在有很多词法分析程序工具都是基于有穷自动机的,而词法分析又是语法分析的基础[2],所以我们有必要进行有穷自动机的确定化和最小化。1.2课题意义编译程序的这些过程的执行先后构成了编译程序的逻辑结构[3]。有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规集,即识别正规文4法所定义的语言和正规式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具[4]。NFA转化为DFA的理论在词法构造至整个编译器构造过程中起着至关重要的作用,同时它们被广泛应用于计算机科学的各个领域,它们与计算机其它学科也有着密切的联系。2NFA转化为DFA的算法及实现编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。进行NFA转换为DFA的词法分析和语法分析,首先要对目标对象有有所了解,这就需要对NFA、DFA进一步了解。2.1基本定义NFA,也称不确定的有穷自动机,是由一个五元式定义的数学模型,特点是它的不确定性,即在当前状态下,读入同一个字符,可能有多个下一状态。DFA,也称确定的有穷自动机,也是由一个五元式定义的数学模型,相对的特点是它的确定性,即在当前状态下,读入同一个字符,最多有一个后继状态。2.1.1NFA的概念NFA(nondeterministicfinite-stateautomata)即非确定有限自动机,一个非确定的有限自动机NFAM’是一个五元式:NFAM’=(S,Σ∪{ε},δ,S0,F)其中S—有限状态集Σ∪{ε}—输入符号加上ε,即自动机的每个结点所射出的弧可以是Σ中一个字符或是ε.S0—初态集F—终态集δ—转换函数S×Σ∪{ε}→2S(2S--S的幂集—S的子集构成的集合)状态转换图如图2.1.1:1S51010,1图2.1.1NFA状态转换图2.1.2DFA的概念DFA(deterministicfinite-stateautomata)即确定有限自动机,一个确定的有限自动机DFAM是一个五元式:M=(S,Σ,δ,S0,Z)其中:S—有限状态集Σ—输入字母表δ—映射函数(也称状态转换函数)S×Σ→Sδ(s,a)=S’,S,S’∈S,a∈ΣS0—初始状态S0∈SZ—终止状态集ZS图2.1.2DFA状态转换图2.1.3NFA与DFA的矩阵表示PZPPaababba,bZP6一个NFA或者DFA还可以用一个矩阵[5]表示,矩阵也可以说是状态转换表,它的优点是可以快速访问给定的状态在给定的输入字符时能转换到的状态集。矩阵,每个状态一行,每个输入符号和ε(如果有需要的)各占一列,表的第i行中与输入符号a对应的表项是一个状态集合,表示NFA或者DFA在状态i输入a时所能到达的状态集合(DFA的集合唯一),即δ(i,a)[6]。(7)如图2.1.1可用表2.3.1.表示:表2.3.1NFA状态转换表输入状态01S{P}{S,Z}P{}{Z}Z{P}{P}如图2.1.2可用表2.3.2表示:表2.3.2DFA状态转换表输入状态ab0121322133332.1.4NFA向DFA的转换的思路从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本思路是:DFA的每一个状态对应NFA的一组状态DFA使用它的状态记录在NFA读入一个输入符号后7可能达到的所有状态[4]。2.2NFA和DFA之间的联系在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,无疑会影响到FA的工作效率。而DFA则是确定的,将NFA转化为DFA将大大提高工作效率,因此将NFA转化为DFA是有其一定必要的。3DFA的化简得到新的DFA之后,并没有完成任务,因为通过NFA转化成DFA不一定是最简的,也就是说,有多余的状态可以被删除,而我们需要的是得到一个唯一的最简的DFA[12],也就是说,NFA转化为DFA之后,还需要化简,也就是最小化。3.1化简的理论基础DFA的化简是指:寻找一个状态数最少的DFAM,使得L(M)=L(M’)。化简的方法是消去DFAM中的多余状态(或无用状态),合并等价状态。DFA中的多余状态是指这样的状态:从开始状态出发,读入任何输入串都不能到达的那个状态;或者从这个状态没有通路到达终态。两个状态S和T等价是指:如果从状态S出发能读出某个字W而停于终态,从T出发也能读出同样的字W而停于终态;反之,从T出发能读出同样的字W而停于终态,从S出发也能读出某个字W而停于终态。3.2化简的基本思想化简DFA的基本思想是指导它的状
本文标题:NFA转化为DFA的转换算法及实现
链接地址:https://www.777doc.com/doc-1726665 .html