#include<bits/stdc++.h>
#define N 10
char vt[10];
char vn[10];
struct fa
{
char a,b,c;
};
fa wenfa[100];
void shuru3(int o)
{
int i;
for(i=0;i<o;i++)
{
scanf("\n%c%c%c",&wenfa[i].a,&wenfa[i].b,&wenfa[i].c);
if(wenfa[i].c=='#') wenfa[i].c='Z';
}
}
int where1(char x)
{
int i=0;
while(vt[i]!=x)
{
i++;
}
return i+1;
}
int where2(char x)
{
int i=0;
while(vn[i]!=x)
{
i++;
}
return i+1;
}
int main()
{
int o,i,j,m,n,k,l;//o这是文法数目; n是非终结符数目。m是终结符数目;
char liu[10][10],g,q;
printf("请输入非终结符:\n");
for(i=0;;i++)
{
vt[i]=getchar();
if(vt[i]=='\n')
{ n=i+1;break;}
}
printf("请输入终结符:\n");
for(i=0;;i++)
{
vn[i]=getchar();
if(vn[i]=='\n')
{m=i+1;break;}
}
printf("你有几条文法:\n");
scanf("%d",&o);
printf("请输入你的文法:\n");
shuru3(o);
//vt[n]='Z';
//printf("%d %d",n,m);
for(i=1;i<=m;i++)
{
//printf("%5c",vn[i-1]);
liu[0][i]=vn[i-1];
}
for(i=1;i<=n;i++)
{
liu[i][0]=vt[i-1];
//printf("%c",vt[i-1]);
// printf("\n");
}
for(j=0;j<=o;j++)
{
liu[0][0]=' ';
// printf("%c %c %c\n",wenfa[j].a,wenfa[j].b,wenfa[j].c);
k=where1(wenfa[j].a);
l=where2(wenfa[j].b);
g=wenfa[j].c;
liu[k][l]= g;
}
liu[4][1]=' ';
liu[4][2]=' ';
for(i=0;i<=n;i++)
{
for(j=0;j<=m;j++)
{
printf("%4c",liu[i][j]);
}
printf("\n");
}
return 0;
}
/*
SAB
ab
6
SaA
SbB
AaA
AbB
BbA
Ba#
*/