www.pudn.com > SLR.rar > SLR.cpp


#include 
using 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; 
}