网址:http://code.google.com/p/muparserx/wiki/Introduction
数学表达式的计算是许多应用程序中要求的普通任务。它可以通过使用标准的数据表达式解析器(muparser)来完成,或者嵌入例如Lua的脚本语言。然而这里有一些限制,虽然muParser相当的快速,但是它只是处理标量的值,虽然Lua非常的灵活,但是她也不支持数组的二进制操作,也不支持复数的操作。因此如果你需要一个支持数组、矩阵和字符串的数学表达式解析器的话,muparserx可以帮到你。它是基于原始的muParser引擎,但是之后演化到一个独立的项目。
注:muParser已经实现复数计算,但是相当的受限,而且需要更多的技巧。
注:muParser可以定义字符串,但是仅仅作为常量使用。
支持的数据类型:双精度浮点,整数,复数,布尔,字符串和数组。
可扩展用户自定义的操作符(二进制、中缀和后缀表达式)。
可扩展用户自定义的函数,带有任意数量的函数参数。
支持无限制的变量和常量;
不限制表达式的复杂度;
可从表达式中读取二进制,十六进制,复数,整数和字符串值,也可扩展读取用户自定义的值;
支持大量预定义的操作符,函数和常量;
使用标准通用C++代码编写,没有其它的依赖性。
缺省情况下,解析器支持下面的数据常量:
Eulerian值:e = 2. 718281828459045235360287
PI值:pi = 3.141592653589793238462643
虚数单位:i = sqrt(-1)
标准操作:+,-,*,/,^
赋值操作符:=,+=,-=,=,/=;
逻辑操作符:and,or,xor,==,!=,>,<,<=,>=
二进制处理:&,|,<<,>>
字符串拼接://
If then else条件使用lazy计算:condition?trueValue:falseValue
单位后缀:{n}, {mu}, {m}, {k}, {G}, {M}(纳,微,毫,K,G,兆)
符号操作符和类型转换:-,(float),(int)
标准函数:abs,sin,cos,tan,sinh,cosh,tanh,ln,log,log10,exp,sqrt
无限制的参数数量:min,max,sum
字符串函数:str2dbl,strlen,toupper
复数函数:real,imag,conj,arg,norm
数组函数:sizeof
下面的表格显示表达式例子,可以使用muParserX来进行计算:
表达式 |
结果 |
解释 |
“hello” == “world” |
False |
比较字符串 |
“hello” // “world” |
“hello world” |
字符串拼接操作 |
sin(a+8i) |
…. |
支持各种使用复数的预定义函数 |
va[3]+vb[5] |
…. |
支持数组变量 |
va[3] = 9 |
… |
通过向量的索引复制操作 |
toupper(“hello” // ”world”) |
“HELLOWORLD” |
转换连接字符串为大写 |
#010010 |
18 |
解释执行二进制值 |
0x1eff |
7935 |
解释执行十六进制值 |
#10>0x1eff |
false |
比较二进制和十六进制值 |
1+2-3*4/5^6 |
2.99923 |
标准操作 |
a = ((a<b)?10:-10) |
10或-10依赖于a和b |
三元条件操作符(if then else) |