S (S-) - 3


char s[100]; char m[100]; int i,j;

 

void push(char *str) //

{ char *q=str;

while (*q !=\0) q++;

q--; while (q >=str) { m[j++] = *q--; }

m[j]=\0; }

 

char *GR[]={ S:aA, S:bSb, A:aA, A:b, NULL };

int sintax()

{

int k; char *q;

i=0; j=1; m[0]=S; //

while (1) //

{ if ((s[i]==\0) && (j==0)) break;

if ((s[i]==\0) || (j==0)) return 1;

if ((s[i]==m[j-1])) //

{ i++; j--; m[j]=\0; }

else

{ // (M)::=(I)xyz

for (k=0; GR[k]!=NULL; k++)

{

q=GR[k];

if ((*q==m[j-1]) && (*(q+2)==s[i])) break;

} //

if (GR[k]==NULL) break;

else //

{ j--; printf(: %s\n,q);

push(q+2);}

}

printf(:%s :%s \n,m, s+i);

return 0;}}