Hello, I have a good thing.

xiaoxiao2021-03-06  80

This is the source code for the desktop calculator of the C programming language textbook. I spent a day before I get it. You can calculate usage, such as input: a = 2b = 42 * b 34 * (A 7) program can run the result element program as follows: // Desktop calculator application instance #include #include #include #include Using Namespace Std;

Enum token_value {name, number, end, plus = ' ', minus = '-', mul = '*', div = '/', print = ';', assign = '=', lp = '(' , Rp = ')'}; token_value curr_tok = print;

Double EXPR (BOOL GET); Double Term (Bool Get); Double Prim (Bool Get); Token_Value get_token (); Double Error (Const String & S); Map Table;

Double EXPR (BOOL GET) {Double Left = TERM (GET); // Add and subsstrack for (;;) Switch (CURR_TOK) {CASE PLUS: Left = Term (TRUE); Break; Case Minus: Left- = Term True; default: return}}

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}} Double Number_Value; String String_Value; Double Prim (Bool Get) // Handle Primaries {IF (GET) Get_Token ( ); Switch (curr_tok) {copy number: // floating-point constant {double v = number_value; get_token (); returnv;} case name: {double & v = table [string_value]; if (get_token () == assign) v = expr (true); retrn v;} case minus: // unary minus return -prim (true); case lp: {double e = expr (true); if (curr_tok! = rp) Return Error (") EPECTED "); Get_token (); // Eat ')' Return E;} default: Return Error (" Primry Expected ");}}

Token_Value get_token () {char ch = 0; CIN >> CH; switch (ch) {case 0: return curr_tok = end; case ';': case '*': case '/': case ' ': case ' - ': Case' (': case') ': Case' = ': Return Curr_tok = token_Value (CASE'0': Case'1 ': Case'2': Case'3 ': Case'4' : CASE'5 ': Case'7: Case'8': Case'8 ': Case': Case'9 ': Case'. ': Cin.putback (ch); cin >> Number_Value; Return Curr_tok = Number; Default: // name, name =, or error if (isalpha (ch)) {cin.putback (ch); cin >> string_value; return curr_tok = name;} error ("bad token"); return curr_tok = print;}} INT NO_OF_ERRORS; DOUBLE Error (const string & s) {NO_OF_ERRORS ; CERR << "error:" << S << '/ n'; return 1;}

INT main () {Table ["Pi"] = 3.1415926535897932385; table ["e"] = 2.7182818284590452354; while (cin) {get_token (); if (curr_tok == end) Break; if (curr_tok == print) Continue; COUT << EXPR (false) << '/ n';} return no_of_errors;

转载请注明原文地址:https://www.9cbs.com/read-94959.html

New Post(0)