资源描述:
《编译原理递归下降分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、软件学院《编译原理》课程实验报告HI课程名称:专业:班级:学号:学生姓名:指导老师:递归下降分析软件工程・netll2201107082231陆筱霞2014年6月25U一、实验目的:根据某一文法编制调试递归下降分析稈序,以便对任意输入的符号串进行分析。木次实验的目的主要是加深对递归下降分析法的理解。二、实验预习提示:1、递归下降分析法的功能词法分析器的功能是利用函数Z间的递归调用模拟语法树自上而下的构造过程。2、递归下降分析法的前提改造文法:消除二义性、消除左递归、提取左因子,判断是否为LL(1)文法,3、递归下降分析法实
2、验设计思想及算法为G的每个非终结符号U构造一个递归过程,不妨命名为UoU的产生式的右边指出这个过程的代码结构:(1)若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。(2)若是非终结符号,则调用与此非终结符对应的过稈。当A的右部有多个产生式时,可用选择结构实现。具体为:(1)对于每个非终结符号U->ullu2l—lun处理的方法如下:U(){ch二当前符号;if(ch可能是ul字的开头)处理ul的程序部分;elseif(ch可能是u2字的开头)处理u2的稈序部分;•••elseerror())(2)对于每
3、个右部ul->xlx2---xn的处理架构如下:处理xl的程序;处理x2的程序;•••处理xn的程序;(3)如果右部为空,则不处理。(4)对于右部中的每个符号xi%1如果xi为终结符号:if(xi==当前的符号){NextChar();return;}else出错处理%1如果xi为非终结符号,直接调用相应的过程xi()说明:NexiChar为前进一个字符函数。三、实验过程1、模块结构图1-1递归下降稈序框架图2、设计步骤1)给定文法:ETE+TITTTT*FIFF-»(E)Ii2)构造FIRST()集和FOLLOW()集表
4、2-1FIRST()集和FOLLOW()集FIRSTFOLLOWE(,i#,+,)T(,i#,+,),*F(,i#,+,),*3、程序源代码usingSystem;usingSystein.Collections.Generic;usingSystem.Text;namespace递归下降语法分析publicclassProgrampublicstaticchar[]a=newchar[50];publicstaticcharpublicstaticchar[]b=newchar[50];[]d=newchar[200];
5、publicstaticchar[]e二newchar[10];publicstaticpublicstaticpublicstaticpubliccharch;intnl,i1二0,flag二l,n二5;inttotal=0;/*步骤计数器*/staticintEl()intf,t;Console・Write(total);Console.Write("tE-->TGtz/);total++;flag=l;input0;input10;f=T();if(f==0)return(0);t-G();if(t==0)ret
6、urn(0);elsereturn(1);}publicstaticintE(){intf,t;Console.Write(total);Console.Write("tE-->TGt");total++;e[0]=,E';e[l]=,=,;e[2]二'〉’;e[3]='T';e[4]='G';e[5]二;output();flag=l;input.();inputl();f=T();if(f==0)return(0);t二G();if(t==0)return(0);elsereturn(l);}publicstati
7、cintT()intf,t;Console.Write(total);Console.Write("tT—〉FSt");total++;e[0]=r;e[l]==;e[2]=>';e⑶卄;e[4]二'S';e[5]='#';output();flag=l;input();input1();f二F();if(f==0)return(0);t=S();if(t==0)return(0);elsereturn(1);}publicstaticintG(){intf;if(ch='+'){b[il]=ch;Console.Wr
8、ite(total);Console.Write("tG-->+TGt");total++;e[0]=,G,;e[l]==;e[2]=>';e⑶二'+';e[4]='T';e[5]二'G';e⑹二;output();flag=0;input();input1();ch=a[++订];f=T();if