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; } } }