85 lines
2.3 KiB
Plaintext
85 lines
2.3 KiB
Plaintext
|
|
|||
|
Expression evaluation library v1.0 - by lone
|
|||
|
--------------------------------------------
|
|||
|
|
|||
|
|
|||
|
How to use
|
|||
|
~~~~~~~~~~
|
|||
|
|
|||
|
|
|||
|
<20> resetVars
|
|||
|
-----------
|
|||
|
|
|||
|
void resetVars(void);
|
|||
|
|
|||
|
Resets the variables table. It is necessary to call it prior to evaluate your first
|
|||
|
expression or variables contents may be random instead of zero
|
|||
|
|
|||
|
|
|||
|
<20> evaluate
|
|||
|
----------
|
|||
|
|
|||
|
double evaluate(char *expression, int *col);
|
|||
|
|
|||
|
Evaluates an expression and returns the result.
|
|||
|
If a syntax error was encountered during the parsing of the expression, then col will
|
|||
|
be non-null and col-1 will be the index of the char which triggered the error.
|
|||
|
|
|||
|
|
|||
|
Limitations
|
|||
|
~~~~~~~~~~~
|
|||
|
|
|||
|
<20> you can set only up to 1024 variables.
|
|||
|
<20> only decimal and hexadecimal bases available
|
|||
|
<20> operators are limited to :
|
|||
|
+ - / * % & |
|
|||
|
<20> functions are limited to :
|
|||
|
sin, cos, tan,
|
|||
|
asin, acos, atan,
|
|||
|
atan2, sqr, sqrt,
|
|||
|
pow, exp, log, log10
|
|||
|
|
|||
|
|
|||
|
Some examples
|
|||
|
~~~~~~~~~~~~~
|
|||
|
|
|||
|
- assignments :
|
|||
|
|
|||
|
pi=3.1415927
|
|||
|
a=atan2(cos(pi/4),2)
|
|||
|
|
|||
|
- direct evaluations :
|
|||
|
|
|||
|
cos(pi/4)
|
|||
|
sin(45)
|
|||
|
|
|||
|
- base notations :
|
|||
|
|
|||
|
3bh (this is 0x3B)
|
|||
|
17d (this is 17)
|
|||
|
17dh (this is 0x17D)
|
|||
|
|
|||
|
|
|||
|
Adding new functions
|
|||
|
~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
The file EVAL.C contains the functions table (fnTable). Just add an entry with the name,
|
|||
|
the number of parameters, and a pointer to the function body. Implement the body and
|
|||
|
you're done. If your function ahs more than 2 parameters, you'll need to extend the grammar
|
|||
|
description file (CAL.Y) to add the FUNCTION3 (and eventually subsequent) token(s) and
|
|||
|
parsing informations.
|
|||
|
|
|||
|
SCAN.L & CAL.Y
|
|||
|
~~~~~~~~~~~~~~
|
|||
|
|
|||
|
SCAN.L contains description for the lexical analyzer generator (LEX). Use makel.bat to rebuild
|
|||
|
LEXTAB.C
|
|||
|
CAL.Y contains the LALR formal grammar description for the parser generator (BISON). Use makey.bat
|
|||
|
to rebuild CAL_TAB.C
|
|||
|
|
|||
|
|
|||
|
Compiling
|
|||
|
~~~~~~~~~
|
|||
|
|
|||
|
Just include all source files to your project, and include EVAL.H into your main source code.
|