www.pudn.com > WHLE.rar > while.cpp


#include 
#include 
#include 
 
#define  buf 20 
#define   MAXBUF 255 
 
typedef struct Token 
{ 
	int label; 
	char name[buf]; 
	int code; 
}Token; 
 
typedef struct Symbol_i 
{ 
	int symbol_i; 
	int state; 
}Symbol_i; 
 
int Getsymbol(); 
void ERROR(); 
void S();           //S->while (B) S | i=E 
void B();           //B->E relop E 
void relop();       //relop->< | = | > 
void E();           //E->(E)F | iF | nF 
void F(int A);           //F->+EF | -EF | *EF | /EF | ε 
void F(); 
 
char sym,ch; 
int symbol_L=0,symbol_L1=0,symbol_L2=0,symbol_L3=0,symbol_L4=0; 
int l,l1,l2,l3,l4; 
int L_i=0,S_i=0,B_i=0,E_i=0,F_i=0,relop_i=0,i_i=0,n_i=0; 
int k=0; 
int re,n=0,t=0; 
int i1=0,i2=0,i3=0,i4=0; 
char *wh="while"; 
Token token1[MAXBUF],token2[MAXBUF]; 
Symbol_i L[MAXBUF],L1[MAXBUF],L2[MAXBUF],L3[MAXBUF],L4[MAXBUF]; 
 
FILE *input; 
FILE *output; 
 
int strcmp(char *s,char *t) 
{ 
	for(;*s==*t;s++,t++) 
		if(*s==0) return 0; 
	return 1; 
} 
 
void main() 
{ 
	if((input=fopen("input.txt","rt"))==NULL) 
		printf("cannot open input file \n"); 
	if((output=fopen("output.txt","wt+"))==NULL) 
		printf("cannot open output file\n"); 
 
	for(int i=0;i='a'&&sym<='z')||(sym>='A'&&sym<='Z')) 
		{ 
			int h1=0; 
		    while((sym>='a'&&sym<='z')||(sym>='A'&&sym<='Z')||sym=='_'||(sym>='0'&&sym<='9')) 
			{ 
				token1[t].name[i1++]=sym; 
				n=t; 
				sym=fgetc(input); 
			} 
			h1=strcmp(token1[t].name,wh); 
			t++; 
			i3=i1; 
			i1=0; 
			if(!h1)  
				return 16;              //返回while给主程序 
			else  
				return 13;		 
		}                              //已经取了下一个字符 
		else 
			if(sym>='0'&&sym<='9') 
			{ 
				while(sym>='0'&&sym<='9') 
				{ 
					token2[t].name[i2++]=sym; 
					n=t; 
					sym=fgetc(input); 
				} 
				t++; 
				i4=i2; 
				i2=0; 
				return 12;			 
			} 
			else  
				if(sym=='/') 
				{ 
					sym=fgetc(input); 
					ch='/'; 
					return 1; 
				}					 
				else 
					if(sym=='*') 
					{ 
						sym=fgetc(input); 
						ch='*'; 
						return 2; 
					}						 
					else  
						if(sym=='-') 
						{ 
							sym=fgetc(input); 
							ch='-'; 
							return 3; 
						}						 
						else 
							if(sym=='+') 
							{ 
								sym=fgetc(input); 
								ch='+'; 
								return 4; 
							}								 
							else 
								if(sym=='(') 
								{ 
									sym=fgetc(input); 
									return 15; 
								} 
								else 
									if(sym==')') 
									{ 
										sym=fgetc(input); 
										return 14; 
									}			 
									else 
										if(sym=='<') 
										{ 
											sym=fgetc(input); 
											ch='<'; 
											return 9; 
										}		 
										else  
											if(sym=='=') 
											{ 
												sym=fgetc(input); 
												ch='='; 
												return 10; 
											}								 
											else 
												if(sym=='>') 
												{ 
													sym=fgetc(input); 
													ch='>'; 
													return 11; 
												}				 
												else 
													if(sym==';'&&k!=1) 
													{ 
														ch=';';														 
														k=1; 
														return 20; 
														break; 
													} 
													else 
														if(k!=1) 
														{ 
															sym=fgetc(input); 
														}	 
												 
	} 
	return 0; 
} 
 
