C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html
This commit is contained in:
parent
f28fd418b5
commit
58c2b0805e
|
@ -3,7 +3,7 @@
|
||||||
* C++ Mathematical Expression Toolkit Library *
|
* C++ Mathematical Expression Toolkit Library *
|
||||||
* *
|
* *
|
||||||
* Simple Example 9 *
|
* Simple Example 9 *
|
||||||
* Author: Arash Partow (1999-2012) *
|
* Author: Arash Partow (1999-2013) *
|
||||||
* URL: http://www.partow.net/programming/exprtk/index.html *
|
* URL: http://www.partow.net/programming/exprtk/index.html *
|
||||||
* *
|
* *
|
||||||
* Copyright notice: *
|
* Copyright notice: *
|
||||||
|
|
59
readme.txt
59
readme.txt
|
@ -5,7 +5,7 @@ The C++ Mathematical Expression Toolkit Library (ExprTk) is a simple
|
||||||
to use, easy to integrate and extremely efficient mathematical
|
to use, easy to integrate and extremely efficient mathematical
|
||||||
expression parsing and evaluation engine. The parsing engine supports
|
expression parsing and evaluation engine. The parsing engine supports
|
||||||
numerous forms of functional and logic processing semantics and is
|
numerous forms of functional and logic processing semantics and is
|
||||||
very easily extendible.
|
easily extendible.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ expressions that can be parsed and evaluated using the ExprTk library.
|
||||||
(12) (x + y)3.3 + 1 / 4.5 == (x + y) * 3.3 + 1 / 4.5
|
(12) (x + y)3.3 + 1 / 4.5 == (x + y) * 3.3 + 1 / 4.5
|
||||||
(13) (x + y)z + 1.1 / 2.7 == (x + y) * z + 1.1 / 2.7
|
(13) (x + y)z + 1.1 / 2.7 == (x + y) * z + 1.1 / 2.7
|
||||||
(14) (sin(x / pi) cos(2y) + 1) == (sin(x / pi) * cos(2 * y) + 1)
|
(14) (sin(x / pi) cos(2y) + 1) == (sin(x / pi) * cos(2 * y) + 1)
|
||||||
(15) 25x^5 - 35x^4 - 15x^3 + 40x^2 - 15x + 1
|
(15) 75x^17 + 25.1x^5 - 35x^4 - 15.2x^3 + 40x^2 - 15.3x + 1
|
||||||
(16) if (avg(x,y) <= x + y, x - y, x * y) + 2.345 * pi / x
|
(16) if (avg(x,y) <= x + y, x - y, x * y) + 2.345 * pi / x
|
||||||
(17) fib_i := fib_i + (x := y + 0 * (fib_i := x + (y := fib_i)))
|
(17) fib_i := fib_i + (x := y + 0 * (fib_i := x + (y := fib_i)))
|
||||||
(18) while (x <= 100) { x := x + 1 }
|
(18) while (x <= 100) { x := x + 1 }
|
||||||
|
@ -327,9 +327,9 @@ include path (e.g: /usr/include/).
|
||||||
| [r0:r1] | The closed interval [r0,r1] of the specified string. |
|
| [r0:r1] | The closed interval [r0,r1] of the specified string. |
|
||||||
| | eg: Given a string x with a value of 'abcdefgh' then: |
|
| | eg: Given a string x with a value of 'abcdefgh' then: |
|
||||||
| | 0. x[1:4] == 'bcde' |
|
| | 0. x[1:4] == 'bcde' |
|
||||||
| | 1. x[ :5] == 'abcdef' |
|
| | 1. x[ :5] == x[:5] == 'abcdef' |
|
||||||
| | 2. x[3: ] == 'cdefgh' |
|
| | 2. x[3: ] == x[3:] =='cdefgh' |
|
||||||
| | 3. x[ : ] == 'abcdefgh' |
|
| | 3. x[ : ] == x[:] == 'abcdefgh' |
|
||||||
| | 4. x[4/2:3+2] == x[2:5] == 'cdef' |
|
| | 4. x[4/2:3+2] == x[2:5] == 'cdef' |
|
||||||
| | |
|
| | |
|
||||||
| | Note: Both r0 and r1 are assumed to be integers, where |
|
| | Note: Both r0 and r1 are assumed to be integers, where |
|
||||||
|
@ -354,7 +354,7 @@ include path (e.g: /usr/include/).
|
||||||
| | switch |
|
| | switch |
|
||||||
| | { |
|
| | { |
|
||||||
| | case x > (y + z) : 2 * x / abs(y - z); |
|
| | case x > (y + z) : 2 * x / abs(y - z); |
|
||||||
| | case x < 3 : sin(x + y) |
|
| | case x < 3 : sin(x + y); |
|
||||||
| | default : 1 + x; |
|
| | default : 1 + x; |
|
||||||
| | } |
|
| | } |
|
||||||
+----------+---------------------------------------------------------+
|
+----------+---------------------------------------------------------+
|
||||||
|
@ -389,7 +389,39 @@ include path (e.g: /usr/include/).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[09 - SPECIAL FUNCTIONS]
|
[09 - COMPONENTS]
|
||||||
|
There are three primary components, that are specialized upon a given
|
||||||
|
numeric type, which make up the core of ExprTk. The components are as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
1. Symbol Table exprtk::symbol_table<T>
|
||||||
|
2. Expression exprtk::expression<T>
|
||||||
|
3. Parser exprtk::parser<T>
|
||||||
|
|
||||||
|
|
||||||
|
(1) Symbol Table
|
||||||
|
A structure that is used to store references to variables, constants
|
||||||
|
and functions that are to be used within expressions.
|
||||||
|
|
||||||
|
(2) Expression
|
||||||
|
A structure that holds an AST for a specified expression and is used
|
||||||
|
to evaluate said expression. If a compiled Expression uses variables
|
||||||
|
or user defined functions, it will then also have an associated Symbol
|
||||||
|
Table, which will contain references to said variables, functions et
|
||||||
|
al.
|
||||||
|
|
||||||
|
(3) Parser
|
||||||
|
A structure which takes as input a string representation of an
|
||||||
|
expression and attempts to compile said input with the result being an
|
||||||
|
instance of Expression. If an error is encountered during the
|
||||||
|
compilation process, the parser will stop compiling and return an
|
||||||
|
error status code, with a more detailed description of the error(s)
|
||||||
|
and its location within the input provided by the 'get_error'
|
||||||
|
interface.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[10 - SPECIAL FUNCTIONS]
|
||||||
The purpose of special functions in ExprTk is to provide compiler
|
The purpose of special functions in ExprTk is to provide compiler
|
||||||
generated equivalents of common mathematical expressions which can be
|
generated equivalents of common mathematical expressions which can be
|
||||||
invoked by using the 'special function' syntax (eg: $f12(x,y,z) or
|
invoked by using the 'special function' syntax (eg: $f12(x,y,z) or
|
||||||
|
@ -460,7 +492,7 @@ correctly optimize such expressions for a given architecture.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[10 - EXPRTK NOTES]
|
[11 - EXPRTK NOTES]
|
||||||
(00) Precision and performance of expression evaluations are the
|
(00) Precision and performance of expression evaluations are the
|
||||||
dominant principles of the ExprTk library.
|
dominant principles of the ExprTk library.
|
||||||
|
|
||||||
|
@ -470,7 +502,7 @@ correctly optimize such expressions for a given architecture.
|
||||||
|
|
||||||
(03) Results of expressions that are deemed as being 'valid' are to
|
(03) Results of expressions that are deemed as being 'valid' are to
|
||||||
exist within the set of Real numbers. All other results will be
|
exist within the set of Real numbers. All other results will be
|
||||||
of the value Not-A-Number (NaN).
|
of the value: Not-A-Number (NaN).
|
||||||
|
|
||||||
(04) Supported user defined types are numeric and string variables
|
(04) Supported user defined types are numeric and string variables
|
||||||
and functions.
|
and functions.
|
||||||
|
@ -532,7 +564,7 @@ correctly optimize such expressions for a given architecture.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[11 - SIMPLE EXPRTK EXAMPLE]
|
[12 - SIMPLE EXPRTK EXAMPLE]
|
||||||
--- snip ---
|
--- snip ---
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -586,7 +618,10 @@ int main()
|
||||||
for (std::size_t i = 0; i < parser.error_count(); ++i)
|
for (std::size_t i = 0; i < parser.error_count(); ++i)
|
||||||
{
|
{
|
||||||
error_t error = parser.get_error(i);
|
error_t error = parser.get_error(i);
|
||||||
printf("Err: %02d Pos: %02d Type: [%s] Msg: %s Expr: %s\n",
|
printf("Error: %02d Position: %02d "
|
||||||
|
"Type: [%s] "
|
||||||
|
"Message: %s "
|
||||||
|
"Expression: %s\n",
|
||||||
static_cast<int>(i),
|
static_cast<int>(i),
|
||||||
static_cast<int>(error.token.position),
|
static_cast<int>(error.token.position),
|
||||||
exprtk::parser_error::to_str(error.mode).c_str(),
|
exprtk::parser_error::to_str(error.mode).c_str(),
|
||||||
|
@ -607,7 +642,7 @@ int main()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[12 - FILES]
|
[13 - FILES]
|
||||||
(00) Makefile
|
(00) Makefile
|
||||||
(01) readme.txt
|
(01) readme.txt
|
||||||
(02) exprtk.hpp
|
(02) exprtk.hpp
|
||||||
|
|
Loading…
Reference in New Issue