★ Evaluating mathematical expressions without EXECUTE
posted Tue 24 Jan 2012 by Michael Galloy under IDLSometimes it is useful to evaluate a mathematical expression that is defined by the user at runtime. This is pretty easy to do using the EXECUTE
routine, but EXECUTE
is not allowed in applications running in the Virtual Machine. What to do?
This issue has been a problem for me before so I wrote a simple arithmetic parser (docs).
Evaluates a mathematical expression using the basic arithmetic operators +
, -
, *
, /
, and ^
along with parentheses for grouping and simple function calls of a single variable.
This routine is implemented with a recursive descent parser and does not use EXECUTE
, so it is safe to use in the Virtual Machine.
For example, simple arithmetic expressions can be evaluated:
IDL> print, mg_evalexpr('1 + 2 + 3', error=error), error
6 0
Note that the ERROR
keyword returns whether there was an error in evaluating the expression. Expressions can also take variables, if their values are provided via a structure or hash-like object:
IDL> print, mg_evalexpr('exp(i * pi)', { pi: !dpi, i: complex(0, 1) })
( -1.0000000, 1.2246468e-16)
“Hash-like” here means that the object implements a hasKey
method and subscripting via brackets like the IDL 8.0 Hash
class.