double declaration(bool is_const) //Handle 'name = expression' //Declare a variable called "name" with initial value "expresion" { Token t = ts.get(); if (t.kind != name) error("name expected in declaration"); string var_name = t.name; Token t2 = ts.get(); if (t2.kind != '=') error("= missing in declaration of ",var_name); double d = expression(); switch (is_const) { case true: symtable.declare(var_name, d, true); break; default: if (symtable.is_declared(var_name)) symtable.set(var_name, d); else symtable.declare(var_name, d, false); } return d; }
int main() { try { sym_table.declare("pi", 3.1415926535, false); sym_table.declare("e", 2.7182818284, false); calculate(); return 0; } catch(exception& e) { cerr << e.what() << endl; return 1; } catch(...) { cerr << "exception\n"; return 2; } return 0; }
int main() { try { //Predefined names symtable.declare("pi", 3.1415926535, true); symtable.declare("e", 2.7182818284, true); calculate(); return 0; } catch (exception& e) { cerr << "error: " << e.what() << '\n'; char c; while (cin >> c && c != ';') ; return 1; } catch (...) { cerr << "unknown exception!\n"; char c; while (cin >> c && c != ';') ; return 2; } }
double declaration(Token k) // Taken from: http://www.stroustrup.com/Programming/Solutions/Ch7/e7-1.cpp // handle: name = expression // declare a variable called "name" with the initial value "expression" // k will be "let" or "con"(stant) { Token t = ts.get(); if (t.kind != name) error ("name expected in declaration"); string var_name = t.name; Token t2 = ts.get(); if (t2.kind != '=') error("= missing in declaration of ", var_name); double d = expression(); sym_table.declare(var_name,d,k.kind==let); return d; }