- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计科1304班_廖成_0902130408_编译原理实验报告
CENTRAL SOUTH UNIVERSITY
编译原理课程
实验报告
姓 名: 廖 成
学 号: 0902130408
专业班级: 计算机科学与技术1304班
指导老师: 张修如
实验一 计算FIRSTVT集
一、实验目的
进一步培养学生编译器设计的思想,加深对编译原理和应用程序的理解,针对编译过程的重点和难点内容进行编程,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格,并综合使用程序设计语言、数据结构和编译原理的知识,熟悉使用开发工具VC 。
二、实验内容
设计一个由正规文法生成FIRSTVT集的算法动态模拟,实现以下功能:
1.输入一个文法G;
2.输出由文法G构造FIRSTVT集的算法;
3.输出FIRSTVT集。
三、实验要求
1.思想的正确性,采用合适的数据存储结构等;
2.程序实现的正确性,程序整体结构合理、编程风格规范等;
3.程序功能的完善程度,包括功能的基本实现、基本完善、完全实现;
4.工作认真、独立完成实验。
四、实验步骤
问题理解和分析:充分地分析和理解问题本身,弄清要求做什么;
确定解决问题的方法:主要是找到解决问题的主要思路,该怎么做;
3.详细设计和编码:确定算法的主要流程,再进行编程;
4.程序调试和运行:掌握程序调试和排错的基本方法,增加编程的感觉和解决问题的成就感;
五、程序设计
5.1基本算法:
构造集合FIRSTVT(P)的算法,按FIRSTVT(P)的定义,可以用如下两条归则来构造:
(1)若有产生式P→a…或→Qa…,则a∈FIRSTVT(P)
(2)若a∈FIRSTV且有产生式P→Q…,则a∈FIRSTVT(P)构造算法:
建立一个二维布尔数组F[P,a],使得F[P,a]为真的条件适当且仅当a∈FIRSTVT(P);再用一个栈STACK,把所有初值为真的数组元素F[P,a]的符号对(P,a)全都放到栈中;算法如下:
(1)将布尔矩阵各元素置假;栈置空;
(2)按照归则(1)查看产生式,对于P→a…或P→Qa..,置相应F[P,a]为真,符号对(P,a)入栈;
(3)按规则(2),对栈施加如下操作:弹出栈定符号对记作(Q,a),查看所有产生式是否有形如P→Q…产生式,若有,且a∈FIRSTVT(P),则将F[P,a]置为真,并把(P,a)入栈;
(4)重复(3),直到栈空为止。
5.2定义数据结构:
在程序中,用两个字符数组vn[M]和vt[N]分别用来存储所有的非终结字符集与终结字符集。为了记录非终结符的FIRSTVT集,为此建立一个布尔数组F[M][N],记录非终结符的FIRSTVT集。
比如,F[i][j]=true表示vt[j]属于FIRSTVT(vn[i]),值为false表示相应的终结符不属于非终结符的FIRSTVT集。
为了简便起见,程序中又构造了一个两维布尔数组first[M][M N]来表示推导关系。数组第一维的M个字符代表非终结符;数组第二维的前M个字符代表非终结符,后N个字符代表终结符。
以first数组为例,fist[i][M j]代表非终结符vn[i]=P与非终结符vt[j]=a有推导关系P →a…;fist[i][j]代表非终结符vn[i]=P与非终结符vt[j]=Q有推导关系或P→Qa..。
相关的数据结构定义如下:
char vn[M],vt[N]; //非终结字符与终结字符数组
bool first[M][M N],last[M][M N]; //以布尔数组形式定义推导关系
char vn[M],vt[N]; //非终结字符与终结字符数组
int stp; //堆栈栈顶指针
符号栈的数据结构:
struct relation int vn; int vt; //结构体用来说明终结符vt与非终结符vn之间的关系,若关系存在说明vt属于FIRSTVT(vn)
六、关键代码
#include
#include
#define N 10
#define M 10
using namespace std; //用于存储FIRSTVT集
char FIRSTVT0[N],FIRSTVT1[N],FIRSTVT2[N],FIRSTVT3[N],FIRSTVT4[N]; //接受输入
char INPUT[N][M];//存储FIRSTVT集
void setFIRSTVT(char X,int T)
void FIR
您可能关注的文档
最近下载
- 2025年度机关食堂专业餐饮服务外包合同范本.docx VIP
- 游艇产业和游艇经济的初步分析.pdf VIP
- 9-80-81-71-72-AP系列_单机CVR232-2_系统使用手册V1.0.0中文标配(15-11-18)(1).pdf VIP
- 数字逻辑课后习题答案 .pdf VIP
- 并网前设备电气试验、继电保护整定、通讯联调.pdf VIP
- profibus通讯原理详解新.ppt VIP
- 2026届高三高考总复习生物课件:减数分裂与有丝分裂的比较.ppt VIP
- 施耐德ATS48型软启动器.pdf
- 一种丁基胶乳、丁基胶乳制品及其制备方法.pdf VIP
- Python网络爬虫基础教程-PPT课件(全).pptx
文档评论(0)