文档详情

c设计一个简单计算器.doc

发布:2017-06-07约2.58千字共6页下载文档
文本预览下载声明
执行代码 c++ #include iostream.h #include string using namespace std; enum Token_value{ NAME, NUMBER, END, PLUS = +, MINUS = -,MUL = *,DIV = /, PRINT = ;,ASSIGN = =,LP = (,RP = ) }; Token_value curr_tok = PRINT; // fuction list////////////////////////////////////// double expr(bool get); double term(bool get); double prim(bool get); Token_value get_token(); double error(const string s); ////////////////////////////////////////////////////////// double expr(bool get) //plus and minus { double left = term(get); for(;;) { switch(curr_tok){ case PLUS: left+=term(true); break; case MINUS: left-=term(true); break; default: return left; } } } double term(bool get) // multiply and divide { double left = prim(get); for(;;) { switch(curr_tok){ case MUL: left*=prim(true); break; case DIV: if(double d = prim(true)){ // no zero!! left/= d; break; } return error(divide by zero!!\n); default : return left; } } } double number_value; double string_value; double prim(bool get) { if(get) get_token(); switch(curr_tok){ case NUMBER: { double v = number_value; get_token(); return v; } case NAME: { double v; //double v = table[string_value]; //this table reserved the name mapped with variable //now we dont use it! if(get_token()==ASSIGN) v = expr(true); return v; } case MINUS: // negative { return -prim(true); } case LP: { double e = expr(true); if(curr_tok!=RP)return error()expected); get_token(); // absorb ) return e; } default: return error(primary expected); // no primary } } Token_value get_token() { char ch =0; cinch; switch(ch){ case 0: return curr_tok=END; //return and assignment case ;: case *: case /: case +: case -: case (: case ): case =: return curr_tok = Token_value(ch); case 0:case 1:case 2:case 3:case 4: case 5:case 6:case 7:case 8:case 9: case .: cin.putback(ch); cinnumber_value; return curr_tok = NUMBER; default: if(isalpha(ch)) { cin.putback(ch); cinstring_value; retu
显示全部
相似文档