Calculator.h revision 10447
113540Sandrea.mondelli@ucf.edu#ifndef __LIBUTIL_CALCULATOR_H__ 211398SN/A#define __LIBUTIL_CALCULATOR_H__ 311398SN/A 411398SN/A#include <sstream> 511398SN/A 611398SN/A#include "String.h" 711398SN/A#include "Map.h" 811398SN/A#include "Assert.h" 911398SN/A 1011398SN/Anamespace LibUtil 1111398SN/A{ 1211398SN/A using std::istringstream; 1311398SN/A 1411398SN/A /* 1511397SN/A * program: 1611397SN/A * END // END is end-of-input 1711397SN/A * expr_list END 1811397SN/A * 1911397SN/A * expr_list: 2011397SN/A * expression SEP expr_list // SEP is semicolon 2111397SN/A * expression 2211397SN/A * print expression 2311397SN/A * print STRING 2411397SN/A * print STRING expression 2511397SN/A * print STRING expression SEP expr_list 2611397SN/A * 2711397SN/A * 2811397SN/A * expression: 2911397SN/A * expression + term 3011397SN/A * expression - term 3111397SN/A * term 3211397SN/A * 3311397SN/A * term: 3411397SN/A * term / primary 3511397SN/A * term * primary 3611397SN/A * primary 3711397SN/A * 3811397SN/A * primary: 3911397SN/A * NUMBER 4011397SN/A * NAME 4111397SN/A * NAME = expression 4211398SN/A * NAME string expression // NAME is print 4311397SN/A * - primary 448225SN/A * ( expression ) 458225SN/A * 468225SN/A * string: 478225SN/A * 488225SN/A **/ 498225SN/A 508225SN/A class Calculator 518225SN/A { 528225SN/A protected: 538225SN/A enum Token 548225SN/A { 558225SN/A NAME, NAME2, NUMBER, STRING, END, 568225SN/A PLUS = '+', MINUS = '-', MUL = '*', DIV = '/', 578225SN/A SEP = ';', ASSIGN = '=', LP = '(', RP = ')' 588225SN/A }; 598225SN/A 608225SN/A public: 618225SN/A Calculator(); 628225SN/A virtual ~Calculator(); 638225SN/A 648225SN/A public: 658225SN/A void reset(); 668225SN/A void evaluateString(const String& str_); 678225SN/A 688225SN/A protected: 698225SN/A Token getToken(istringstream& ist_); 708225SN/A double prim(istringstream& ist_, bool is_get_); 718225SN/A double term(istringstream& ist_, bool is_get_); 728225SN/A double expr(istringstream& ist_, bool is_get_); 738225SN/A virtual double getEnvVar(const String& var_name_) const; 748225SN/A 758225SN/A protected: 768225SN/A String m_reserved_chars_; 778225SN/A Map<double> m_var_; 788225SN/A 798225SN/A Token m_curr_token_; 808225SN/A double m_value_number_; 818225SN/A String m_value_string_; 828225SN/A }; // class Calculator 838225SN/A} // namespace LibUtil 848225SN/A 858225SN/A#endif // __LIBUTIL_CALCULATOR_H__ 868225SN/A 878225SN/A