欢迎来到天天文库
浏览记录
ID:18592341
大小:273.00 KB
页数:32页
时间:2018-09-19
《编译原理课程报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理》课程设计报告题目:LALR(1)分析器姓名:粟霞学号:0806230205指导教师:赵洋2011年6月一.设计目的1.巩固对语法分析的基本功能和原理的认识。2.通过对语法分析表的自动生成加深语法分析表的认识。3.理解并处理语法分析中的异常和错误。4.熟练掌握LALR(1)语法分析过程。二.设计内容本次课程设计是设计一个LALR(1)语法分析器。LALR(1)是LR(1)的一种改进。为了克服LR(1)中分析表的构造对某些同心集的分裂可能对状态数目引起剧烈的增长,从而导致存储容量的急剧增加,采用对LR(1)项目集规范族合并同心集的方法,若合并同心集后不产生新的冲突,则为LA
2、LR(1)项目集。本次课程设计的主要内容有首先生成LR(1)项目族;再合并同心集;然后生成LALR(1)项目族,求出LALR(1)的分析表;最后能判断一个字符串是否是该文法的串,若是则生成该字符串的树。具体实现过程及相关主要实现类如下:类:LR0功能:LR0核心项目集构造输入:产生式的数字化表示输出:LR0核心项目集实现思想:LR0核心项目集构造算法程序如下:publicclassLR0{ArrayList>core;ArrayList>Ary_c;ArrayListproducer;privatei
3、nt[]copy(int[]a){intval[]=newint[a.length];for(inti=0;icopy(ArrayLista){ArrayListval=newArrayList();for(inti=0;i4、.length)returnfalse;for(inti=0;ia,ArrayListb){if(a.size()!=b.size())returnfalse;for(inti=0;ia,in5、t[]b){intindex;ints1[];for(index=0;index>a,ArrayListb){intindex;ArrayLists1;for(index=0;index6、nindex;}return-1;}publicint[]getStartWith(inti){intcount=i;ArrayListtemp=newArrayList(3);while(counti)break;count++;}intval[]=newint[temp.size()];for(count=0;count7、)val[count]=temp.get(count);returnval;}publicvoidclosuer_innal(intitem[],ArrayListpos){if(item.length==2)return;inti;intp[];for(i=0;i
4、.length)returnfalse;for(inti=0;ia,ArrayListb){if(a.size()!=b.size())returnfalse;for(inti=0;ia,in
5、t[]b){intindex;ints1[];for(index=0;index>a,ArrayListb){intindex;ArrayLists1;for(index=0;index6、nindex;}return-1;}publicint[]getStartWith(inti){intcount=i;ArrayListtemp=newArrayList(3);while(counti)break;count++;}intval[]=newint[temp.size()];for(count=0;count7、)val[count]=temp.get(count);returnval;}publicvoidclosuer_innal(intitem[],ArrayListpos){if(item.length==2)return;inti;intp[];for(i=0;i
6、nindex;}return-1;}publicint[]getStartWith(inti){intcount=i;ArrayListtemp=newArrayList(3);while(counti)break;count++;}intval[]=newint[temp.size()];for(count=0;count7、)val[count]=temp.get(count);returnval;}publicvoidclosuer_innal(intitem[],ArrayListpos){if(item.length==2)return;inti;intp[];for(i=0;i
7、)val[count]=temp.get(count);returnval;}publicvoidclosuer_innal(intitem[],ArrayListpos){if(item.length==2)return;inti;intp[];for(i=0;i
此文档下载收益归作者所有