编译原理实验报告LL(1)分析法_第1页
编译原理实验报告LL(1)分析法_第2页
编译原理实验报告LL(1)分析法_第3页
编译原理实验报告LL(1)分析法_第4页
编译原理实验报告LL(1)分析法_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理实验报告LL(1)分析法编译原理实验报告LL(1)分析法编译原理实验报告LL(1)分析法xxx公司编译原理实验报告LL(1)分析法文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度课程编译原理实验名称实验二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 程序输入一以#结束的符号串(包括+*()i#),如:i+i*i#。输出过程如下:步骤分析栈剩余输入串所用产生式1Ei+i*i#E->TG............实验过程及结果代码如下:#include<iostream>#include""usingnamespacestd;edge::edge(){ cin>>left>>right; rlen=(); if(left)>()) NODE+=left;}stringedge::getlf(){ returnleft;}stringedge::getrg(){ returnright;}stringedge::getfirst(){ returnfirst;}stringedge::getfollow(){ returnfollow;}stringedge::getselect(){ returnselect;}stringedge::getro(){ stringstr; str+=right[0]; returnstr;}intedge::getrlen(){ return();}voidedge::newfirst(stringw){ inti; for(i=0;i<();i++) if(w[i])>()) first+=w[i];}voidedge::newfollow(stringw){ inti; for(i=0;i<();i++) if(w[i])>()&&w[i]!='@') follow+=w[i];}voidedge::newselect(stringw){ inti; for(i=0;i<();i++) if(w[i])>()&&w[i]!='@') select+=w[i];}voidedge::delfirst(){ inti=('@'); (i,1);}intSUM;stringNODE,ENODE;etlf()) { if(n[j].getro())<()) { for(i=0;i<SUM;i++) if(n[i].getlf()==n[j].getro()) first(n[i],n,x); } else n[x].newfirst(n[j].getro()); } }}etlf().find()[i])==0) { if()[i+1])<()) { for(k=0;k<SUM;k++) if(n[k].getlf().find()[i+1])==0) { n[j].newfollow(n[k].getfirst()); if(n[k].getfirst().find("@")<n[k].getfirst().length()) n[j].newfollow()); } } else { (); str+=()[i+1]; n[j].newfollow(str); } } }}etlf()[0]) { (n[j].getfirst()); if(n[j].getfirst().find('@')>n[j].getfirst().length()) return; } }}etlf()[0]) { x=n[j].getselect().find(ENODE[k]); if(x<n[j].getselect().length()&&x>-1) { cout<<"->"<<n[j].getrg(); yc[i][k]=n[j].getrg(); outfu(9-n[j].getrlen(),""); flag=0; } x=n[j].getselect().find('#'); if(k==()-1&&x<n[j].getselect().length()&&x>-1) { cout<<"->"<<n[j].getrg(); yc[i][j]=n[j].getrg(); } } } if(flag&&ENODE[k]!='@') outfu(11,""); } cout<<endl; }}ength()) { cout<<NODE[i]<<"->"<<yc[i][j]; ()-1,1); for(k=yc[i][j].length()-1;k>-1;k--) if(yc[i][j][k]!='@') fenxi+=yc[i][j][k]; if(pipei(chuan,fenxi,yc,b)) return1; else return0; } else return0; } }}voidmain(){ edge*n; stringstr,(*yc)[50]; inti,j,k; boolflag=0; cout<<"请输入上下文无关文法的总规则数:"<<endl; cin>>SUM; cout<<"请输入具体规则(格式:左部右部,@为空):"<<endl; n=newedge[SUM]; for(i=0;i<SUM;i++) for(j=0;j<n[i].getrlen();j++) { str=n[i].getrg(); if(str[j])>()&&(str[j])>()) ENODE+=str[j]; } etfirst().find("@")<n[i].getfirst().length()) { if(n[i].getro())<()) { for(k=1;k<n[i].getrlen();k++) { if(n[i].getrg()[k])<()) { for(j=0;j<SUM;j++) { if(n[i].getrg()[k]==n[j].getlf()[0]) { n[i].newfirst(n[j].getfirst()); break; } } if(n[j].getfirst().find("@")>n[j].getfirst().length()) { n[i].delfirst(); break; } } } } } etlf()==n[0].getlf()) n[i].newfollow("#"); follow(n[i],n,i); } for(i=0;i<SUM;i++) { for(j=0;j<SUM;j++) if(n[j].getrg().find(n[i].getlf())==n[j].getrlen()-1) n[i].newfollow(n[j].getfollow()); } } etlf()[0]==NODE[i]) { if(!()) str=n[j].getselect(); else { for(k=0;k<n[j].getselect().length();k++) if(n[j].getselect()[k])<()) { flag=1; break; } } } } etlf()[0]) { outfu(3,""); cout<<NODE[i]; outfu(SUM+4,""); out(n[j].getfirst()); outfu(SUM+4-2*n[j].getfirst().length(),""); out(n[j].getfollow()); cout<<endl; break; } } outfu(5+SUM,"-*-"); cout<<endl<<"判定结论:"; if(flag) { cout<<"该文法不是LL(1)文法!"<<endl; return; } else { cout<<"该文法是LL(1)文法!"<<endl; } //输出预测分析表 cout<<endl<<"预测分析表如下:"<<endl; yc=newstring[()][50]; outgraph(n,yc); stringchuan,fenxi,fchuan; cout<<endl<<"请输入符号串:"; cin>>chuan; fchuan=chuan; fenxi="#"; fenxi+=NODE[0]; i=0; cout<<endl<<"预测分析过程如下:"<<endl; cout<<"步骤"; outfu(7,""); cout<<"分析栈"; outfu(10,""); cout<<"剩余输入串"; outfu(8,"");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论