eval(3m) MBA Library Functions eval(3m)
NAME
eval - evaluate simple arithmetic expressions
SYNOPSIS
**#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***);**
DESCRIPTION
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*
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
follows:
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
perhaps).
**del **The **eval_del **function deletes the context object *eval *freeing
any memory allocated with *eval_new *or during the evaluation of
expressions.
**eval_expression**
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*.
RETURNS
**eval_expression**
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)