diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2014-10-11 15:02:23 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2014-10-11 15:02:23 -0500 |
commit | e8ed7b1d1b5bef31e9874f679a5797c2e00d06f1 (patch) | |
tree | 421c9c50377aa664958685914f5504c4c019e21f /ext/dsent/libutil/Calculator.h | |
parent | a098fad174d8559037602b248b8e6f7f46bfebbb (diff) | |
download | gem5-e8ed7b1d1b5bef31e9874f679a5797c2e00d06f1.tar.xz |
ext: add the source code for DSENT
This patch adds a tool called DSENT to the ext/ directory. DSENT
is a tool that models power and area for on-chip networks. The next
patch adds a script for using the tool.
Diffstat (limited to 'ext/dsent/libutil/Calculator.h')
-rw-r--r-- | ext/dsent/libutil/Calculator.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/ext/dsent/libutil/Calculator.h b/ext/dsent/libutil/Calculator.h new file mode 100644 index 000000000..4fcdf471f --- /dev/null +++ b/ext/dsent/libutil/Calculator.h @@ -0,0 +1,86 @@ +#ifndef __LIBUTIL_CALCULATOR_H__ +#define __LIBUTIL_CALCULATOR_H__ + +#include <sstream> + +#include "String.h" +#include "Map.h" +#include "Assert.h" + +namespace LibUtil +{ + using std::istringstream; + + /* + * program: + * END // END is end-of-input + * expr_list END + * + * expr_list: + * expression SEP expr_list // SEP is semicolon + * expression + * print expression + * print STRING + * print STRING expression + * print STRING expression SEP expr_list + * + * + * expression: + * expression + term + * expression - term + * term + * + * term: + * term / primary + * term * primary + * primary + * + * primary: + * NUMBER + * NAME + * NAME = expression + * NAME string expression // NAME is print + * - primary + * ( expression ) + * + * string: + * + **/ + + class Calculator + { + protected: + enum Token + { + NAME, NAME2, NUMBER, STRING, END, + PLUS = '+', MINUS = '-', MUL = '*', DIV = '/', + SEP = ';', ASSIGN = '=', LP = '(', RP = ')' + }; + + public: + Calculator(); + virtual ~Calculator(); + + public: + void reset(); + void evaluateString(const String& str_); + + protected: + Token getToken(istringstream& ist_); + double prim(istringstream& ist_, bool is_get_); + double term(istringstream& ist_, bool is_get_); + double expr(istringstream& ist_, bool is_get_); + virtual double getEnvVar(const String& var_name_) const; + + protected: + String m_reserved_chars_; + Map<double> m_var_; + + Token m_curr_token_; + double m_value_number_; + String m_value_string_; + }; // class Calculator +} // namespace LibUtil + +#endif // __LIBUTIL_CALCULATOR_H__ + |