www.pudn.com > suanfuyouxian.rar > suanfuyouxian.cpp


#include 
using namespace std; 
int tpd1(char a) 
{ 
    int x; 
	char T[8]={'+','-','*','/','(',')','i','#'}; 
    for(x=0;x<8;x++) 
    {  
         if(a==T[x]) 
         { 
              return x; 
              break; 
         } 
    } 
	if(x==8) 
	{ 
		return 0; 
	} 
} 
char tpd2(char a) 
{ 
    char T[8]={'+','-','*','/','(',')','i','#'}; 
    for(int x=0;x<8;x++) 
    {  
         if(a==T[x]) 
         { 
              break; 
         } 
    } 
    if(x==8) 
    { 
         return 'N'; 
    } 
    else 
    { 
         return 'Y'; 
    } 
} 
char npd(char a) 
{ 
    char N[3]={'E','T','F'}; 
    for(int x=0;x<3;x++) 
    {  
         if(a==N[x]) 
         { 
              break; 
         } 
    } 
    if(x==3) 
    { 
         return 'N'; 
    } 
    else 
    { 
         return 'Y'; 
    } 
} 
int pdyx(int i,int j) 
{ 
    char T[8]={'+','-','*','/','(',')','i','#'}; 
    char FF[8]={"(i"}; 
    char LF[8]={")i"}; 
    char FT[8]={"*/(i"}; 
    char LT[8]={"*/)i"}; 
    char FE[8]={"+-*/(i"}; 
    char LE[8]={"+-*/)i"}; 
    switch(T[i]) 
    { 
         case '+': 
 
         case '-': 
			int m; 
            for(m=0;;m++) 
            { 
                 if(!FT[m]) 
                 { 
                      break; 
                 } 
                 if(T[j]==FT[m]) 
                 { 
                      return 1; 
                      break; 
                 } 
            } 
            break; 
         case '*': 
 
         case '/': 
			 int k; 
            for(k=0;;k++) 
            { 
                 if(!FF[k]) 
                 { 
                      break; 
                 } 
                 if(T[j]==FF[k]) 
                 { 
                      return 1; 
                      break; 
                 } 
            } 
            break; 
         case '(': 
			 int y; 
            for(y=0;;y++) 
            { 
                 if(!FE[y]) 
                 { 
                      break; 
                 } 
                 if(T[j]==FE[y]) 
                 { 
                      return 1; 
                      break; 
                 } 
            } 
            break; 
         case ')': 
            break; 
         case 'i': 
            break; 
         case '#': 
            return 1; 
            break; 
         default: 
            break; 
    } 
    switch(T[j]) 
    { 
         case '+': 
 
         case '-': 
			int t; 
            for(t=0;;t++) 
            { 
                 if(!LE[t]) 
                 { 
                      break; 
                 } 
                 if(T[i]==LE[t]) 
                 { 
                      return 2; 
                      break; 
                 } 
            } 
            break; 
         case '*': 
 
         case '/': 
			 int x; 
            for(x=0;;x++) 
            { 
                 if(!LT[x]) 
                 { 
                      break; 
                 } 
                 if(T[i]==LT[x]) 
                 { 
                      return 2; 
                      break; 
                 } 
            } 
            break; 
         case '(': 
            break; 
         case ')': 
			 int n; 
            for(n=0;;n++) 
            { 
                 if(!LE[n]) 
                 { 
                      break; 
                 } 
                 if(T[i]==LE[n]) 
                 { 
                      return 2; 
                      break; 
                 } 
            } 
            break; 
         case 'i': 
            break; 
         case '#': 
            return 2; 
            break; 
         default: 
            break; 
    } 
} 
 
void main() 
{ 
    char a[20]; 
    char T[8]={'+','-','*','/','(',')','i','#'}; 
    int jz[8][8];//3代表优先级相同,2代表前者优先级高于后者,1代表前者低于后者 
    cout<<"根据F-->(E)|i可知\nFIRSTVT(F)={(,i}   LASTVT(F)={),i}\n根据T-->T*F|T/F|F可知\nFIRSTVT(T)={*,/,(,i}   LASTVT(F)={*,/,),i}\n根据E-->E+T|E-T|T可知\nFIRSTVT(E)={+,-,*,/,(,i}   LASTVT(E)={+,-,*,/,),i}\n\n\n"<  "; 
                        break; 
                 case 3: 
                        cout<<"  =  "; 
                        break; 
                default: 
                        cout<<"     "; 
                        break; 
            } 
        } 
        cout<>a; 
	cout<<"\n\n"<9) 
		{ 
			cout<<"   "<      "<