eval(3m)                     MBA Library Functions                    eval(3m)

       eval - evaluate simple arithmetic expressions

       #include <mba/eval.h>

       struct eval *eval_new(symlook_fn symlook, void *context);
       void eval_del(void *eval);
       int eval_expression(struct eval *eval, const tchar *expr, const tchar *elim, unsigned long *result);

       The eval(3m) module will evaluate simple arithmentic expressions
       consisting of integers, symbols for which the provided symlook_fn
       returns an integer, and any of the operators

       Operator precedence is roughly the same as the C language.

               ( )  higher
               * /
               + -
              ^ & | lower

       Prefixing integer tokens with minus '-' to indicate a negative value is
       currently not supported.

       new    The eval_new function creates and returns a new context object
              for evaluating expressions. The symlook parameter is defined as

              typedef int (*symlook_fn)(const tchar *name, unsigned long *val, void *context);

       The symlook_fn function will be called to resolve any non-numeric
       symbols and should place the value identified by name into val and
       return 0. If the symbol is not found -1 should be returned.

       The eval_new function can be used repeatedly to evaluate any number of
       expressions before being destroyed with the eval_del function. The
       context parameter is passed uninterpreted to the symlook_fn (e.g. a map

       del    The eval_del function deletes the context object eval freeing
              any memory allocated with eval_new or during the evaluation of

              The eval_expression function evaluates an infix expression like
              '(5 + 3) * N', converts it into a stack of tokens in postfix
              orientation, and reduces it with a simple translation matrix to
              produce a single integer value. The eval parameter is a context
              object created with eval_new.  The expression at expr is
              evaluated up to, but not including, the memory at elim, and
              writes the resulting value in the memory at result.

              The eval_expression function returns 0 if the expression was
              successfully reduced or -1 if an error occured in which case
              errno will be set appropriately (e.g.  ENOENT if the symlook_fn
              could not resolve a symbol).

libmba-0.9.1                     Apr 29, 2005                         eval(3m)