ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:564.50KB ,
资源ID:267046      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-267046.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(递归下降语法分析设计原理与实现技术实验报告.doc)为本站会员(聆听****声音)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

递归下降语法分析设计原理与实现技术实验报告.doc

1、递归下降语法分析设计原理与实现技术实验报告变更说明日期版本变更位置变更说明作者2014/4/161.0初稿生成房皓一、 实验目的:本实验的目的在于在教师的引导下以问题回朔与思维启发的方式,使学生在不断的探究过程中掌握编译程序设计和构造的基本原理和实现技术,启迪学生的抽象思维、激发学生的学习兴趣、培养学生的探究精神和专业素养,从而提高学生发现问题、分析问题和解决问题的能力。二、 实验内容:实验项目完成以下描述算术表达式的LL(1)文法的递归下降分析程序GE: ETEEATE|TFTTMFT|F (E)|iA+|-M*|/设计说明 终结符号i 为用户定义的简单变量,即标识符的定义。设计要求(1)输

2、入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果,输出为输入串是否为该文法定义的算术表达式的判断结果;(2)递归下降分析程序应能发现输入串出错;(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。三、 实验环境:操作系统:Windows 7软件:VC+6.0四、 程序功能描述:l 提供了两种输入方式:键盘和文件,有文件输入时需为二元式序列;l 能够对输入的字符串做出正确的递归下降分析判断,并给出判断结果;l 能发现输入串中的错误,包含非法字符,输入不匹配等;l 能够处理一些可预见性的错误,如文件不存在,用户输入非法等。五、数据结构设计:全局:局部(main

3、()中):六、程序结构描述:l 设计方法:本程序采用从键盘输入或文件读取两种输入方式,其中文件的内容需为二元式序列,然后按照递归下降分析的方法对输入的字符串进行分析判断,并输出判断结果,程序通过对输入串的检查能够发现输入串中的错误。程序规定的单词符号及其种别码见下表:单词符号及其种别码表单词符号种别码单词符号种别码(1*5)2/6+3i7-4#8l 主要函数说明:advance():将下一个字符送入current;error():输出错误,表示不是该文法的句子;error1();输出错误,输入内容不合法;init():初始化函数;justify():判断文件读取内容是否合法,包括检查非法字符和

4、不匹配现象main():主函数l 函数调用关系说明:main()调用justify()、init()、E()、error1();justify()调用error1();A()、E()、E1()、F()、M()、F()、T()、T1()根据输入串可互相调用或递归调用,这些函数均可调用error()函数;A()、F()、M()调用advance()函数。l 执行框图:1) 总体结构图:2)递归下降分析构框图:E():E1():T():T()1:M():A():F():七、 实验过程结果截图:l 测试用例一:i+i*i/i#键盘:文件:l 测试用例二:i+i*i/#键盘:文件:八、 实验总结:l 实

5、验心得:通过本次实验我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。老师提供的相对应于非终结符号的函数的流程图给了我很大的帮助,使得本实验基本思路变得很清晰,用较为简单的算法就能实现;解决实验中遇到的问题也花费了一部分时间,我增长了处理关于文件错误的能力;l 实验中遇到的问题:问题主要有在调用某个函数时没有在之前声明或定义过此函数;还有在当用户输入的选择方式非法时,提示错误并要求重新输入,这用一个while循环实现。l 程序的自我评价:此程序实现了要求中的所有功能,并增加了对用户操作错误、输入串错误检测的功能,但因编程能力的欠缺,其中有的地方不免有些繁杂,还有一些潜藏的问题

6、,需要进一步测试来时程序变得更加具有健壮性。九、 程序清单:/*课题名称:递归下降语法分析设计原理与实现技术作者:房皓 进修生 13410801最后修改时间:2014.4.16 13:52*/*单词符号及其分类编码单词符号种别码(1)2+3-4*5/6i7#8/文法GE:E TEEATE|T FTTMFT|F (E)|iA +|-M *|/*/#include#includeusing namespace std;#define MAX 50char tokenMAX;char token2MAX;char current;int i=0;/*函数声明*/void E();void E1();

7、void T();void A();void F();void T1();void M();void error();void error1();void init()/初始化current=tokeni;void justify(char ch,int i)/判断文件读取内容是否合法,包括检查非法字符和不匹配现象switch(ch)case 1:if(tokeni!=()error1();break;case 2:if(tokeni!=)error1();break;case 3:if(tokeni!=+)error1();break;case 4:if(tokeni!=-)error1()

8、;break;case 5:if(tokeni!=*)error1();break;case 6:if(tokeni!=/)error1();break;case 7:if(tokeni!=i)error1();break;case 8:if(tokeni!=#)error1();break;default:error1();break;void advance()/读取下一个字符if(i=MAX)exit(0);current=token+i;void E()if(current=i | current=()T();E1();elseerror();void E1()if(current=+

9、 | current=-)A();T();E1();elseif(!(current=) | current=#)error();void T()if(current=i | current=()F();T1();elseerror();void T1()if(current=* | current=/)M();F();T1();elseif(!(current=)|current=#|current=+|current=-)error();void M()if(current=*)advance();elseif(current=/)advance();elseerror();void A(

10、)if(current=+)advance();elseif(current=-)advance();elseerror();void F()if(current=()advance();E();if(current=)advance();elseif(current=i)advance();elseerror();void error()coutERROR!endl;exit(0);void error1()cout输入错误!endl;exit(0);int main()int flag;/提供输入和文件两种方式int j=1;int i=0;char token1MAX;/用于检测文件输入

11、是否匹配FILE *fp;coutflag) | (flag!=1 & flag!=2)coutnError!Re-enter:;cin.clear();cin.ignore(200,n);if(flag=1)cout请输入长度不超过50且以#结束的字符串:token;elseif(fp=fopen(input.txt,r)=NULL)cout文件打开失败!endl;exit(0);token10=fgetc(fp);while(!feof(fp)token1j+=fgetc(fp);if(j%5)=0)token2i=token1j-4;tokeni=token1j-2;justify(token2i,i);i+;if(j-1)%5 != 0)error1();cout读入字符串为:tokenendl;init();E();if(current=#)coutSUCCESS!endl;return 1;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2