Evaluate a mathematical expression in a string.
More...
#include <shunting_yard.h>
This is based on Brandon Amos' code at https://github.com/bamos/cpp-expression-parser in turn based on Jesse Brown's code at http://www.daniweb.com/software-development/cpp/code/427500/calculator-using-shunting-yard-algorithm .
The original code has been modified for use in O2scl .
- Idea for Future:
- Add functions atan2, cot, csc, ceil, floor, int, max, min, and maybe if?
- Warning
- The nothrow() functions are a naive attempt at more detailed error handling than Amos' original code. I have tried to make sure they don't create any memory leaks, but I have not fully tested this.
Definition at line 119 of file shunting_yard.h.
|
|
| calculator () |
| | Create an empty calculator object.
|
| |
| | calculator (const char *expr, std::map< std::string, double > *vars=0, bool debug=false, std::map< std::string, int > opPrec=opPrecedence) |
| | Compile expression expr using variables specified in vars. More...
|
| |
|
void | compile (const char *expr, std::map< std::string, double > *vars=0, bool debug=false, std::map< std::string, int > opPrec=opPrecedence) |
| | Compile expression expr using variables specified in vars and return an integer to indicate success or failure.
|
| |
|
int | compile_nothrow (const char *expr, std::map< std::string, double > *vars=0, bool debug=false, std::map< std::string, int > opPrec=opPrecedence) |
| | Compile expression expr using variables specified in vars and return an integer to indicate success or failure.
|
| |
| double | eval (std::map< std::string, double > *vars=0) |
| | Evalate the previously compiled expression using variables specified in vars. More...
|
| |
| int | eval_nothrow (std::map< std::string, double > *vars, double &result) |
| | Evalate the previously compiled expression using variables specified in vars. More...
|
| |
| std::string | RPN_to_string () |
| | Convert the RPN expression to a string. More...
|
| |
|
| static double | calculate (const char *expr, std::map< std::string, double > *vars=0, bool debug=false) |
| | Compile and evaluate expr using definitions in vars. More...
|
| |
|
static int | calculate_nothrow (const char *expr, std::map< std::string, double > *vars, bool debug, double &result) |
| | Compile and evaluate expr using definitions in vars and return an integer to indicate success or failure.
|
| |
|
|
static std::map< std::string, int > | buildOpPrecedence () |
| | Build the operator precedence map.
|
| |
|
static bool | isvariablechar (char c) |
| | Return true if is a variable.
|
| |
| static double | calculate (TokenQueue_t RPN, std::map< std::string, double > *vars=0) |
| | Compile and evaluate the expression in RPN using definitions in vars. More...
|
| |
| static int | calculate_nothrow (TokenQueue_t RPN, std::map< std::string, double > *vars, double &result) |
| | Compile and evaluate the expression in RPN using definitions in vars and return an integer to indicate success or failure. More...
|
| |
| static void | cleanRPN (TokenQueue_t &rpn) |
| | Empty and free memory associated with rpn. More...
|
| |
|
static TokenQueue_t | toRPN (const char *expr, std::map< std::string, double > *vars, bool debug=false, std::map< std::string, int > opPrec=opPrecedence) |
| | Convert the expression in expr to RPN.
|
| |
| static int | toRPN_nothrow (const char *expr, std::map< std::string, double > *vars, bool debug, std::map< std::string, int > opPrec, TokenQueue_t &queue2) |
| | Convert the expression in expr to RPN and return an integer to indicate success or failure. More...
|
| |
|
|
static std::map< std::string, int > | opPrecedence |
| | A map denoting operator precedence.
|
| |
◆ calculator()
| o2scl::calculator::calculator |
( |
const char * |
expr, |
|
|
std::map< std::string, double > * |
vars = 0, |
|
|
bool |
debug = false, |
|
|
std::map< std::string, int > |
opPrec = opPrecedence |
|
) |
| |
◆ calculate() [1/2]
| static double o2scl::calculator::calculate |
( |
const char * |
expr, |
|
|
std::map< std::string, double > * |
vars = 0, |
|
|
bool |
debug = false |
|
) |
| |
|
static |
◆ calculate() [2/2]
| static double o2scl::calculator::calculate |
( |
TokenQueue_t |
RPN, |
|
|
std::map< std::string, double > * |
vars = 0 |
|
) |
| |
|
staticprivate |
◆ calculate_nothrow()
| static int o2scl::calculator::calculate_nothrow |
( |
TokenQueue_t |
RPN, |
|
|
std::map< std::string, double > * |
vars, |
|
|
double & |
result |
|
) |
| |
|
staticprivate |
◆ cleanRPN()
| static void o2scl::calculator::cleanRPN |
( |
TokenQueue_t & |
rpn | ) |
|
|
staticprivate |
- Note
- This is called by the destructor to free the memory in RPN .
◆ eval()
| double o2scl::calculator::eval |
( |
std::map< std::string, double > * |
vars = 0 | ) |
|
◆ eval_nothrow()
| int o2scl::calculator::eval_nothrow |
( |
std::map< std::string, double > * |
vars, |
|
|
double & |
result |
|
) |
| |
◆ RPN_to_string()
| std::string o2scl::calculator::RPN_to_string |
( |
| ) |
|
- Note
- This is mostly useful for debugging
◆ toRPN_nothrow()
| static int o2scl::calculator::toRPN_nothrow |
( |
const char * |
expr, |
|
|
std::map< std::string, double > * |
vars, |
|
|
bool |
debug, |
|
|
std::map< std::string, int > |
opPrec, |
|
|
TokenQueue_t & |
queue2 |
|
) |
| |
|
staticprivate |
The documentation for this class was generated from the following file: