编译原理课程设计-Read.DOC

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

《编译原理》课程设计 报告 自动机的确定化 学院(系): 电气工程学院 班 级: T423-3 学生姓名: 滕荟芸 学号 7 指导教师: 周鹏 时间: 从07 年 9月3日 到 07 年9月6日 一、课程设计目的 (1) 理解有限自动机的作用; (2) 利用状态图和状态表表示有限自动机; (3) 以程序实现有限自动机的运行过程。 (4)通过课程设计进一步理解高级语言在计算机中的执行过程,加深对编译原理中重点算法和编译技术的理解,提高自己的编程能力,培养好的程序设计风格。 二、课程设计要求 根据选择的课程设计题目提交一份课程设计报告,内容包括设计要求、算法描述、程序结构、主要变量说明、程序清单、设计技巧、结果分析、心得体会等。同时能够熟练地操作,能够回答系统中的各种问题,能够排除一般故障,自行解决调试中遇到的基本问题。 三、课程设计题目 编制和调试一个程序,它将用户从键盘上输入的正规式转换为以状态图和矩阵形式表示的确定有穷自动机。 (1)将正规式转换为NFA。 (2)把NFA确定化为DFA。 四、总体设计 要把正规式转化为DFA,可以直接通过相关算法转换,但是这将会使得设计过程非常复杂,所以整个程序通过下列三个步骤实现: 由正规式构造NFA; 把NFA转化为与其等价的DFA; 把DFA最小化。 五、详细设计 (1)由正规式构造NFA:使用Thompson构造法 输入:字母表Σ上的正则表达式 输出:能够接受L(r)的NFA N 方法:首先将构成r的各个元素分解,对于每一个元素,按下述规则1和规则2生成NFA。 注意:如果r中记号a出现了多次,那么对于a的每次出现都需要生成一个单独的NFA。 之后依照正规表达式r的文法规则,将生成的NFA按照下述规则3组合在一起。 规则1 对于空记号ε,生成下面的NFA。 规则2 对于Σ的字母表中的元素a,生成下面的NFA。 规则3 令正规表达式s和t的NFA分别为N(s)和N(t)。 a) 对于s|t,按照以下的方式生成NFA N(s|t)。 b) 对于st,按照以下的方式生成NFA N(st)。 c) 对于s*,按照以下的方式生成NFA N(s*)。 d) 对于(s),使用s本身的NFA N(s)。将NFA转化为DFA 输入 NFA N 输出 能够接受与N相同语言的DFA D 方法D构造对应的状态迁移表Dtran。DFA的各个状态为NFA的状态集合,对于每一个输入符号,D模拟N中可能的状态迁移。 定义以下的操作ε-closure(s) 从NFA的状态s出发,仅通过ε迁移能够到达的NFA的状态集合 ε-closure(T) 从T中包含的某个NFA的状态s出发,仅通过ε迁移能够到达的NFA的状态集合 move(T, a) 从T中包含的某个NFA的状态s出发,通过输入符号a迁移能够到达的NFA的状态集合 令 Dstates 中仅包含ε-closure(s), 并设置状态为未标记; while Dstates中包含未标记的状态T do begin ???? 标记T; ???? for 各输入记号a do ???? begin ?????? U := ε-closure(move(T, a)); ?????? if U不在Dstates中 then ???????? 将 U 追加到 Dstates 中,设置状态为未标记; ?????? Dtrans[T, a] := U; ???? end end ε-closure(T)的计算方法如下:将T中的所有状态入栈; 设置ε-closure(T)的初始值为T; while 栈非空 do begin ???? 从栈顶取出元素t; ???? for 从t出发以ε为边能够到达的各个状态u do ?????? if u不在ε-closure(T)中 then ?????? begin ???????? 将u追加到ε-closure(T)中; ???????? 将u入栈; ?????? end end 2.正规式转为NFA 3.NFA转为DFA 七、数据结构 // 定义DFA的构造类 class DFA { public: DFA(); ~DFA(); void GetRegExp(); void InsertCatNode(); void RegExpToPost(); void GetEdgeNumber(); v

文档评论(0)

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

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

1亿VIP精品文档

相关文档