📄 sffxq.cpp
字号:
sh=exchang(S[i]);
trl=exchang(TR[j]);
if(sh==-1&&trl!=-2)
{
buf=i;
i--;
sh=exchang(S[i]);
if(sh==-2)
{
print(buf,j,M);
printf(" \n");
i=buf;
S[++i]=TR[j];
continue;
}
else if(sh==-1){printf("该句子不能被识别\n");return 0;}
else
{
if(M[sh][trl]==1)
{
print(buf,j,M);printf(" ");
k=left(i,j,M);
for(i=k;i<=buf;i++)
printf("%c",S[i]);
printf("\n");
S[k]='V';
i=k;
j--;
continue;
}
else if(M[sh][trl]==-1||M[sh][trl]==0)
{
print(buf,j,M);printf(" \n");
i=buf;
S[++i]=TR[j];
continue;
}
else return -1;
}
}
else if(sh!=-1&&sh!=-2&&trl!=-2)
{
buf=i;
if(M[sh][trl]==-1||M[sh][trl]==0)
{
print(i,j,M);printf(" \n");
S[++i]=TR[j];
continue;
}
else if(M[sh][trl]==1)
{
print(i,j,M);printf(" ");
k=left(i,j,M);
for(i=k;i<=buf;i++)
printf("%c",S[i]);
printf("\n");
S[k]='V';
i=k;
j--;
continue;
}
else {printf("该句子不能被识别\n");return 0;}
}
else if(sh==-1&&trl==-2)
{
buf=i;
if(i==1){fale=1;return 1;}
else
{
print(i,j,M);printf(" ");
i--;
k=left(i,j,M);
for(i=k;i<=buf;i++)
printf("%c",S[i]);
printf("\n");
S[k]='V';
i=k;
print(i,j,M);printf(" \n");
j--;
continue;
}
}
else if(sh!=-1&&sh!=-2&&trl==-2)
{
buf=i;
print(i,j,M);printf(" ");
k=left(i,j,M);
for(i=k;i<=buf;i++)
printf("%c",S[i]);
printf("\n");
S[k]='V';
i=k;
j--;
continue;
}
else {printf("该句子不能被识别\n");return 0;}
}
if(j>=len&&fale==1) return 1;
else return 0;
}
//*********************************************************************************************
void lastterm(char *s,int **m)
{
int flag=0;
int a,b,j,i=0;
while(s[i]!='$')
{
if(flag==0)
{ a=exchang(s[i]); flag=1; }
else
{
if(s[i]=='|'||s[i]=='\n')
{ j=i;
j--;
while(isupper(s[j]))
{ j--; }
if(s[j]=='=')
goto q;
else
{
if(s[i]=='\n')
{
flag=0;
}
b=exchang(s[j]); m[a][b]=1;
goto q;
}
}
}
q: i++;
}
}
//********************************************************************************************
void main()
{ int n,l,k,i;
char c,ch;
FILE *fp;
int **m1,**m2,**m3,**m4,**m5,**m6,**m7,**m8,**M,**EM,**FM,**LM;
char s[MAX];
if ((fp=fopen("4.txt","r"))==NULL)
printf("源程序无法打开!\n");
else
{
printf("\n************************************文法****************************************");
while((ch=fgetc(fp))!=EOF)
{
printf("%c",ch);
}
fclose(fp);
printf("********************************************************************************");
fp=fopen("4.txt","r");
l=Input(fp,s);
//gramer(s);
n=vntcount(s,vn,vt,l);
printf("\n");
M=new int*[n];
for(i=0;i<n;i++)
M[i]=new int[n];
EM=new int*[n];
for(i=0;i<n;i++)
EM[i]=new int[n];
FM=new int*[n];
for(i=0;i<n;i++)
FM[i]=new int[n];
LM=new int*[n];
for(i=0;i<n;i++)
LM[i]=new int[n];
m1=new int*[n];
for(i=0;i<n;i++)
m1[i]=new int[n];
m2=new int*[n];
for(i=0;i<n;i++)
m2[i]=new int[n];
m3=new int*[n];
for(i=0;i<n;i++)
m3[i]=new int[n];
m4=new int*[n];
for(i=0;i<n;i++)
m4[i]=new int[n];
m5=new int*[n];
for(i=0;i<n;i++)
m5[i]=new int[n];
m6=new int*[n];
for(i=0;i<n;i++)
m6[i]=new int[n];
m7=new int*[n];
for(i=0;i<n;i++)
m7[i]=new int[n];
m8=new int*[n];
for(i=0;i<n;i++)
m8[i]=new int[n];
init(EM,n);
init(FM,n);
init(LM,n);
init(m1,n);
init(m2,n);
init(m3,n);
init(m4,n);
init(m5,n);
init(m6,n);
init(m7,n);
init(m8,n);
grammar(vn,vt,s1);
int j;
equal(s,EM);
printf("*************************±*****************************\n");
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",EM[i][j]);
printf("\n");
}
printf("**************************first****************************\n");
first(s,m2);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m2[i][j]);
printf("\n");
}
printf("**************************last****************************\n");
last(s,m3);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m3[i][j]);
printf("\n");
}
printf("**************************first+****************************\n");
warchall(m2,n);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
m1[i][j]=m2[i][j];
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m2[i][j]);
printf("\n");
}
printf("**************************(first*)****************************\n");
first1(m2,n);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m2[i][j]);
printf("\n");
}
firstterm(s,m5);
printf("**************************(firstterm)****************************\n");
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m5[i][j]);
printf("\n");
}
printf("**************************(lastterm)****************************\n");
lastterm(s,m7);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",m7[i][j]);
printf("\n");
}
printf("**************************FM*****************************\n");
multi(EM,m2,m6,n);
multi(m6,m5,FM,n);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",FM[i][j]);
printf("\n");
}
printf("**************************LM*****************************\n");
warchall(m3,n);
first1(m3,n);
multi(m3,m7,m4,n);
change(m4,n);
multi(m4,EM,LM,n);
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",LM[i][j]);
printf("\n");
}
printf("**************************M*****************************\n");
equal1(s,m8);
k=requirm(m8,FM,LM,M,n);
if(k==1) goto p;
else{
printf(" ");
for(i=0;i<n;i++)
printf("%c ",s1[i]);
printf("\n");
for(i=0;i<n;i++)
{ printf("%c ",s1[i]);
for(j=0;j<n;j++)
printf("%d ",M[i][j]);
printf("\n");
}
printf("\n********************************************************\n");
printf("输入待检查的字符串以#号结束\n");
i=0;
while((c=getchar())!='\n')
{
TR[i]=c;
i++;
}
TR[i]='\0';
S[0]='#';
printf("符号栈S 关系 输入流 最左素短语\n");
i=analysis(M);
printf("*********************************************************\n");
if(i==1) printf("!!!!!!!!!!!!!!!!!OK!!!!!!!!!!!!!!!!!\n");
else
p: printf("*******************over***********************************\n");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -