当前位置:文档之家› 实验原理LL1分析法

实验原理LL1分析法

{ cout<<"->"<<n[j].getrg(); yc[i][k]=n[j].getrg(); outfu(9-n[j].getrlen()," ");
flag=0; }
x=n[j].getselect().find('#');
if(k==ENODE.length()-1&&x<n[j].getselect().length()&&x>-1)
实验报告
实验名称
LL1分析法
专业
计算机科学与技术
课程名称
编译原理
指导老师
赵智超
班级
计算机一班
姓名
学号
12103140102
评分
实验地点
1C26217
实验日期
2014-04-30
一、实验目的
1.掌握LL(1)分析法的基本原理;2.掌握LL(1)分析表的构造方法;3.掌握LL(1)驱动程序的构造方法。
二、实验原理
for(i=0;i<ENODE.length();i++)
{ if(ENODE[i]!='@') { outfu(10," "); cout<<ENODE[i]; } }
outfu(10," "); cout<<"#"<<endl; int x;
for(i=0;i<NODE.length();i++) { outfu(4," "); cout<<NODE[i]; outfu(5," ");
{ char ch,a; int x,i,j,k; b++; cout<<endl<<" "<<b;
if(b>9) outfu(8," "); else outfu(9," ");
cout<<fenxi; outfu(26-chuan.length()-fenxi.length()," "); cout<<chuan;
{ s=NODE.find(ni.getrg()[i]); if(s<NODE.length()&&s>-1)
if(i<ni.getrlen()-1) for(j=0;j<SUM;j++)
if(n[j].getlf().find(ni.getrg()[i])==0)
{ if(NODE.find(ni.getrg()[i+1])<NODE.length())
n[j].newfollow(ni.getfollow()); } }
else { str.erase(); str+=ni.getrg()[i+1]; n[j].newfollow(str);} }} }
void select(edge &ni,edge *n){ int i,j;
if(ENODE.find(ni.getro())<ENODE.length())
{ ni.newselect(ni.getro()); if(ni.getro()=="@") ni.newselect(ni.getfollow());}
else for(i=0;i<ni.getrlen();i++)
{ for(j=0;j<SUM;j++) if(ni.getrg()[i]==n[j].getlf()[0])
if(pipei(chuan,fenxi,yc,b)) return 1;
elsereturn 0; }
else return 0;} } }
void main()
{ edge *n; string str,(*yc)[50]; int i,j,k; bool flag=0;
cout<<"请输入上下文无关文法的总规则数:"<<endl; cin>>SUM;
if(n[j].getfirst().find("@")>n[j].getfirst().length())
{ n[i].delfirst();break; } } } } }
cout<<"请输入具体规则(格式:左部右部,@为空):"<<endl;
n=new edge[SUM]; for(i=0;i<SUM;i++)
for(j=0;j<n[i].getrlen();j++){str=n[i].getrg();
if(NODE.find(str[j])>NODE.length()&&ENODE.find(str[j])>ENODE.length())
{for(k=1;k<n[i].getrlen();k++)
{if(NODE.find(n[i].getrg()[k])<NODE.length())
{for(j=0;j<SUM;j++)
{if(n[i].getrg()[k]==n[j].getlf()[0])
{ n[i].newfirst(n[j].getfirst()); break;} }
void edge::newselect(string w) { int i; for(i=0;i<w.length();i++)
if(select.find(w[i])>select.length()&&w[i]!='@') select+=w[i]; }
void edge::delfirst() {int i=first.find('@');first.erase(i,1); }
string edge::getro() {string str;str+=right[0];return str; }
int edge::getrlen() {return right.length();}
void edge::newfirst(string w) { int i; for(i=0;i<w.length();i++)
if(first.find(w[i])>first.length()) first+=w[i]; }
void edge::newfollow(string w) { int i; for(i=0;i<w.length();i++)
if(follow.find(w[i])>follow.length()&&w[i]!='@') follow+=w[i]; }
int SUM; string NODE,ENODE;
void first(edge ni,edge *n,int x) {int i,j;for(j=0;j<SUM;j++)
{ if(ni.getlf()==n[j].getlf())
{ if(NODE.find(n[j].getro())<NODE.length())
string edge::getrg() {return right; }
string edge::getfirst() {return first; }
string edge::getfollow() { return follow; }
string edge::getselect() { return select; }
ENODE+=str[j]; }
for(i=0;i<SUM;i++){ first(n[i],n,i); }
for(i=0;i<SUM;i++)
if(n[i].getfirst().find("@")<n[i].getfirst().length())
{if(NODE.find(n[i].getro())<NODE.length())
{ cout<<"->"<<n[j].getrg(); yc[i][j]=n[j].getrg(); } } }
if(flag&&ENODE[k]!='@') outfu(11," "); } cout<<endl; } }
int pipei(string &chuan,string &fenxi,string (*yc)[50],int &b)
{ for(k=0;k<SUM;k++) if(n[k].getlf().find(ni.getrg()[i+1])==0)
{ n[j].newfollow(n[k].getfirst());
if(n[k].getfirst().find("@")<n[k].getfirst().length())
else j=ENODE.find(a); if(yc[i][j].length()) { cout<<NODE[i]<<"->"<<yc[i][j];
fenxi.erase(fenxi.length()-1,1); for(k=yc[i][j].length()-1;k>-1;k--)
相关主题