A class for dynamically evaluating simple numeric expressions. More...
Classes  
class  Scope 
When evaluating an Expression object, this class is used to resolve symbols and perform functions that the expression uses. More...  
struct  Symbol 
Represents a symbol that is used in an Expression. More...  
Public Types  
enum  Type { constantType, functionType, operatorType, symbolType } 
Expression type. More...  
Public Member Functions  
Expression ()  
Creates a simple expression with a value of 0.  
~Expression ()  
Destructor.  
Expression (const Expression &)  
Creates a copy of an expression.  
Expression &  operator= (const Expression &) 
Copies another expression.  
Expression (double constant)  
Creates a simple expression with a specified constant value.  
Expression (const String &stringToParse, String &parseError)  
Attempts to create an expression by parsing a string.  
String  toString () const 
Returns a string version of the expression.  
Expression  operator+ (const Expression &) const 
Returns an expression which is an addition operation of two existing expressions.  
Expression  operator (const Expression &) const 
Returns an expression which is a subtraction operation of two existing expressions.  
Expression  operator* (const Expression &) const 
Returns an expression which is a multiplication operation of two existing expressions.  
Expression  operator/ (const Expression &) const 
Returns an expression which is a division operation of two existing expressions.  
Expression  operator () const 
Returns an expression which performs a negation operation on an existing expression.  
double  evaluate () const 
Evaluates this expression, without using a Scope.  
double  evaluate (const Scope &scope) const 
Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.  
double  evaluate (const Scope &scope, String &evaluationError) const 
Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.  
Expression  adjustedToGiveNewResult (double targetValue, const Scope &scope) const 
Attempts to return an expression which is a copy of this one, but with a constant adjusted to make the expression resolve to a target value.  
Expression  withRenamedSymbol (const Symbol &oldSymbol, const String &newName, const Scope &scope) const 
Returns a copy of this expression in which all instances of a given symbol have been renamed.  
bool  referencesSymbol (const Symbol &symbol, const Scope &scope) const 
Returns true if this expression makes use of the specified symbol.  
bool  usesAnySymbols () const 
Returns true if this expression contains any symbols.  
void  findReferencedSymbols (Array< Symbol > &results, const Scope &scope) const 
Returns a list of all symbols that may be needed to resolve this expression in the given scope.  
Type  getType () const noexcept 
Returns the type of this expression.  
String  getSymbolOrFunction () const 
If this expression is a symbol, function or operator, this returns its identifier.  
int  getNumInputs () const 
Returns the number of inputs to this expression.  
Expression  getInput (int index) const 
Retrieves one of the inputs to this expression.  
Static Public Member Functions  
static Expression  symbol (const String &symbol) 
Returns an Expression which is an identifier reference.  
static Expression  function (const String &functionName, const Array< Expression > ¶meters) 
Returns an Expression which is a function call.  
static Expression  parse (String::CharPointerType &stringToParse, String &parseError) 
Returns an Expression which parses a string from a character pointer, and updates the pointer to indicate where it finished.  
A class for dynamically evaluating simple numeric expressions.
This class can parse a simple Cstyle string expression involving floating point numbers, named symbols and functions. The basic arithmetic operations of +, , *, / are supported, as well as parentheses, and any alphanumeric identifiers are assumed to be named symbols which will be resolved when the expression is evaluated.
Expressions which use identifiers and functions require a subclass of Expression::Scope to be supplied when evaluating them, and this object is expected to be able to resolve the symbol names and perform the functions that are used.
enum Expression::Type 
Expression type.
Expression::Expression  (  ) 
Creates a simple expression with a value of 0.
Expression::~Expression  (  ) 
Destructor.
Expression::Expression  (  const Expression &  ) 
Creates a copy of an expression.

explicit 
Creates a simple expression with a specified constant value.
Attempts to create an expression by parsing a string.
Any errors are returned in the parseError argument provided.
Expression& Expression::operator=  (  const Expression &  ) 
Copies another expression.
String Expression::toString  (  )  const 
Returns a string version of the expression.
Expression Expression::operator+  (  const Expression &  )  const 
Returns an expression which is an addition operation of two existing expressions.
Expression Expression::operator  (  const Expression &  )  const 
Returns an expression which is a subtraction operation of two existing expressions.
Expression Expression::operator*  (  const Expression &  )  const 
Returns an expression which is a multiplication operation of two existing expressions.
Expression Expression::operator/  (  const Expression &  )  const 
Returns an expression which is a division operation of two existing expressions.
Expression Expression::operator  (  )  const 
Returns an expression which performs a negation operation on an existing expression.

static 
Returns an Expression which is an identifier reference.

static 
Returns an Expression which is a function call.

static 
Returns an Expression which parses a string from a character pointer, and updates the pointer to indicate where it finished.
The pointer is incremented so that on return, it indicates the character that follows the end of the expression that was parsed.
If there's a syntax error in parsing, the parseError argument will be set to a description of the problem.
double Expression::evaluate  (  )  const 
double Expression::evaluate  (  const Scope &  scope  )  const 
Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.
To find out about any errors during evaluation, use the other version of this method which takes a String parameter.
Evaluates this expression, providing a scope that should be able to evaluate any symbols or functions that it uses.
Expression Expression::adjustedToGiveNewResult  (  double  targetValue, 
const Scope &  scope  
)  const 
Attempts to return an expression which is a copy of this one, but with a constant adjusted to make the expression resolve to a target value.
E.g. if the expression is "x + 10" and x is 5, then asking for a target value of 8 will return the expression "x + 3". Obviously some expressions can't be reversed in this way, in which case they might just be adjusted by adding a constant to the original expression.
Expression::EvaluationError 
Expression Expression::withRenamedSymbol  (  const Symbol &  oldSymbol, 
const String &  newName,  
const Scope &  scope  
)  const 
Returns a copy of this expression in which all instances of a given symbol have been renamed.
Returns true if this expression makes use of the specified symbol.
If a suitable scope is supplied, the search will dereference and recursively check all symbols, so that it can be determined whether this expression relies on the given symbol at any level in its evaluation. If the scope parameter is null, this just checks whether the expression contains any direct references to the symbol.
Expression::EvaluationError 
bool Expression::usesAnySymbols  (  )  const 
Returns true if this expression contains any symbols.
Returns a list of all symbols that may be needed to resolve this expression in the given scope.

noexcept 
Returns the type of this expression.
String Expression::getSymbolOrFunction  (  )  const 
If this expression is a symbol, function or operator, this returns its identifier.
int Expression::getNumInputs  (  )  const 
Returns the number of inputs to this expression.
Expression Expression::getInput  (  int  index  )  const 
Retrieves one of the inputs to this expression.