资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
华东交通大学课程设计(论文)任务书软件学院 专 业 项目管理 班 级 2005 4一、课程设计(论文)题目 正规文法的First集合Follow集求解过程动态模拟二、 课程设计(论文)工作:自2008年_6月 23 日起 至 2008年 6 月 27 日止。三、课程设计(论文)的内容要求:1、基本要求:进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程, 独立完成有一定工作量的程 序设计任务, 同时强调好的程序设计风格,并综合使用程序设计语言、数 据结构和编译原理的知识,熟悉使用开发工具VC 6.0或其它软件编程工具为了使学生从课程设计中尽可能取得比较大的收获, 对课程设计题目可 根据自己的兴趣选题(须经老师审核),或从老师给定题目中选择完成(具 体见编译原理课程设计题目要求)。通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力, 独立分析解决问题的能力和创新精神。成绩分优、良、中、及格和不及格五2、具体要求设计一个由正规文法生成 Fisrt集Follow集的动态过程模拟动态模拟算法的基本功能是:输入一个正规文法;输出由文法构造的 First 集的算法;输出First集;输出由文法构造的Follow集的算法;输出Follow集;学生签名:2008年6月27日课程设计(论文)评阅意见项目等级优秀良好中等及格不及格课程设计态度评价出勤情况评价任务难度评价工作量饱满评价设计中创新性评价论文书写规范化评价综合应用能力评价综合评定等级评阅人职称副教授2008年6月27日#、需求分析二、总体设计三、详细设计四、课设小结五、谢辞六、参考文献目录4 9.121314#一、需求分析问题描述设计一个由正规文法生成 First集和Follow集并进行简化的算法动态模 拟。(算法参见教材)【基本要求】动态模拟算法的基本功能是:(1)输入一个文法G;(2)输出由文法G构造FIRST集的算法;(3)输出First集;(4)输出由文法G构造FOLLOW集的算法;(5)输出 FOLLOW 集。+*()iE的first集1111T的first集111F的first集11【测试数据】输入文法:E-TEE-+TE| T-FTT-*FT| & F-(E)|i【实现提示】用数据库存储多行文法,用LIST控件显示算法,用GRID类依据算法 进行作图。并实现算法与生成过程的关联。首先文法G的获取可以通过两种形式来完成,一种是将其定义在文件里, 然后从文件读取,另一种是用户自行输入,动态获取并运行。程序用UI界面风格显示。实现与实际软件的无差别性。并且,为了方便做好的程序在任意地方运行。可以将其做成exe安装程序,而不再依赖于编程环境。程序能够对读取到的任意符合要求的文法进行识别(注:本程序能够处理 文法的能力为2型文法),并能够计算出每一个非终结符的 First集Follow 集,并且能够将计算过程动态的显示给用户查看。然后用表格的形式将得到 的First集Follow集显示出来。二、总体设计1 .程序功能分解图#2).识别非终结符集和终结符集#3).计算各个非终结符的First集说明:在求First集合时,主要用的思想是递归求解。#4.计算各个非终结符的Follow集#三、详细设计核心类:WenFaConvert 和 CompileSystemWenFaCon vert类:主要用于处理获得的文法,分析出文法中的终结符,非终结符,计算出每给非终结符的First,Follow 集。两个核心算法函数如下:First(Stri ng Vn, TextArea textArea, boolea n bl)Follow(Stri ng Vn, boolea n bl, TextArea textArea) 其中textArea是用于动态显示算法求解过程的控件。CompileSystem 类:用于处理显示 WenFaConvert 类计算得到的结果1 .程序启动运行2 从文件读取文法3显示相应文法的FIRST集求解结果4.显示相应文法的Follow集求解结果注:求解过程在下面的文本框中输出,并且,显示结果都是根据读取到的文 法动态的生成。并且动态更新显示在界面上。#四、课设小结课程设计,一个创造性的工作。 我喜欢这种从无到有的过程。喜欢分析问题时,一个人静静思考的惬意。 虽然这次课设工作量并不是很大, 但是遇到的问题却并不少。 尤其是这种处 理算法的程序。 逻辑思路要非常缜密。 程序的分支比较多, 稍不注意就思维 混乱了。这次做算法的系统, 难度比起以前做的那些 XX 管理系统要复杂的 多。我总结下这个课程设计中最棘手的问题:1终结符 V 和 V ,多了个带 的终结符,但是它在处理的时候只能当一 个符号来识别,而用程序设计语言表示时它能表示成两个字符,如果处 理不当的话, V 就可能被认为是终结符号 V 和非终结符。这无疑给处 理过程添加了难度。2还有一些自认为理所当然能实现的,却实际并不可取的方法。如:本来 JAVA API 有个方法 String.split(String s); 用于以 s 为分割字符, 将指定的字符分成字符数组。但是 s 为括号时(无论左右括号,大小括 号,方框括号),都不能分割,并且抛异常。这是个很难理解的问题。迫 不得已,我不得不想其他的方法来实现分割算法。3再有就是对编译原理中 First Follow 算法设计时, 采取何种策略效率最高 的问题。最后我想到了用递归方式。下面总结此次课程设计的一些收获:1 对程序设计理解,算法的设计,有了进一不的提高。2 对程序调试的技巧收获不小。 因为该程序主要是算法研究, 所以程序 分支较复杂。断点调试是必不可缺并且很实用的工作。3对程序到软件过程的理解。这次也是我第一次将自己做的程序制作成一 个可自定义安装过程的小软件。从而将程序的运行与 IDE 脱离开来。 4毫无疑问,就是对编译原理的理解。能够很好地理解程序设计与编译原 理的关系。五、谢辞尤其是万老师一些前卫感谢万老师, 一个学期以来, 对我们的栽培与教育 的思想,让我很受启发。 同时感谢小组成员对我的支持。#六、参考文献1 张素琴.编译原理. 北京: 清华大学出版社 ,20052付京周JAVA程序设计语言.北京:人民邮电出版社,2007#
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号