合肥工业大编译原理实验 LL(1)分析法.doc

合肥工业大编译原理实验 LL(1)分析法.doc

ID:55682379

大小:91.00 KB

页数:16页

时间:2020-05-24

合肥工业大编译原理实验 LL(1)分析法.doc_第1页
合肥工业大编译原理实验 LL(1)分析法.doc_第2页
合肥工业大编译原理实验 LL(1)分析法.doc_第3页
合肥工业大编译原理实验 LL(1)分析法.doc_第4页
合肥工业大编译原理实验 LL(1)分析法.doc_第5页
资源描述:

《合肥工业大编译原理实验 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;i

14、')returni;//存在,就返回位置}return-1;//返回-1表示没有“

15、”在其右边}intvn(charc){//返回c在非终结符表中的位置inti;for(i=0;i

16、h;i++){if(c==Vn[i])returni;//在表中,就返回位置}return-1;//返回-1表示不在表中}intvt(charc){//返回c在终结符表中的位置inti;for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。