www.pudn.com > calc5.zip > main.cpp
//------------------------------------ // parse.cpp // (c) Bartosz Milewski, 1994 //------------------------------------ #include "scan.h" #include "parse.h" #include "symtab.h" #include "store.h" #include "funtab.h" #include "params.h" #include#include using std::cout; using std::cerr; using std::cin; using std::endl; class bad_alloc {}; int NewHandler (size_t size) { throw bad_alloc (); return 0; } void main () { _set_new_handler (NewHandler); try { // Notice all these local objects. // A clear sign that there should be // a top level object, say, the Calculator. // Back to the drawing board! char buf [maxBuf+1]; Status status; SymbolTable symTab; Function::Table funTab (symTab); Store store (symTab); cerr << "\nEnter empty line to quit\n"; do { cerr << "> "; // prompt cin.getline (buf, maxBuf+1); if (strlen (buf) == maxBuf) { cerr << "Error: Input buffer overflow\n"; status = stError; break; } Scanner scanner (buf); if (!scanner.IsEmpty ()) { Parser parser (scanner, store, funTab, symTab); status = parser.Parse (); if (status == stOk) { double result = parser.Calculate (); cout << result << endl; } else { cerr << "Syntax error.\n"; } } else { break; } } while (status != stQuit); } catch (bad_alloc) { cerr << "Out of memory!\n"; } catch (...) { cerr << "Internal error\n"; } }