编译原理实验报告LL(1)分析法(共13页).doc
《编译原理实验报告LL(1)分析法(共13页).doc》由会员分享,可在线阅读,更多相关《编译原理实验报告LL(1)分析法(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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程序输入一以#结束的符号串(包括+*()i#),如:i+i*i#。
2、输出过程如下:步骤分析栈剩余输入串所用产生式1Ei+i*i#E-TG.二. 实验过程及结果代码如下:#include#include edge.husing namespace std;edge:edge()cinleftright;rlen=right.length();if(NODE.find(left)NODE.length() NODE+=left;string edge:getlf()return left;string edge:getrg()return right;string edge:getfirst()return first;string edge:getfollow(
3、)return follow;string edge:getselect()return select;string edge:getro()string str;str+=right0;return str;int edge:getrlen()return right.length();void edge:newfirst(string w)int i;for(i=0;ifirst.length()first+=wi;void edge:newfollow(string w)int i;for(i=0;ifollow.length()&wi!=)follow+=wi;void edge:ne
4、wselect(string w)int i;for(i=0;iselect.length()&wi!=)select+=wi;void edge:delfirst()int i=first.find();first.erase(i,1);int SUM;string NODE,ENODE;/计算firstvoid first(edge ni,edge *n,int x)int i,j;for(j=0;jSUM;j+)if(ni.getlf()=nj.getlf()if(NODE.find(nj.getro()NODE.length() for(i=0;iSUM;i+) if(ni.getlf
5、()=nj.getro() first(ni,n,x);else nx.newfirst(nj.getro();/计算followvoid follow(edge ni,edge *n,int x)int i,j,k,s;string str;for(i=0;ini.getrlen();i+)s=NODE.find(ni.getrg()i);if(s-1) /是非终结符if(ini.getrlen()-1) /不在最右for(j=0;jSUM;j+)if(nj.getlf().find(ni.getrg()i)=0)if(NODE.find(ni.getrg()i+1)NODE.length(
6、)for(k=0;kSUM;k+) if(nk.getlf().find(ni.getrg()i+1)=0) nj.newfollow(nk.getfirst(); if(nk.getfirst().find()nk.getfirst().length() nj.newfollow(ni.getfollow(); elsestr.erase();str+=ni.getrg()i+1;nj.newfollow(str);/计算selectvoid select(edge &ni,edge *n)int i,j;if(ENODE.find(ni.getro()ENODE.length()ni.ne
7、wselect(ni.getro();if(ni.getro()=)ni.newselect(ni.getfollow();elsefor(i=0;ini.getrlen();i+)for(j=0;jnj.getfirst().length()return;/输出集合void out(string p)int i;if(p.length()=0) return;cout;for(i=0;ip.length()-1;i+) coutpi,;coutpi;/连续输出符号void outfu(int a,string c)int i;for(i=0;ia;i+)coutc;/输出预测分析表void
8、outgraph(edge *n,string (*yc)50)int i,j,k;bool flag;for(i=0;iENODE.length();i+) if(ENODEi!=) outfu(10, );coutENODEi; outfu(10, );cout#endl;int x;for(i=0;iNODE.length();i+)outfu(4, );coutNODEi;outfu(5, );for(k=0;kENODE.length();k+)flag=1;for(j=0;jSUM;j+) if(NODEi=nj.getlf()0) x=nj.getselect().find(EN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 LL 分析 13
限制150内