资源描述:
《合肥工业大编译原理实验 LL(1)分析法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验题目:LL(1)分析法免费下载,不客气班级:学号:姓名:EditedbyMagicYang完成日期:2013-5-28一、实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。使学生了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。二、实验内容u根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。u构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。u
2、分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。文法为(1)E->TG(2)G->+TG
3、-TG(3)G->ε(4)T->FS(5)S->*FS
4、/FS(6)S->ε(7)F->(E)(8)F->i三、数据结构及生成的算法描述事先已经构造好的表:Vn数组------非终结符表Vt数组------终结符Gr数组------文法事先定义的表及变量:非终结符按照在非终结符中的位置与first集follow集对应fi二维数组------first集,为真表示该终
5、结符在该行对应的非终结符的first集中fo二维数组------follow集,为真表示该终结符在该行对应的非终结符的follow集中M二维数组------预测分析表用到的方法:intor(inti,Strings)---返回最近的在其右边一个“
6、”位置intvn(charc)---返回c在非终结符表中的位置intvt(charc)---返回c在终结符表中的位置voidaddfi(Strings,intj)---求关于某一个产生式的first集voidfirst(charv)---求非终结符c关于该文法的first集,fir
7、st调用addfivoidfir()---求所以非终结符的first集,fir调用firstvoidaddfo(Strings,intj)---求关于某一个产生式的follow集voidfollow(charv)---求非终结符v关于该文法的follow集,follow调用addfovoidfol()---求所以非终结符的follow集,fol调用followvoidMM(intj,inti,Strings,intm)---将某一个产生式填入预测分析表中voidbuild_M()---构造预测分析表,build_M调用MMv
8、oidisright(Strings)---分析一个符号串是否符合该文法四、算法流程图四、源程序代码和测试的结果packagepackage_two;importjava.util.*;importjava.io.*;publicclassLL{charVn[]={'E','T','G','F','S'};//非终结符charVt[]={'+','-','*','/','(',')','i','#','ε'};//终结符//非终结符按照在非终结符中的位置与first集follow集对应booleanfi[][]=newboo
9、lean[Vn.length][Vt.length+1];//first集,为真表示该终结符在该行对应的非终结符的first集中booleanfo[][]=newboolean[Vn.length][Vt.length+1];//follow集,为真表示该终结符在该行对应的非终结符的follow集中StringM[][]=newString[Vn.length][Vt.length-1];//预测分析表StringGr[]={"E->TG","G->+TG
10、-TG","G->ε","T->FS","S->*FS
11、/FS","
12、S->ε","F->(E)","F->i"};//文法LL(){fir();//求first集fol();//求follow集build_M();//求预测分析表}intor(inti,Strings){//返回最近的在其右边一个“
13、”位置for(i=i+1;i14、')returni;//存在,就返回位置}return-1;//返回-1表示没有“
15、”在其右边}intvn(charc){//返回c在非终结符表中的位置inti;for(i=0;i16、h;i++){if(c==Vn[i])returni;//在表中,就返回位置}return-1;//返回-1表示不在表中}intvt(charc){//返回c在终结符表中的位置inti;for(i=0;i