流连忘返是什么意思啊:求根据优先关系表构造优先函数的c/c++源码

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 15:20:36

是算符优先关系么?我这倒是有一个,好久没弄了,不知道行不行。
char vt[7]={'+','*','|','i','(',')','#'};
int eeee[7][7]={{1,3,3,3,3,1,1},{1,1,3,3,3,1,1},{1,1,3,3,3,1,1},{1,1,1,0,0,1,1},{3,3,3,3,3,2,0},{1,1,1,0,0,1,1},{3,3,3,3,3,0,2}};
char vn[4]={'E','T','F','P'};
char s[50],ss[50];
char *tt,*bb;//tt-->top bb-->bottom
char *wenfa[8]={"EE+T","ET","TT*F","TF","FP|F","PP","P(E)","Pi"};
int k;

judge_vn(char cc)
{
int i=0;
for(i=0;i<4;i++)
{
if(cc==vn[i])

return(i+1);
}
return(0);
}

judge_vt(char cc)
{
int i=0;
for(i=0;i<7;i++)
if(cc==vt[i])
return(i+1);
return(0);
}

judge()
{
int z;
z=judge_vn(s[k]);
if(s[1]=='#' && k==2 && z )
return(1);
else
return(0);
}

char judge_guiyue(int a,int b)
{
int aa=0,bb=0,cc=0,ii=1,jj=a+1;
while(aa==0)
{
if(s[a+1]==wenfa[bb][ii])
{
while(cc==0 && jj!=b)
{
jj++;
ii++;
if(s[jj]!=wenfa[bb][ii])
cc=1;

}
if(cc==0 && jj==b)
aa=1;
}
else
{
cc=0;
ii=1;
jj=a+1;
bb++;

}

}

return(wenfa[bb][0]);
}

main()
{
int j,pan,tttt,tttta,wwww=0,ddr;
char a,Q;

tt=bb=&s[1];
printf("input the string needed analysed\n:");
scanf("%s",ss);

//printf("\n%s\n",ss);

k=1;
s[k]='#';
a=ss[wwww];
pan=judge();

//printf("\n%d\n",pan);

while(!pan)
{

tttt=judge_vt(s[k]); //printf("\n%d\n",tttt);
tttta=judge_vt(a); //printf("\n%d\n",tttta);
if(tttt)
j=k;
else
j=k-1;
tttt=judge_vt(s[j]); //printf("\n%d\n",tttt);
// printf("\n%d\n",eeee[tttt-1][tttta-1]);
if(eeee[tttt-1][tttta-1]==1)
{
Q=s[j]; //printf("\n%c\n",Q);
//printf("\n%d\n",eeee[judge_vt(s[j])-1][judge_vt(Q)-1]);
while (eeee[judge_vt(s[j])-1][judge_vt(Q)-1]!=3)
{
Q=s[j];
if(judge_vt(s[j-1]))
j=j-1;
else
j=j-2;

}
k=j+1;
s[k]=judge_guiyue(j,k);
//pan=judge();

}
else
if(eeee[tttt-1][tttta-1]==3)
{
k=k+1;
s[k]=a;
a=ss[++wwww];
//pan=judge();
}
else
if(eeee[tttt-1][tttta-1]==2)
{
if(s[j]=='#')
{
pan=judge();
if(pan)
printf("\n正常结束\n");
else
{
pan=1;
printf("\n出错\n");
}

}
else
{
k=k+1;
s[k]=a;
a=ss[++wwww];
//pan=judge();

}

}

else
{
pan=1;
printf("\n出错\n");
}
for(ddr=1;ddr<=k;ddr++)
printf("\n%c\n",s[ddr]);
printf("%d",k);
printf("%d",pan);
printf("%c",a);

}

//printf("%s",wenfa[0]);

}