语法实验报告.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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字节。 八

文档评论(0)

3344483cc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档