欢迎来到天天文库
浏览记录
ID:56101181
大小:44.50 KB
页数:5页
时间:2020-03-16
《编译原理递归下降预测分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《编译原理》课程实验报告课程实验题目:作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:作者学号:作者姓名:指导教师姓名:4一、实验目的通过本实验,了解递归下降预测分析的原理和过程以及可能存在的回溯问题,探讨解决方法,为预测分析表方法的学习奠定基础。分析递归下降子程序的优缺点。二、实验内容及要求1.给定文法:S→(T)
2、a+S
3、aT→T,S
4、S改写文法,使其可以使用递归下降子程序方法进行分析,编写递归下降子程序,判断句子:(((a+a+a),a+a),a)是否符合该文法。输入:(((a+a+a),a+a),a)
5、输出:结构正确或结构错误2.编写程序调试运行;考虑如果将你的程序改为识别其他的文法,你的递归下降子程序可否通用,考虑递归下降子程序方法的优缺点。三、实验程序设计说明1.实验方案设计1.match;函数:从文件中依次读字符2.S函数:判断表达式是否满足S→(T)
6、aS1。3.S1函数:判断表达式是否满足S1→(a+)S1
7、e4.T函数:判断表达式是否满足T→ST15.T1函数:判断表达式是否满足T1→,ST1
8、e6.error函数:输出错误信息到屏幕2.程序源代码#include#include
9、voidmatch(chart);voidS();voidS1();voidT();voidT1();voiderror();charlookahead;chara[100];inti=0;intj=0;intx=0;voidmatch(chart){if(lookahead==t)4lookahead=a[++j];elseerror();}voidS(){if(lookahead=='('){match('(');T();if(lookahead==')')match(')');elseerror();}elseif(lookahe
10、ad=='a'){match('a');S1();}elseerror();}voidS1(){if(lookahead=='+'){match('+');S();}}voidT(){S();T1();}voidT1(){if(lookahead==','){match(',');S();T1();}}voiderror()4{x=-1;}voidmain(){cout<<"请输入一个表达式(((a+a+a),a+a),a)(以@结束):";charc;cin>>c;chars;cin>>s;while(s!='@'){a[i]=s;i
11、++;cin>>s;}lookahead=*a;S();if(x==-1)cout<<"不匹配"<12、位置。针对程序的健壮性问题,通过和同学讨论补充了error函数,用于判断表达式是否错误并输出错误信息到屏幕。4五、体会、意见或建议通过此次实验,更加深入的了解递归下降预测分析的原理和过程以及可能存在的回溯问题。掌握了解决方法,为预测分析表方法的学习奠定了基础,明白了递归下降子程序的优缺点。在实验过程中,出现了一些问题,在得同学以及老师的帮助下完成了此次实验内容。本实验基本达到了老师的要求,实现了递归下降子程序的编写的基本功能。4
12、位置。针对程序的健壮性问题,通过和同学讨论补充了error函数,用于判断表达式是否错误并输出错误信息到屏幕。4五、体会、意见或建议通过此次实验,更加深入的了解递归下降预测分析的原理和过程以及可能存在的回溯问题。掌握了解决方法,为预测分析表方法的学习奠定了基础,明白了递归下降子程序的优缺点。在实验过程中,出现了一些问题,在得同学以及老师的帮助下完成了此次实验内容。本实验基本达到了老师的要求,实现了递归下降子程序的编写的基本功能。4
此文档下载收益归作者所有