正规文法的First集合Follow集求解过程动态模拟-实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东交通大学
课程设计(论文)任务书
软件学院专业项目管理班级2005-4一、课程设计(论文)题目正规文法的First集合Follow集求解过程动态模拟
二、课程设计(论文)工作:自2008年6月23 日起至2008年 6 月27 日止。
三、课程设计(论文)的内容要求:
1、基本要求:
进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟悉使用开发工具VC 6.0 或其它软件编程工具。
为了使学生从课程设计中尽可能取得比较大的收获,对课程设计题目可根据自己的兴趣选题(须经老师审核),或从老师给定题目中选择完成(具体见编译原理课程设计题目要求)。
通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。成绩分优、良、中、及格和不及格五等。
2、具体要求
设计一个由正规文法生成Fisrt集Follow集的动态过程模拟
动态模拟算法的基本功能是:
●输入一个正规文法;
●输出由文法构造的First集的算法;
●输出First集;
●输出由文法构造的Follow集的算法;
●输出Follow集;
学生签名:
2008 年 6 月 27 日
课程设计(论文)评阅意见
项目
等级
优秀良好中等及格不及格
课程设计态度评价出勤情况评价
任务难度评价
工作量饱满评价设计中创新性评价论文书写规范化评价综合应用能力评价综合评定等级
目录
一、需求分析 (3)
二、总体设计 (4)
三、详细设计 (9)
四、课设小结 (12)
五、谢辞 (13)
六、参考文献 (14)
一、 需求分析
问题描述
设计一个由正规文法生成First 集并进行简化的算法动态模拟。(算法参见教材)
【基本要求】
动态模拟算法的基本功能是: (1) 输入一个文法G ;
(2) 输出由文法G 构造FIRST 集的算法; (3) 输出First 集。 【测试数据】
输入文法:
E->TE ’
E ’->+TE ’|ε
T->FT ’
T ’->*FT ’|εF->(E)|i 【实现提示】 用数据库存储多行文法,用LIST 控件显示算法,用GRID 类依据算法进行作图。并实现算法与生成过程的关联。
首先文法G 的获取可以通过两种形式来完成,一种是将其定义在文件里,然后从文件读取,另一种是用户自行输入,动态获取并运行。 程序用UI 界面风格显示。实现与实际软件的无差别性。
并且,为了方便做好的程序在任意地方运行。可以将其做成exe 安装程序,而不再依赖于编程环境。
程序能够对读取到的任意符合要求的文法进行识别(注:本程序能够处理文法的能力为2型文法),并能够计算出每一个非终结符的First 集,并且能够将计算过程动态的显示给用户查看。然后用表格的形式将得到的First 集显示出来。
二、总体设计
i )
(
*
+ F 的f i r s t 集
T 的f i r s t 集 E 的f i r s t 集 1
1
1
1 1
1
1 1 1
1.程序功能分解图
2.各功能模块程序流程图
1).UI 用户操作界面控制流图
2).识别非终结符集和终结符集
读取文法
开始
由文法处理单元计算出终结符,非终结符集 计算出所有非终结符的First 集
在界面上显示出每个非终结符的First,和计算过程
完成
First 集求解
从 文 件 中 读 取 文 法 进 行 分
分析文法的First 集合
开始
读取一条产生式
识别产生式的左部
字符V
将V添加到非终
结符集合
Y
还有未分析的
产生式
结束
开始
识别所有符号
(Vt,Vn)
去除非终结符号得
到终结符集合
结束
3).计算各个非终结符的First集
说明:在求First 集合时,主要用的思想是递归求解。
开始
读取一个非终结符V
遍历所有产生式,查找左部是V 的产生式
取出得到的一条产生式
产生式右部第一个符号V*是终结符?
将该终结符V*加入V 的First 集中
Y
V*是不是有推导规则V*->ε
Y
添加一个删除ε的标志为true
ε标志为真
删除ε,得到V 的First 集
还有为计算的非终结
符 完成
N
Y
三、详细设计
核心类:WenFaConvert和CompileSystem
WenFaConvert类:主要用于处理获得的文法,分析出文法中的
终结符,非终结符,计算出每给非终结符的First集。
两个核心算法函数如下:
First(String Vn, TextArea textArea, boolean bl)
其中textArea是用于动态显示算法求解过程的控件。
CompileSystem类:用于处理显示WenFaConvert类计算得到的结果。1.程序启动运行
2.从文件读取文法