www.pudn.com > SLR.rar > SLR.cpp
#includeusing namespace std; struct seqstack { char data[50]; int top; }; struct occurlist1 { char x; char y; char z[3]; }; struct actionlist1 { char x; char y; char nestzhutai[2]; }; actionlist1 action[46]; seqstack *in,*zhuangtai,*wenfa; occurlist1 occ[7]; int showbiao() { for(int i=0;i<49;i++) { cout< top=0; s->data[s->top]='$'; return 0; } /************************************************************************************************/ /************************************************************************************************/ bool EMPTY(seqstack *s) { if(s->top>=0) { return false; } else { return true; } } /************************************************************************************************/ /************************************************************************************************/ int push(seqstack *s,char c) { if(s->top==49) { printf("overflow"); } else { s->top++; s->data[s->top]=c; } return 0; } /************************************************************************************************/ /************************************************************************************************/ char pop(seqstack *s) { if(EMPTY(s)) { printf("underflow"); return NULL; } else { s->top--; return (s->data[s->top+1]); } } /************************************************************************************************/ /************************************************************************************************/ char top(seqstack *s) { if(EMPTY(s)) { printf("stack is empty"); return NULL; } else { return s->data[s->top]; } } /************************************************************************************************/ /************************************************************************************************/ int show(seqstack *s) { int i; i=s->top; while(i>=0) { cout< data[i]; i--; } return 0; } /************************************************************************************************/ /************************************************************************************************/ int creatocc() { int i,j; for(i=1;i<7;i++) { for(j=0;j<3;j++) { occ[i].z[j]='\0'; } } occ[1].x='E'; occ[1].y='1'; occ[1].z[0]='E'; occ[1].z[1]='+'; occ[1].z[2]='T'; occ[2].x='E'; occ[2].y='2'; occ[2].z[0]='T'; occ[3].x='T'; occ[3].y='3'; occ[3].z[0]='T'; occ[3].z[1]='*'; occ[3].z[2]='F'; occ[4].x='T'; occ[4].y='4'; occ[4].z[0]='F'; occ[5].x='F'; occ[5].y='5'; occ[5].z[0]='('; occ[5].z[1]='E'; occ[5].z[2]=')'; occ[6].x='F'; occ[6].y='6'; occ[6].z[0]='i'; return 0; } /************************************************************************************************/ /************************************************************************************************/ int creataction() { int i,j; for(i=1;i<46;i++) { action[i].x='\0'; action[i].y='\0'; for(j=0;j<2;j++) { action[i].nestzhutai[j]='\0'; } } action[1].x='0'; action[1].y='('; action[1].nestzhutai[0]='s'; action[1].nestzhutai[1]='4'; action[2].x='0'; action[2].y='E'; action[2].nestzhutai[0]='1'; action[3].x='0'; action[3].y='T'; action[3].nestzhutai[0]='2'; action[4].x='0'; action[4].y='F'; action[4].nestzhutai[0]='3'; action[5].x='1'; action[5].y='+'; action[5].nestzhutai[0]='s'; action[5].nestzhutai[1]='6'; action[6].x='1'; action[6].y='$'; action[6].nestzhutai[0]='a'; action[6].nestzhutai[1]='c'; action[7].x='2'; action[7].y='+'; action[7].nestzhutai[0]='r'; action[7].nestzhutai[1]='2'; action[8].x='2'; action[8].y='*'; action[8].nestzhutai[0]='s'; action[8].nestzhutai[1]='7'; action[9].x='2'; action[9].y=')'; action[9].nestzhutai[0]='r'; action[9].nestzhutai[1]='2'; action[10].x='2'; action[10].y='$'; action[10].nestzhutai[0]='r'; action[10].nestzhutai[1]='2'; action[11].x='3'; action[11].y='+'; action[11].nestzhutai[0]='r'; action[11].nestzhutai[1]='4'; action[12].x='3'; action[12].y='*'; action[12].nestzhutai[0]='r'; action[12].nestzhutai[1]='4'; action[13].x='3'; action[13].y=')'; action[13].nestzhutai[0]='r'; action[13].nestzhutai[1]='4'; action[14].x='3'; action[14].y='$'; action[14].nestzhutai[0]='r'; action[14].nestzhutai[1]='4'; action[15].x='4'; action[15].y='i'; action[15].nestzhutai[0]='s'; action[15].nestzhutai[1]='5'; action[16].x='4'; action[16].y='('; action[16].nestzhutai[0]='s'; action[16].nestzhutai[1]='4'; action[17].x='4'; action[17].y='E'; action[17].nestzhutai[0]='8'; action[18].x='4'; action[18].y='T'; action[18].nestzhutai[0]='2'; action[19].x='4'; action[19].y='F'; action[19].nestzhutai[0]='3'; action[20].x='5'; action[20].y='+'; action[20].nestzhutai[0]='r'; action[20].nestzhutai[1]='6'; action[21].x='5'; action[21].y='*'; action[21].nestzhutai[0]='r'; action[21].nestzhutai[1]='6'; action[22].x='5'; action[22].y=')'; action[22].nestzhutai[0]='r'; action[22].nestzhutai[1]='5'; action[23].x='5'; action[23].y='$'; action[23].nestzhutai[0]='r'; action[23].nestzhutai[1]='6'; action[24].x='6'; action[24].y='i'; action[24].nestzhutai[0]='s'; action[24].nestzhutai[1]='5'; action[25].x='6'; action[25].y='('; action[25].nestzhutai[0]='s'; action[25].nestzhutai[1]='4'; action[26].x='6'; action[26].y='T'; action[26].nestzhutai[0]='9'; action[27].x='6'; action[27].y='F'; action[27].nestzhutai[0]='3'; action[28].x='7'; action[28].y='i'; action[28].nestzhutai[0]='s'; action[28].nestzhutai[1]='5'; action[29].x='7'; action[29].y='('; action[29].nestzhutai[0]='s'; action[29].nestzhutai[1]='4'; action[30].x='7'; action[30].y='F'; action[30].nestzhutai[0]='@'; action[31].x='8'; action[31].y='+'; action[31].nestzhutai[0]='s'; action[31].nestzhutai[1]='6'; action[32].x='8'; action[32].y=')'; action[32].nestzhutai[0]='s'; action[32].nestzhutai[1]='&'; action[33].x='9'; action[33].y='+'; action[33].nestzhutai[0]='r'; action[33].nestzhutai[1]='1'; action[34].x='9'; action[34].y='*'; action[34].nestzhutai[0]='s'; action[34].nestzhutai[1]='7'; action[35].x='9'; action[35].y=')'; action[35].nestzhutai[0]='r'; action[35].nestzhutai[1]='1'; action[36].x='9'; action[36].y='$'; action[36].nestzhutai[0]='r'; action[36].nestzhutai[1]='1'; action[37].x='@';///////////////////////////////////10///////////////////////////////////////////////////////// action[37].y='+'; action[37].nestzhutai[0]='r'; action[37].nestzhutai[1]='3'; action[38].x='@'; action[38].y='*'; action[38].nestzhutai[0]='r'; action[38].nestzhutai[1]='3'; action[39].x='@'; action[39].y=')'; action[39].nestzhutai[0]='r'; action[39].nestzhutai[1]='3'; action[40].x='@'; action[40].y='$'; action[40].nestzhutai[0]='r'; action[40].nestzhutai[1]='3'; action[41].x='&';////////////////////////////////////11/////////////////////////////////////////////////////// action[41].y='+'; action[41].nestzhutai[0]='r'; action[41].nestzhutai[1]='5'; action[42].x='&'; action[42].y='*'; action[42].nestzhutai[0]='r'; action[42].nestzhutai[1]='5'; action[43].x='&'; action[43].y=')'; action[43].nestzhutai[0]='r'; action[43].nestzhutai[1]='5'; action[44].x='&'; action[44].y='$'; action[44].nestzhutai[0]='r'; action[44].nestzhutai[1]='5'; action[45].x='0'; action[45].y='i'; action[45].nestzhutai[0]='s'; action[45].nestzhutai[1]='5'; return 0; } /************************************************************************************************/ /************************************************************************************************/ int main() { char a[50],zifu; char b,c='\0',f; char a1[2],a2[2]; int i,j,n,m,jishu,q; creataction(); creatocc(); in=new seqstack; zhuangtai=new seqstack; wenfa=new seqstack; SETNULL(in); SETNULL(zhuangtai); SETNULL(wenfa); cout<<"input:(+'#')"< >zifu; if(zifu=='#') { break; } else { a[i]=zifu; } } j=i-1; for(j=i-1;j>=0;j--) { push(in,a[j]); } push(zhuangtai,'0'); for(i=0;i<50;i++) { show(zhuangtai); cout<<"\t\t"; show(in); cout< top=wenfa->top-jishu; zhuangtai->top=zhuangtai->top-jishu; f=top(zhuangtai); push(wenfa,occ[n].x); for(j=0;j<45;j++) { if(f==action[j].x&&occ[n].x==action[j].y) { push(zhuangtai,action[j].nestzhutai[0]); q=1; break; } } if(q=1) { break; } } } } } return 0; }