欢迎来到天天文库
浏览记录
ID:57164325
大小:28.50 KB
页数:9页
时间:2020-08-05
《编译原理-递归下降分析法教学文案.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理-递归下降分析法精品文档实验二递归下降分析法一实验目的递归下降分析法。二实验要求(一)准备:1.阅读课本有关章节;2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。(二)上课上机:将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。(三)程序要求:程序输入/输出示例:对下列文法,用递归下降分析法对任意输入的符号串进行分析:(1)E->TG(2)G->+TG
2、—TG(3)G->ε(4)T->FS(5)S->*FS
3、/FS(7)F->(E)(8)F->i输出的格式如下
4、:(1)递归下降分析程序,编制人:姓名,学号,班级(2)输入一以#结束的符号串(包括+—*/()i#):在此位置输入符号串例如:i+i*i#收集于网络,如有侵权请联系管理员删除精品文档(3)输出结果:i+i*i#为合法符号串备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。注意:(6)S->ε1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);3.对学有余力的同学,可以详细的输出推导的过程,即详细列出每一
5、步使用的产生式。三实验内容1.程序思路(1)定义部分:定义常量、变量、数据结构。(2)初始化:从文件将输入符号串输入到字符缓冲区中。(3)利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。(4)实验思路:利用程序设计语言的知识和大量编程技巧,递归下降分析法是一种较实用的分析法,通过练习,掌握函数间相互调用的方法。四实验结果(1)当输入“i-i”,不但输出推导过程,还会把栈内的状态显示出来;收集于网络,如有侵权请联系管理员删除精品文档(2)当输入“iii”,则直接输出“不
6、符合该文法”;五实验总结通过这次试验,让我更加熟悉掌握了自上而下语法分析法的特点。掌握了递归下降语法分析的基本原理和方法。运用递归下降分析法完成了本试验的语法分析构造,并且成功的分析出每种正确的句子和错误的句子。函数的构造是根据文法分析的递归过程,所编写每个函数的功能,以文法的右部为函数名,对应的左部为相应分析过程。此分析法简单,直观,易构造分析程序,但是实验要求不灵活,换另一套语法,就要重新写,但思路不变。在试验的过程中,遇到了一些小问题,算法思路不清晰,导致代码编写比较乱,后通过借鉴其它资料,把代
7、码改写的更加精炼。通过这次试验,也让自己更加对算法感兴趣。源代码#include收集于网络,如有侵权请联系管理员删除精品文档#include#include#includeusingnamespacestd;//stackStr:模拟栈strings,str,stackStr;inti;vectorv;voidE();voidG();voidT();voidS();voidF();voiderr();intcheck
8、();voiderr();voidpush(stringpre,stringvalue);voiderr(){cout<<"ERROR"<9、管理员删除精品文档}v.push_back((pre+value+","+stackStr));}//验证是否已经到栈底intcheck(){if(i>=s.size()){return1;}elseif(s[i]=='#'){return1;}return0;}voidE(){push("E-->","TG");T();G();}voidG(){if(s[i]=='+'10、11、s[i]=='-'){str=s[i];str+="TG";push("G-->",str);i++;T();G();}else12、{push("G-->","ε");收集于网络,如有侵权请联系管理员删除精品文档}}voidT(){push("T-->","FS");F();S();}voidS(){if(s[i]=='*'13、14、s[i]=='/'){str=s[i];str+="FS";push("S-->",str);i++;F();S();}else{push("S-->","ε");}}voidF(){if(s[i]=='('){push("F-->","(E)");i++;E
9、管理员删除精品文档}v.push_back((pre+value+","+stackStr));}//验证是否已经到栈底intcheck(){if(i>=s.size()){return1;}elseif(s[i]=='#'){return1;}return0;}voidE(){push("E-->","TG");T();G();}voidG(){if(s[i]=='+'
10、
11、s[i]=='-'){str=s[i];str+="TG";push("G-->",str);i++;T();G();}else
12、{push("G-->","ε");收集于网络,如有侵权请联系管理员删除精品文档}}voidT(){push("T-->","FS");F();S();}voidS(){if(s[i]=='*'
13、
14、s[i]=='/'){str=s[i];str+="FS";push("S-->",str);i++;F();S();}else{push("S-->","ε");}}voidF(){if(s[i]=='('){push("F-->","(E)");i++;E
此文档下载收益归作者所有