您的位置:首页 > 其它

独立表达式计算引擎

2007-04-09 09:11 357 查看
目前正在研究表达式计算,在网上搜了一圈,结果都是java的. .NET里边有的用CodeDom, 有的用DataTable的计算列,还有用Com下的Script引擎,但没找到一个轻量级的独立表达式计算引擎。哎,DotNet的东东是不多,牛人也不屑做这玩意。不过我觉得这表达式引擎用到的地方还是挺多的呀,MS的DataTable就用到。

俺在程序员里也就是个半桶水,只好不畏艰难,从头做起。结果毫无进展,终于有一天我见到了ANTLR,这是个好东东,是个分析程序生成器,有兴趣的朋友去www.antlr.org看看吧。用ANTLR我重写了表达式计算引擎,实现了基本功能,并将继续完善。基于我自己的痛苦经历,我将共享该组件(有需要的请跟我联系),先贴个示例的图吧:



下面就说明一下,表达式计算引擎目前实现的功能:
① 支持四则运算+,-,*,/,pow和一元+,-
② 支持变量,变量可以是任意类型
③ 支持函数,引擎内部函数或外部函数(外部函数的调用是通过委托实现的)
④ 支持对象的公共成员,包括方法(method)、属性(property)、索引器和字段(field)

源代码说明:
c#,使用VS2003,在Vs2005下也可以用

工程中有3个项目,AntlrExp,WfcExp,WfcExpText
AntlrExp:由ANTLR自动生成的分析程序
WfcExp:自定义的对AntlrExp的包装和实现
WfcExpTest:表达式计算演示说明

AntrlExp中的代码基本是不用去改动的,我把它独立为一个项目就是这个目的,可以单独打包为一个运行时dll。WfcExp是对AntrlExp的包装,使得表达式引擎在源码级可以任意扩展。其中IOperator接口很重要,该接口定义了表达式引擎的运算操作,只需实现IOperator接口,即可实现自定义的运算操作。

具体的结构可以看看源代码。详细的文档以后有空时估计会写一下。

接下去的目标:
① 支持关系运算
② 支持字符串常数和日期型常数
③ 在些基础上构造一个简单的脚本引擎
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: