www.pudn.com > suanfuyouxian.rar > suanfuyouxian.cpp
#includeusing 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<<" "< "<