www.pudn.com > ruan.rar > a.cpp


#include  
#include  
#include  
#include  
#include  
#define MaxSize 50 
 
void Advance(int & p)//过程 ADVANCE 
{ 
	p++; 
} 
char Sym(char ST[],int p)//函数过程 SYM  
{ 
	return ST[p]; 
} 
void E(char ST[],bool & TZ,int & p); 
 
void F(char ST[],bool & TZ,int & p)//F过程 
{                       
	char sym=Sym(ST,p); 
	if(sym>='A' && sym<='Z') 
		Advance(p); 
	else 
	{ 
		if(sym!='(') 
		{ 
			cout << "ERROR!" << endl; 
			TZ=1; 
		} 
		else 
		{ 
			Advance(p); 
			E(ST,TZ,p); 
			if(Sym(ST,p)!=')') 
			{ 
				cout << "ERROR!" << endl; 
				TZ=1; 
			} 
			else Advance(p); 
		} 
	} 
} 
 
void T(char ST[],bool & TZ,int & p)//T过程 
{ 
	F(ST,TZ,p); 
	char sym; 
	while(true) 
	{ 
		sym=Sym(ST,p); 
		if(sym=='*' || sym=='/') 
		{	 
			Advance(p); 
			F(ST,TZ,p); 
		} 
		else break; 
	} 
} 
void E(char ST[],bool & SZ,int & p)//E过程 
{ 
	char sym; 
	while(true)		 
	{ 
		T(ST,SZ,p); 
		sym=Sym(ST,p); 
		if(sym=='+' || sym=='-') 
			Advance(p); 
		else break; 
	} 
} 
void main() 
{ 
	bool TZ = false; 
	int p; 
 
	char ST[MaxSize]; 
	while(true)//zc过程 
	{ 
		printf("***************************语法分析器*************************\n\n\n"); 
        printf("INPUT EXPRESSION:"); 
		cin >> ST; 
		p=0; 
		E(ST,TZ,p); 
		if(Sym(ST,p)!='#' || TZ==true) 
			cout << "ERROR, AGAIN!" << endl; 
		else  
		{ 
			cout << "RIGHT, AGAIN!" << endl; 
			TZ=false; 
		} 
	} 
}