

 
Manual Reference Pages  EVAL (3)
NAME
eval  evaluate simple arithmetic expressions
CONTENTS
Synopsis
Description
Returns
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
&^+*/().OperatorPrecedence
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 nonnumeric 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).


libmba0.9.1  EVAL (3m)  Apr 29, 2005 
Visit the GSP FreeBSD Man Page Interface. Output converted with manServer 1.07. 