网址: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) |