合工大编译原理课程设计报告:《集合 LASTVT(P)构造算法的程序实现》
需积分: 5 187 浏览量
更新于2024-01-23
3
收藏 621KB DOC 举报
合工大编译原理课程设计报告
设计题目:《集合 LASTVT(P)构造算法的程序实现》
学生姓名:XXX 学号:XXX 专业班级:计算机科学与技术 20
指导教师:李宏芒 完成日期:2022.6.20
编译原理课程设计报告
一、设计目的及设计要求
题目要求设计一个程序,实现教材 P.91 中的 LASTVT(P) 集合的构造算法。对于任一给定的算符文法 G,程序需要输出所有非终结符 P 的 LASTVT(P)。为了增加任务量,本设计还扩展了求解 FIRSTVT(P) 的功能。
二、开发环境描述
开发语言:C
软件:CodeBlocks 20.03
三、设计内容、主要算法描述
在设计程序之前,我们先回顾一下课堂上学过的求解 LASTVT 的三个方法:
1. 若有 T→…a 或 a∈LASTVT(T);
2. T→…aR,则 a∈LASTVT(T);
3. 若 a∈LASTVT(R),且有产生式 T→…R,则 a∈LASTVT(T);
基于以上三条规则,我们设计了以下主要算法:
1. 首先,读入算符文法 G,并初始化一个集合表 LASTVT,用于储存所有非终结符 P 的 LASTVT(P)。
2. 遍历每一个产生式 P→αR(其中 R 可以为空),根据规则2和规则3将产生式右部的符号的 FIRSTVT 或 LASTVT 加入到 LASTVT(P) 中。如果右部为空,则将 FOLLOWVT(P) 加入到 LASTVT(P) 中。
3. 重复上述步骤,直到所有产生式都被遍历过并且没有新的非终结符的 LASTVT(P) 需要更新。
扩展内容:在构造 LASTVT(P) 的基础上,我们还实现了求解 FIRSTVT(P) 的功能。算法与构造 LASTVT(P) 的算法类似,只是规则的应用稍有不同。具体步骤如下:
1. 初始化一个集合表 FIRSTVT,用于储存所有非终结符 P 的 FIRSTVT(P)。
2. 遍历每一个产生式 P→αR(其中 R 可以为空),根据规则1和规则3将产生式右部的符号的 FIRSTVT 或 LASTVT 加入到 FIRSTVT(P) 中。如果右部为空,则将 FOLLOWVT(P) 加入到 FIRSTVT(P) 中。
3. 重复上述步骤,直到所有产生式都被遍历过并且没有新的非终结符的 FIRSTVT(P) 需要更新。
四、程序代码实现
在程序代码实现中,我们利用 C 语言的数据结构和算法来实现上述算法。具体的代码实现可以参考附件中提供的完整代码。
五、测试结果及分析
我们针对不同的算符文法进行了测试,并输出了每个非终结符的 LASTVT 和 FIRSTVT。通过对比测试结果和理论预期,可以验证我们的程序实现的正确性。
六、总结
通过本次课程设计,我们成功实现了《集合 LASTVT(P)构造算法的程序实现》这一题目要求,并进一步在程序中添加了求解 FIRSTVT(P) 的功能。通过这个设计,我们巩固了课堂学习的知识,加深了对算符文法和相关算法的理解。
在实践过程中,我们发现算符文法的集合 LASTVT(P) 和 FIRSTVT(P) 的构造算法是有一定规律可循的,可以通过合理的规则和迭代操作来实现。这不仅有助于加深对编译原理知识的理解,还可以为实际的编译器设计提供一定的参考和思路。
通过这次课程设计,我们不仅获得了编译原理知识的实际运用经验,也提升了编程能力和问题解决能力。希望在以后的学习和实践中,能够继续提升自己的编程技能,为实际的软件开发和编译器设计做出更多的贡献。
2011-06-09 上传
2021-09-29 上传
2019-07-23 上传
点击了解资源详情
点击了解资源详情
工大老张
- 粉丝: 27
- 资源: 10
最新资源
- MATLAB新功能:Multi-frame ViewRGB制作彩色图阴影
- XKCD Substitutions 3-crx插件:创新的网页文字替换工具
- Python实现8位等离子效果开源项目plasma.py解读
- 维护商店移动应用:基于PhoneGap的移动API应用
- Laravel-Admin的Redis Manager扩展使用教程
- Jekyll代理主题使用指南及文件结构解析
- cPanel中PHP多版本插件的安装与配置指南
- 深入探讨React和Typescript在Alias kopio游戏中的应用
- node.js OSC服务器实现:Gibber消息转换技术解析
- 体验最新升级版的mdbootstrap pro 6.1.0组件库
- 超市盘点过机系统实现与delphi应用
- Boogle: 探索 Python 编程的 Boggle 仿制品
- C++实现的Physics2D简易2D物理模拟
- 傅里叶级数在分数阶微分积分计算中的应用与实现
- Windows Phone与PhoneGap应用隔离存储文件访问方法
- iso8601-interval-recurrence:掌握ISO8601日期范围与重复间隔检查