1、编译原理实验报告LL1分析法编译原理实验报告LL(1)分析法编译原理实验报告LL(1)分析法河南工业大学实验报告课程编译原理实验名称实验二LL(1)分析法实验目的1掌握LL(1)分析法的基本原理;2掌握LL(1)分析表的构造方法;3掌握LL(1)驱动程序的构造方法。一.实验内容及要求根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。对下列文法,用LL(1)分析法对任意输入的符号串进行分析:(1)E-TG(2)G-+TG(3)G-(4)T-FS(5)S-*FS(6)S-(7)F-(E)(8)F-i程序输入一以#结束的
2、符号串(包括+*()i#),如:i+i*i#。输出过程如下:步骤分析栈剩余输入串所用产生式1Ei+i*i#E-TG.二.实验过程及结果代码如下:#include#includeedge.husingnamespacestd;edge:edge()cinleftright;rlen=right.length();if(nodE.find(left)nodE.length()nodE+=left;stringedge:getlf()returnleft;stringedge:getrg()returnright;stringedge:getfirst()returnfirst;stringedge
3、:getfollow()returnfollow;stringedge:getselect()returnselect;stringedge:getro()stringstr;str+=right0;returnstr;intedge:getrlen()returnright.length();voidedge:newfirst(stringw)inti;for(i=0;iif(first.find(wi)first.length()first+=wi;voidedge:newfollow(stringw)inti;for(i=0;iif(follow.find(wi)follow.lengt
4、h()&wi!='')follow+=wi;voidedge:newselect(stringw)inti;for(i=0;iif(select.find(wi)select.length()&wi!='')select+=wi;voidedge:delfirst()inti=first.find('');first.erase(i,1);intSUm;stringnodE,EnodE;/计算firstvoidfirst(edgeni,edge*n,intx)inti,j;for(j=0;jif(ni.getlf()=nj.getlf()if(n
5、odE.find(nj.getro()for(i=0;iif(ni.getlf()=nj.getro()first(ni,n,x);elsenx.newfirst(nj.getro();/计算followvoidfollow(edgeni,edge*n,intx)inti,j,k,s;stringstr;for(i=0;is=nodE.find(ni.getrg()i);if(s-1)/是非终结符if(ifor(j=0;jif(nj.getlf().find(ni.getrg()i)=0)if(nodE.find(ni.getrg()i+1)for(k=0;kif(nk.getlf().fin
6、d(ni.getrg()i+1)=0)nj.newfollow(nk.getfirst();if(nk.getfirst().find()elsestr.erase();str+=ni.getrg()i+1;nj.newfollow(str);/计算selectvoidselect(edge&ni,edge*n)inti,j;if(EnodE.find(ni.getro()ni.newselect(ni.getro();if(ni.getro()=)ni.newselect(ni.getfollow();elsefor(i=0;ifor(j=0;jif(ni.getrg()i=nj.getlf
7、()0)ni.newselect(nj.getfirst();if(nj.getfirst().find('')nj.getfirst().length()return;/输出集合voidout(stringp)inti;if(p.length()=0)return;coutfor(i=0;icoutcout/连续输出符号voidoutfu(inta,stringc)inti;for(i=0;icout/输出预测分析表voidoutgraph(edge*n,string(*yc)50)inti,j,k;boolflag;for(i=0;iif(EnodEi!=''
8、;)下页编译原理实验报告LL(1)分析法outfu(10,);coutoutfu(10,);coutintx;for(i=0;ioutfu(4,);coutoutfu(5,);for(k=0;kflag=1;for(j=0;jif(nodEi=nj.getlf()0)x=nj.getselect().find(EnodEk);if(x-1)coutycik=nj.getrg();outfu(9-nj.getrlen(),);flag=0;x=nj.getselect().find('#');if(k=EnodE.length()-1&x-1)coutycij=nj.getrg(
9、);if(flag&EnodEk!='')outfu(11,);cout/分析符号串intpipei(string&chuan,string&fenxi,string(*yc)50,int&b)charch,a;intx,i,j,k;b+;coutif(b9)outfu(8,);elseoutfu(9,);coutoutfu(26-chuan.length()-fenxi.length(),);coutoutfu(10,);a=chuan0;ch=fenxifenxi.length()-1;x=EnodE.find(ch);if(x-1)if(ch=a)fenxi.erase(
10、fenxi.length()-1,1);chuan.erase(0,1);coutif(pipei(chuan,fenxi,yc,b)return1;elsereturn0;elsereturn0;elseif(ch='#')if(ch=a)coutreturn1;else()return0;elseif(ch='')fenxi.erase(fenxi.length()-1,1);if(pipei(chuan,fenxi,yc,b)return1;elsereturn0;elsei=nodE.find(ch);if(a='#')x=EnodE.f
11、ind('');if(x-1)j=EnodE.length()-1;elsej=EnodE.length();elsej=EnodE.find(a);if(ycij.length()coutfenxi.erase(fenxi.length()-1,1);for(k=ycij.length()-1;k-1;k-)if(ycijk!='')fenxi+=ycijk;if(pipei(chuan,fenxi,yc,b)return1;elsereturn0;elsereturn0;voidmain()edge*n;inti,j,k;boolflag=0;coutcin
12、SUm;coutn=newedgeSUm;for(i=0;iif(nodE.find(strj)nodE.length()&EnodE.find(strj)EnodE.length()EnodE+=strj;/计算first集合for(i=0;i/outfu(10,*);coutfor(i=0;ibreak;if(nj.getfirst().find()nj.getfirst().length()ni.delfirst();break;/计算follow集合for(k=0;kfollow(ni,n,i);for(i=0;i/计算select集合for(i=0;ifor(i=0;ifor(j=0
13、;jelsefor(k=0;kbreak;/输出上页下页余下全文编译原理实验报告LL(1)分析法coutoutfu(SUm,);coutoutfu(SUm,);coutoutfu(5+SUm,-*-);coutfor(i=0;i);coutoutfu(SUm+4,);out(nj.getfirst();outfu(SUm+4-2*nj.getfirst().length(),);out(nj.getfollow();coutbreak;outfu(5+SUm,-*-);cout;if(flag)coutreturn;elsecout/输出预测分析表coutyc=newstringnodE.length()50;outgraph(n,yc);stringchuan,fenxi,fchuan;coutcinchuan;fchuan=chuan;fenxi=#;fenxi+=nodE0;i=0;coutcoutoutfu(7,);coutoutfu(10,);coutoutfu(8,);coutif(pipei(chuan,fenxi,yc,i)coutelsecout截屏如下:三.实验中的问题及心得这次实验让我更加熟悉了LL(1)的工作流程以及LL(1)分析表的构造方法。以前课堂上搞不懂的算法流程通过实验都能得到进一步的了解。上页
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1