有穷自动机的化简与确定化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课题 名称 设计 目的 有穷自动机的化简和确定化 1. 调研并熟悉有穷自动机化简和确定化的基本功能、数据 流程与工作规程; 2. 通过实际编程加深对基本原理的理解,提高实践能力; 3. 学习开发资料的收集与整理,学会撰写课程设计报告。 1. 微型电子计算机(PC);
实验 环境
2. 安装Windows 2000以上操作系统,Visual C++6.0开发工 具。 1. 利用课余时间去图书馆或上网查阅课题相关资料,深入理 解课题含义及设计要求,注意材料收集与整理; 2. 在第14周末之前完成预设计,并请指导教师审查,通过后 方可进行下一步工作; 3. 本课题主要实现有穷自动机的化简和确定化等功能。 4. 结束后,及时提交设计报告(含纸质稿、电子稿),要求 格式规范、内容完整、结论正确,正文字数不少于3000 字。 工作进度计划 起止日期 2010.12.27~2010.12.27 工 作 内 容 在预设计的基础上,进一步查阅资料, 完善设计方案,形成书面材料。 设计总体方案,构建绘制流程框图,编 写代码,上机调试。 测试程序,优化代码,增强功能,撰写 设计报告。
1.2课题意义
编译程序的这些过程的执行先后就构成了编译程序的逻辑结构。有 穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规 集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自 动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工 具。正规表达式与自动机理论在词法构造乃至整个编译器构造过程中起 着至关重要的作用,同时它们被广泛应用于计算机科学的各个领域,它 们与计算机其它学科之间也有着很大的联系。
(1)按照设计的要求和内容先画出流程图,通过使用switch语句来完 成,对于头文件通过上网找了相应的资料正确地添加了程序中所需的头 文件: 用 .h 的头文件,就不用 using namespace std; 用 没有 .h 的头文件,就 必须 用 using namespace std。 conio.h是字符屏幕操作头文件。 (2)通过type(char re)函数实现:如果遇到操作符:|和*,则return OP;遇到操作数则return OP_D;其他则return -1。 (3)NFA构造算法
3.3详细流程图
选择输入(1~4) 在NFA.txt中输入NFA NFA DFA 最小化的DFA 在NFA.txt中输入NFA 最小化的DFA 开 始 2 3 退 出 选择输入(1~2) 完 成 测试生成串 1 2 1 图3.1 详细流程图 开始 求开始状态闭包 标记为False令它为C中唯一成员 C中存在尚未 被标记子集 标记T 对子集T中的每个输 入字母求U=Ia子集 将U加入C中 结束 Y N 是 否 图3.2.1 NFA转换成DFA原理图
2.4功能模块图
图2.1 功能模块图
3 系统设计
3.1实现原理
3.1.1 NFA转换成等价的DFA 将NFA转换成等价的DFA里,NFA到相应的DFA的构造的基本思想 是让DFA的每一个状态对应NFA的一组状态。也就是说让DFA使用它的 状态去记录在NFA读入一个输入符号后可能达到的所有状态,在读入输 入符号之后,DFA处在a1a2......an那样一个状态,该状态表示这个NFA的 状态的一个子集T,T是从NFA的开始状态沿着某个标记为a1a2......an可以 达到的那些状态构成的。 对状态集合I的几个有关运算: (1) 状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状 态集中的任何状态S经任意条ε弧而能够到达的状态的集合。 (2) 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J 是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。 3.1.2 NFA的确定化 一、子集法 1.先把DFA M’中的Q’和F’置为空集;
目
1课题综述
1.1课题来源 1.2课题意义 1.3预期的目标 1.4面对的问题 1.5需解决的关键技术
录Байду номын сангаас
2 系统分析
2.1涉及的知识基础 2.2总体方案 2.3解决问题的基本思路 2.4功能模块图
3 系统设计
3.1实现原理 3.2实现方法 3.3详细流程图
4代码编写
4.1 NFA到DFA的转化
5 程序调试
2.2总体方案
(1)如果读入正规式,则先将其转换为NFA,再将此NFA转换为DFA 并最小化,输入测试字符串,输出测试结果。 (2)如果读入NFA,则将其转化为DFA并最小化,输入测试字符串, 输出测试结果。 (3如果读入DFA,则直接将其最小化,输入测试字符串,输出测试结 果。
2.3解决问题的基本思路
5.1 调试步骤 5.2 发现的问题 5.3 解决的方法
6 运行与测试 总 结 致 谢 参考文献
1课题综述
1.1课题来源
由于很多计算机系统都配有多个高级语言的编译程序,对有些高级 语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序 就是一个语言翻译程序。语言翻译程序把源语言书写的程序翻译成目标 语言的等价程序。经过编译程序的设计可以大大提高学生的编程能力。 编译程序的工作过程通常是词法分析、语法分析、语义分析、代码 生成、代码优化。由于现在有很多词法分析程序工具都是基于有穷自动 机的,而词法分析又是语法分析的基础,所以我们有必要进行有穷自动 机的确定化和最小化。
机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并 论。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间 代码生成、存储管理、代码优化和目标代码生成。在编译系统中,词法 分析阶段是整个编译系统的基础。对于单词的识别,有穷自动机FA也叫 有限自动机,是一种十分有效的工具,机器识别的语言是正规语言。有 穷自动机由其映射f是否为单值而分为确定的有穷自动机DFA和非确定的 有穷自动机NFA,唯一区别是它们的转移函数不同。DFA对每一个可能的 输入只有一个状态的转移,NFA对每一个可能的输入可以有多个状态转 移,接受到输入时从这多个状态转移中非确定地选择一个。NFA 可以转 化为DFA,确定化后的自动机可以最小化。 关键词:NFA;DFA;确定化;最小化;正规语言;有穷自动机;
3.2实现方法
(1)有穷自动机的确定化:使用ProcessNFAToDFA()函数来实现; (2)确定的有穷自动机的最小化:使用函数MinimizeDFA()来实现, 在该函数中还调用了CombineEquality()和RemoveFutility()函数。 (3)对生成串的测试:使用TestString()函数实现。
2.M’的开始状态q0’=[q0],把[q0]置为未标记后加入到Q’中; 3.如果Q’中存在未标记的状态[q1,q2,…,qi],则对每个a∈∑定 义:δ’([q1,q2,…,qi],a)=[p1,p2,…,pi]当且仅当δ({q1,q2,…,qi},a)= {p1,p2,…,pi}。如果[q1,q2,…,qi]不在Q’中,则把它置为为标记后加入 到Q’中;如果p1,p2,…,pi中至少有一个是M的终态,则同时把[p1,p2, …,pi]加入到F’中;然后给Q’中所有的状态都标记为止; 4.重复执行(3),直到不能向Q’中加入新状态,并且Q’中所有的 状态都有标记为止; 5. 重新命名Q’中的状态,最后获得等价的DFA M’。 二、对含ε变迁的NFA的确定化: 1.置Q’, F’为空集; 2.令q0’=[ε_CLOSURE({q0})],并把[q0]置为未标记后加入到Q’中; 3.如果Q’中存在未标记状态[q1,q2,…,qi],则对每个a∈∑定义: d‘([q1,q2,…qi],a)=[p1,p2,…,pj]当且仅当d({q1,q2,…qi},a)={r1,r2,…,rk}, ε_CLOSURE({r1,r2,…,rk})= {p1,p2,…,pj}。如果[p1,p2,…,pj]不在Q’中, 则把它置为未标记后加入到Q’中;如果p1,p2,…,pj中至少有一个是M的 终态,则同时把[p1,p2,…,pj]加入到F’中;然后给Q’中的状态[q1,q2, …,qi]加上标记; 4.重复执行3,直到不能向Q’中加入新状态,并且Q’中所有的状态 都有标记为止; 5.重新命名Q’中的状态,然后获得等价的DFA M’
5. Z K,是一个终态集,终态也称可接受或结束状态。 2.1.3 DFA 的矩阵表示 一个DFA还可以用一个矩阵表示,该矩阵的行表示状态,列表示输 入字符,矩阵元素表示相应状态行和输入字符列下的新状态,即k行a列 为f(k,a)的值。用双箭头“=>”标明初态;否则第一行即是初态,相应终 态行在表的右端标以1,非终态标以0。 2.1.4 NFA向DFA的转换 从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在 DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本 思路是: DFA的每一个状态对应NFA的一组状态.DFA使用它的状态记 录在NFA读入一个输入符号后可能达到的所有状态.
2 系统分析
2.1涉及的知识基础
2.1.1 NFA的概念 一个不确定性有限状态自动机由以下部分所组成:M=(K, Σ , f, S , Z) 1. K是一个有穷集,它的每个元素称为一个状态; 2. Σ是一个有穷字母表,它的每个元素称为一个输入符号; 3. f 是一个从K*Σ→K到K的子集映像,即:K*Σ→2K,其中2K表示 K的幂集; 4. S K,是一个非空初态集; 5. Z K,是一个终态集; 一个含有m个状态和n个输入符号的NFA可表示成一张状态转换 图:这张图含有m个状态结点,每个结点可射出若干条箭弧与别的结点 相连接,每条弧用Σ*中的一个串做标记,整个图至少含有一个初态结点 以及若干个终态结点。 2.1.2 DFA的概念 一个确定性有限状态自动机由以下部分所组成:M=(K, Σ , f, S , Z) 1. K是一个有穷集,它的每个元素称为一个状态; 2. Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也 称Σ为输入符号表; 3. f是转换函数,是K*Σ→K上得映像,即,如f(ki ,a)=kj(ki∈K, kj∈K)就意味着,当前状态为k,输入字符为a时,将转换到下一状态 kj,我们把kj称作ki的一个后继状态; 4. S∈K,是唯一的一个状态;
任务 要求
序号 1
2
2010.12.28~2010.12.28
3
2010.12.29~2010.12.29
提交软件代码、设计报告,参加答辩, 2010.12.30~2010.12.30 根据教师反馈意见,修改、完善设计报 4 告。 指导教师(签章): 年 月 日
摘要:
编译原理课程是高校计算机类专业的重要基础和骨干课程,对计算
淮阴工学院
编译原理课程设计报告
选题名称: 定化 系(院): 院 专 术 班 1071 级: 业:
有穷自动机的化简与确
计算机工程学 计算机科学与技 软件
姓
名:
XXX
学 号: XXXXXXX 王文豪、陈剑洪
指导教师:
学年学期: 期
2010 ~ 2011
学年 第 1 学
2010
年
12
月 30
日
设计任务书
a、单字母,一个状态到另一状态,它们之间的状态跃迁弧上标上 该单字符。 b、空集,只有初始状态,无接受状态。 c、并运算,补充一初始状态,它到原来两个自动机的转移为空转 移,其余不变。 d、连接运算,在第一个自动机的接受状态与第二个自动机的初态 间引入空转移, 并改第一个自动机的接受状态为非接受态。 e、星号运算,补充一初始状态,在原自动机的接受状态和初始状 态间引入空移,新状态到原自动机的初始状态也是空转移。
1.3预期的目标
(1) 正规式到DFA的转化; (2) NFA到DFA的转化; (3) DFA的最小化; (4) 对输入字符的测试。
1.4面对的问题
(1) 调试程序时经常出现编译错误; (2) 主界面的设计以及各种头文件的添加问题; (3) NFA的构造算法。
1.5需解决的关键技术
程序以文件方式读取文法。读取TXT文件时会出现的错误是会跳 出“提示是否保存文件”的对话框。
实验 环境
2. 安装Windows 2000以上操作系统,Visual C++6.0开发工 具。 1. 利用课余时间去图书馆或上网查阅课题相关资料,深入理 解课题含义及设计要求,注意材料收集与整理; 2. 在第14周末之前完成预设计,并请指导教师审查,通过后 方可进行下一步工作; 3. 本课题主要实现有穷自动机的化简和确定化等功能。 4. 结束后,及时提交设计报告(含纸质稿、电子稿),要求 格式规范、内容完整、结论正确,正文字数不少于3000 字。 工作进度计划 起止日期 2010.12.27~2010.12.27 工 作 内 容 在预设计的基础上,进一步查阅资料, 完善设计方案,形成书面材料。 设计总体方案,构建绘制流程框图,编 写代码,上机调试。 测试程序,优化代码,增强功能,撰写 设计报告。
1.2课题意义
编译程序的这些过程的执行先后就构成了编译程序的逻辑结构。有 穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正规 集,即识别正规文法所定义的语言和正规式所表示的集合,引入有穷自 动机这个理论,正是为词法分析程序的自动构造寻找特殊的方法和工 具。正规表达式与自动机理论在词法构造乃至整个编译器构造过程中起 着至关重要的作用,同时它们被广泛应用于计算机科学的各个领域,它 们与计算机其它学科之间也有着很大的联系。
(1)按照设计的要求和内容先画出流程图,通过使用switch语句来完 成,对于头文件通过上网找了相应的资料正确地添加了程序中所需的头 文件: 用 .h 的头文件,就不用 using namespace std; 用 没有 .h 的头文件,就 必须 用 using namespace std。 conio.h是字符屏幕操作头文件。 (2)通过type(char re)函数实现:如果遇到操作符:|和*,则return OP;遇到操作数则return OP_D;其他则return -1。 (3)NFA构造算法
3.3详细流程图
选择输入(1~4) 在NFA.txt中输入NFA NFA DFA 最小化的DFA 在NFA.txt中输入NFA 最小化的DFA 开 始 2 3 退 出 选择输入(1~2) 完 成 测试生成串 1 2 1 图3.1 详细流程图 开始 求开始状态闭包 标记为False令它为C中唯一成员 C中存在尚未 被标记子集 标记T 对子集T中的每个输 入字母求U=Ia子集 将U加入C中 结束 Y N 是 否 图3.2.1 NFA转换成DFA原理图
2.4功能模块图
图2.1 功能模块图
3 系统设计
3.1实现原理
3.1.1 NFA转换成等价的DFA 将NFA转换成等价的DFA里,NFA到相应的DFA的构造的基本思想 是让DFA的每一个状态对应NFA的一组状态。也就是说让DFA使用它的 状态去记录在NFA读入一个输入符号后可能达到的所有状态,在读入输 入符号之后,DFA处在a1a2......an那样一个状态,该状态表示这个NFA的 状态的一个子集T,T是从NFA的开始状态沿着某个标记为a1a2......an可以 达到的那些状态构成的。 对状态集合I的几个有关运算: (1) 状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状 态集中的任何状态S经任意条ε弧而能够到达的状态的集合。 (2) 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J 是所有那些可从I中的某一状态经过一条a弧而到达的状态的全体。 3.1.2 NFA的确定化 一、子集法 1.先把DFA M’中的Q’和F’置为空集;
目
1课题综述
1.1课题来源 1.2课题意义 1.3预期的目标 1.4面对的问题 1.5需解决的关键技术
录Байду номын сангаас
2 系统分析
2.1涉及的知识基础 2.2总体方案 2.3解决问题的基本思路 2.4功能模块图
3 系统设计
3.1实现原理 3.2实现方法 3.3详细流程图
4代码编写
4.1 NFA到DFA的转化
5 程序调试
2.2总体方案
(1)如果读入正规式,则先将其转换为NFA,再将此NFA转换为DFA 并最小化,输入测试字符串,输出测试结果。 (2)如果读入NFA,则将其转化为DFA并最小化,输入测试字符串, 输出测试结果。 (3如果读入DFA,则直接将其最小化,输入测试字符串,输出测试结 果。
2.3解决问题的基本思路
5.1 调试步骤 5.2 发现的问题 5.3 解决的方法
6 运行与测试 总 结 致 谢 参考文献
1课题综述
1.1课题来源
由于很多计算机系统都配有多个高级语言的编译程序,对有些高级 语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序 就是一个语言翻译程序。语言翻译程序把源语言书写的程序翻译成目标 语言的等价程序。经过编译程序的设计可以大大提高学生的编程能力。 编译程序的工作过程通常是词法分析、语法分析、语义分析、代码 生成、代码优化。由于现在有很多词法分析程序工具都是基于有穷自动 机的,而词法分析又是语法分析的基础,所以我们有必要进行有穷自动 机的确定化和最小化。
机专业的学生的重要性与高等数学对理科学生的重要性几乎可以相提并 论。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间 代码生成、存储管理、代码优化和目标代码生成。在编译系统中,词法 分析阶段是整个编译系统的基础。对于单词的识别,有穷自动机FA也叫 有限自动机,是一种十分有效的工具,机器识别的语言是正规语言。有 穷自动机由其映射f是否为单值而分为确定的有穷自动机DFA和非确定的 有穷自动机NFA,唯一区别是它们的转移函数不同。DFA对每一个可能的 输入只有一个状态的转移,NFA对每一个可能的输入可以有多个状态转 移,接受到输入时从这多个状态转移中非确定地选择一个。NFA 可以转 化为DFA,确定化后的自动机可以最小化。 关键词:NFA;DFA;确定化;最小化;正规语言;有穷自动机;
3.2实现方法
(1)有穷自动机的确定化:使用ProcessNFAToDFA()函数来实现; (2)确定的有穷自动机的最小化:使用函数MinimizeDFA()来实现, 在该函数中还调用了CombineEquality()和RemoveFutility()函数。 (3)对生成串的测试:使用TestString()函数实现。
2.M’的开始状态q0’=[q0],把[q0]置为未标记后加入到Q’中; 3.如果Q’中存在未标记的状态[q1,q2,…,qi],则对每个a∈∑定 义:δ’([q1,q2,…,qi],a)=[p1,p2,…,pi]当且仅当δ({q1,q2,…,qi},a)= {p1,p2,…,pi}。如果[q1,q2,…,qi]不在Q’中,则把它置为为标记后加入 到Q’中;如果p1,p2,…,pi中至少有一个是M的终态,则同时把[p1,p2, …,pi]加入到F’中;然后给Q’中所有的状态都标记为止; 4.重复执行(3),直到不能向Q’中加入新状态,并且Q’中所有的 状态都有标记为止; 5. 重新命名Q’中的状态,最后获得等价的DFA M’。 二、对含ε变迁的NFA的确定化: 1.置Q’, F’为空集; 2.令q0’=[ε_CLOSURE({q0})],并把[q0]置为未标记后加入到Q’中; 3.如果Q’中存在未标记状态[q1,q2,…,qi],则对每个a∈∑定义: d‘([q1,q2,…qi],a)=[p1,p2,…,pj]当且仅当d({q1,q2,…qi},a)={r1,r2,…,rk}, ε_CLOSURE({r1,r2,…,rk})= {p1,p2,…,pj}。如果[p1,p2,…,pj]不在Q’中, 则把它置为未标记后加入到Q’中;如果p1,p2,…,pj中至少有一个是M的 终态,则同时把[p1,p2,…,pj]加入到F’中;然后给Q’中的状态[q1,q2, …,qi]加上标记; 4.重复执行3,直到不能向Q’中加入新状态,并且Q’中所有的状态 都有标记为止; 5.重新命名Q’中的状态,然后获得等价的DFA M’
5. Z K,是一个终态集,终态也称可接受或结束状态。 2.1.3 DFA 的矩阵表示 一个DFA还可以用一个矩阵表示,该矩阵的行表示状态,列表示输 入字符,矩阵元素表示相应状态行和输入字符列下的新状态,即k行a列 为f(k,a)的值。用双箭头“=>”标明初态;否则第一行即是初态,相应终 态行在表的右端标以1,非终态标以0。 2.1.4 NFA向DFA的转换 从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在 DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本 思路是: DFA的每一个状态对应NFA的一组状态.DFA使用它的状态记 录在NFA读入一个输入符号后可能达到的所有状态.
2 系统分析
2.1涉及的知识基础
2.1.1 NFA的概念 一个不确定性有限状态自动机由以下部分所组成:M=(K, Σ , f, S , Z) 1. K是一个有穷集,它的每个元素称为一个状态; 2. Σ是一个有穷字母表,它的每个元素称为一个输入符号; 3. f 是一个从K*Σ→K到K的子集映像,即:K*Σ→2K,其中2K表示 K的幂集; 4. S K,是一个非空初态集; 5. Z K,是一个终态集; 一个含有m个状态和n个输入符号的NFA可表示成一张状态转换 图:这张图含有m个状态结点,每个结点可射出若干条箭弧与别的结点 相连接,每条弧用Σ*中的一个串做标记,整个图至少含有一个初态结点 以及若干个终态结点。 2.1.2 DFA的概念 一个确定性有限状态自动机由以下部分所组成:M=(K, Σ , f, S , Z) 1. K是一个有穷集,它的每个元素称为一个状态; 2. Σ是一个有穷字母表,它的每个元素称为一个输入符号,所以也 称Σ为输入符号表; 3. f是转换函数,是K*Σ→K上得映像,即,如f(ki ,a)=kj(ki∈K, kj∈K)就意味着,当前状态为k,输入字符为a时,将转换到下一状态 kj,我们把kj称作ki的一个后继状态; 4. S∈K,是唯一的一个状态;
任务 要求
序号 1
2
2010.12.28~2010.12.28
3
2010.12.29~2010.12.29
提交软件代码、设计报告,参加答辩, 2010.12.30~2010.12.30 根据教师反馈意见,修改、完善设计报 4 告。 指导教师(签章): 年 月 日
摘要:
编译原理课程是高校计算机类专业的重要基础和骨干课程,对计算
淮阴工学院
编译原理课程设计报告
选题名称: 定化 系(院): 院 专 术 班 1071 级: 业:
有穷自动机的化简与确
计算机工程学 计算机科学与技 软件
姓
名:
XXX
学 号: XXXXXXX 王文豪、陈剑洪
指导教师:
学年学期: 期
2010 ~ 2011
学年 第 1 学
2010
年
12
月 30
日
设计任务书
a、单字母,一个状态到另一状态,它们之间的状态跃迁弧上标上 该单字符。 b、空集,只有初始状态,无接受状态。 c、并运算,补充一初始状态,它到原来两个自动机的转移为空转 移,其余不变。 d、连接运算,在第一个自动机的接受状态与第二个自动机的初态 间引入空转移, 并改第一个自动机的接受状态为非接受态。 e、星号运算,补充一初始状态,在原自动机的接受状态和初始状 态间引入空移,新状态到原自动机的初始状态也是空转移。
1.3预期的目标
(1) 正规式到DFA的转化; (2) NFA到DFA的转化; (3) DFA的最小化; (4) 对输入字符的测试。
1.4面对的问题
(1) 调试程序时经常出现编译错误; (2) 主界面的设计以及各种头文件的添加问题; (3) NFA的构造算法。
1.5需解决的关键技术
程序以文件方式读取文法。读取TXT文件时会出现的错误是会跳 出“提示是否保存文件”的对话框。