《程序设计计算器程序》由会员分享,可在线阅读,更多相关《程序设计计算器程序(4页珍藏版)》请在金锄头文库上搜索。
1、/6.1 #include/I/O #include /字符串 #include /映射 #include/isatpha()using namespace std; int no_of_errors; double error(const stringcerrnumber_value;return curr_tok=NUMBER;default: /NAME,NAME=,或者错误if(isalpha(ch)string_value=ch;while(cin.get(ch)cin.putback(ch);return curr_tok=NAME;error(“bad token“);retur
2、n curr_tok=PRINT; map table; double expr(bool); double prim(bool get) /处理初等式 if(get) get_token();switch(curr_tok)case NUMBER: /浮点常量double v=number_value;get_token();return v;case NAME:doubleif(get_token()=ASSING)v=expr(true);return v;case MINUS: /一元return -prim(true);case LP:double e=expr(true);if(c
3、urr_tok!=RP)return error(“) expected“);get_token();return e;default:return error(“primary expected“); double term(bool get) /乘和除 double left=prim(get);for(;)switch(curr_tok)case MUL:left*=prim(true);break;case DIV:if(double d=prim(true) left/=d;break;return error(“divide by 0“);default:return left;
4、double expr(bool get) /加和减 double left=term(get);for(;)switch(curr_tok)case PLUS:left+=term(true);break;case MINUS:left-=term(true);break;default:return left; int main() table“pi“=3.1415926535897932385;table“e“=2.7182818284590452354;while(cin)get_token();if(curr_tok=END)break;if(curr_tok=PRINT)continue;coutexpr(false)“n“;return no_of_errors;