int i,j,k,l,m,n,ii; char sym; char input[100]; char stack[100]; int spoint=0; out(){ for(ii=0;ii<=spoint;ii++)printf("%c ",stack[ii]); for(ii=spoint+1;ii<=5;ii++)printf("%c ",' '); for(ii=1;ii<=i-1;ii++)printf("%c ",' '); for(ii=i;ii<=n;ii++)printf("%c ",input[ii]); for(ii=1;ii<=3;ii++)printf("%c ",' '); } push(char x){ spoint++; stack[spoint]=x; out(); } pop(){spoint--; out();} error(int i){printf("error number %d\n",i);} getsym(){ if(i!=0)printf("consume %c ",sym); getchar(); i++; sym=input[i]; out(); } S(){ printf("enter S"); getchar(); push('S'); if(sym=='a'){getsym(); T(); S();} else if(sym=='c')getsym(); else error(1); printf("exit from S"); getchar(); pop(); } T(){ printf("enter T"); getchar(); push('T'); if(sym=='b'){getsym(); S(); T();} else if(sym=='c')getsym(); else error(2); printf("exit from T"); getchar(); pop(); } main(){ printf("input n "); scanf("%d", &n); getchar(); for(ii=1;ii<=n;ii++)scanf("%c",&input[ii]); for(ii=1;ii<=n;ii++)printf("%c ",input[ii]); printf("\n"); getchar(); i=0; getsym(); S(); if(spoint==0)printf("accept\n"); else { error(3); printf("reject\n");} } /* error 1: a or c expected error 2: b or c expected error 3: ! expected */