- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理》实验报告
题目: 语 法 分 析
学生姓名:
班 级:
学 号:
指导教师:
成 绩:
西安邮电大学计算机学院
2015年 5 月28 日
一:实验目的
掌握一种语法分析规则,并且能够动态的生成算符优先表或预测分析表。
二:实验要求
(一)对于如下的文法,试编写调试一个语法分析程序:
E → E+T | T
T → T*F | F
F → P^F| P
P→ ( E ) | i
要求和提示:
(1) 可选择一种你感兴趣的语法分析方法(LL(1) 、算符优先、递归下降、SLR(1)等)作为编制语法分析程序的依据。
(2) 对于所选定的分析方法,如有需要,应选择一种合适的数据结构,以构造所给文法的机内表示。
(3) 能进行分析过程模拟。如输入一个句子,能输出与句子对应的语法树,能对语法树生成过程进行模拟;能够输出分析过程每一步符号栈的变化情况。
(二)First集和Follow集生成算法模拟
【问题描述】
设计一个由给定文法生成First集和Follow集并进行简化的算法动态模拟。(算法参见教材)
【基本要求】
动态模拟算法的基本功能是:
(1) 输入一个文法G;
(2) 输出由文法G构造FIRST集的算法;
(3) 输出First集;
(4) 输出由文法G构造FOLLOW集的算法;
(5) 输出FOLLOW集。
【测试数据】
输入文法:
E-TE’
E’-+TE’|ε
T-FT’
T’-*FT’|ε
F-(E)|i
(三)FirstVT集和LastVT集生成算法模拟
【问题描述】
设计一个由给定文法生成FirstVT集和LastVT集的算法动态模拟。(算法参见教材P90——92FirstVT和LastVT的构造算法)
【基本要求】
动态模拟算法的基本功能是:
(1) 输入一个文法G;
(2) 输出由文法G构造FIRSTVT集的算法;
(3) 输出FirstVT集;
(4) 输出由文法G构造LastVT集的算法;
(5) 输出LastVT集。
【测试数据】
输入文法:
E-TE’
E’-+TE’|ε
T-FT’
T’-*FT’|ε
F-(E)|i
三:实验内容
完成实验一和选作题的第二个
四:采用的数据结构
在第二个实验的时候要用到栈,来存放一些信息,这里采用链表来构建栈。
struct node{
char ch[2];
struct node *next;
};
/ /栈顶指针
static struct node *stack=NULL;
五:算法描述
实验(一):
采用yacc语法分析程序自动的帮助完成一系列的分析工作,自己只需要编写完整的(.y)代码,描述清楚所要实现的文法,并且要自己处理,文法中存在的冲突问题,解决办法按照标准要求写明。
实验(3):
FIRSTVT算法思想:
设置一个int型数组,行号对应为非终结符,列号对应为终结符。
将数组元素全部初始化为0.
对于每个产生式寻找满足形如U-b……或U-Vb……的产生式,将对应数组[U,b]的值置为1,并且将对应的(非终结符,终结符)压栈。
当栈不为空的时候,出栈顶元素(非终结符,终结符),记为(Q,a)。对每个产生式寻找满足形为P-Q……,的产生式,如果[P,a]==0时,将对应元素[P,a]的值置为1,并且压栈。
直到栈为空时得到的二维数组为每行值对应为1的终结符为该行非终结符的FIRSTVT集
根据同样的算法思想可以得到LISTVT集合。
优先关系表的构建思想:
对于每个产生式P-X1X2X3……XN
如果Xi和Xi+1都终结符在,则对应的优先关系为=
如果Xi和Xi+2都为终结符,并且Xi+1为非终结符,则对应的Xi和Xi+2的优先关系为=
如果Xi为终结符Xi+1为非终结符,则将FIRSTVT(Xi+1)中的每个元素a,置对应Xia.
如果Xi为非终结符Xi+1为终结符,则将LASTVT(Xi)中的每个元素a,置对应aXi+1.
六:运行结果
七:调试情况
在生成FIRST时换取不同的文法时,程序发生了死循环。
在WINDOS下创建的文法文件每行结束时是以/r/n占用两个字节,而在LINUX下换行只占用一个/n字节。
八
您可能关注的文档
最近下载
- 国开2025年秋《农业推广》形成性考核1-3答案.docx
- 第七章_金属和半导体的接触.ppt
- 会计学课程设计报告会计学课程设计报告.doc VIP
- 6投资领域统计工作业务竞赛试题库.doc VIP
- 老年人运动能力下降多学科决策共识解读(2024版)PPT课件.pptx VIP
- GW-19CP.0011金风GWH 171-5.3 V11R01C100 机组产品说明书.pdf VIP
- 【MOOC】《中国马克思主义与当代》(北京科技大学)中国大学MOOC慕课答案.docx VIP
- 《数星星的孩子》课件.pptx VIP
- 【苏教版】六年级上册数学试题-计算能力训练六 .docx VIP
- ocean培训petrel re快速入门工作流程.pdf VIP
文档评论(0)