void S()                                //S->while (B) S | i=E   
{ 
	re=Getsymbol();//cout<E relop E 
{ 
	cout<<"  B"<< | = | > 
{ 
	if(re==9) 
	{ 
		cout<<"  relop"<"<\n\n"); 
		        relop_i++; 
				//cout<(E)F | iF | nF 
{ 
	re=Getsymbol()		;//cout<=0) 
				{ 
					if(L[l].state==0) 
					{ 
						F(L[l].symbol_i); 
					    L[l].state=1; 
					} 
					else 
					{ 
						l--; 
					} 
				} 
			} 
			else 
				F(); 
		} 
		else 
			ERROR(); 
	} 
	else 
		if(re==12) 
		{ 
			cout<<"  E"<+EF | -EF | *EF | /EF | ε 
{ 
	if(re==4) 
	{ 
		cout<<"  F"<=0) 
			{ 
				if(l1[L1].state==0&&L1[l1].symbol_i!=-1) 
				{ 
					 
					F(L1[l1].symbol_i); 
					L1[l1].state=1; 
				} 
				else 
				{ 
					l1--; 
				} 
			} 
	} 
	else 
		if(re==3) 
		{ 
			cout<<"  F"<=0&&L2[l2].symbol_i!=-1) 
				{ 
				if(L2[l2].state==0) 
				{ 
					 
					F(L2[l2].symbol_i); 
					L2[l2].state=1; 
				} 
				else 
				{ 
					l2--; 
				} 
				} 
		} 
		else 
			if(re==2) 
			{ 
				cout<<"  F"<=0&&L3[l3].symbol_i!=-1) 
				{ 
					if(L3[l3].state==0) 
					{ 
						 
						F(L3[l3].symbol_i); 
						L3[l3].state=1; 
					} 
					else 
					{ 
						l3--; 
					} 
				} 
			} 
			else 
				if(re==1) 
				{ 
					cout<<"  F"<=0&&L4[l4].symbol_i!=-1) 
					{ 
						if(L4[l4].state==0) 
						{ 
							 
							F(L4[l4].symbol_i); 
							L4[l4].state=1; 
						} 
						else 
						{ 
							l4--; 
						} 
					} 
				} 
				else 
					if(re==20) 
					{ 
						cout<<"  F"<+EF | -EF | *EF | /EF | ε 
{ 
	if(re==4) 
	{ 
		cout<<"  F"<=0&&L1[l1].symbol_i!=-1) 
				{ 
				if(L1[l1].state==0) 
				{ 
					 
					F(L1[l1].symbol_i); 
					L1[l1].state=1; 
				} 
				else 
				{ 
					l1--; 
				} 
				} 
	} 
	else 
		if(re==3) 
		{ 
			cout<<"  F"<=0&&L2[l2].symbol_i!=-1) 
				{ 
				if(L2[l2].state==0) 
				{ 
					 
					F(L2[l2].symbol_i); 
					L2[l2].state=1; 
				} 
				else 
				{ 
					l2--; 
				} 
				} 
		} 
		else 
			if(re==2) 
			{ 
				cout<<"  F"<=0&&L3[l3].symbol_i!=-1) 
				{ 
				if(L3[l3].state==0) 
				{ 
					 
					F(L3[l3].symbol_i); 
					L3[l3].state=1; 
				} 
				else 
				{ 
					l3--; 
				} 
				} 
			} 
			else 
				if(re==1) 
				{ 
					cout<<"  F"<=0&&L4[l4].symbol_i!=-1) 
				{ 
				if(L4[l4].state==0) 
				{ 
					 
					F(L4[l4].symbol_i); 
					L4[l4].state=1; 
				} 
				else 
				{ 
					l4--; 
				} 
				} 
				} 
				else 
					{ 
						cout<<"  F"<