|
TC++PL上的计算器代码(1)
//6.1 #include<iostream>//I/O #include<string> //字符串 #include<map> //映射 #include<cctype>//isatpha() using namespace std; int no_of_errors; double error(const string& s) { no_of_errors++; cerr<<"error:"; cerr<<s; cerr<<"/n"; return 1; } enum Token_value { NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*', DIV='/',PRINT=';',ASSING='=',LP='(',RP=')' }; Token_value curr_tok=PRINT; double number_value; string string_value; Token_value get_token() { char ch; do{//跳过空白,除了'\n' if(!cin.get(ch))return curr_tok=END; }while(ch!='\n'&&isspace(ch)); switch(ch){ case ';': case '\n': return curr_tok=PRINT; 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); cin>>number_value; return curr_tok=NUMBER; default: //NAME,NAME=,或者错误 if(isalpha(ch)){ string_value=ch; while(cin.get(ch)&&isalnum(ch)) string_value.push_back(ch); cin.putback(ch); return curr_tok=NAME; } error("bad token"); return curr_tok=PRINT; } } map<string,double> table; double eXPr(bool);
|