独立表达式计算引擎

      目前正在研究表达式计算,在网上搜了一圈,结果都是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接口,即可实现自定义的运算操作。

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

接下去的目标:
① 支持关系运算
② 支持字符串常数和日期型常数
③ 在些基础上构造一个简单的脚本引擎 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 自从jdk1.4推出java.util.regex包,就为我们提供了很好的JAVA正则表达式应用平台。 因为正则表达式是一个很庞杂的体系,所以我仅例举些入门的概念,更多的请参阅相关书籍及自行摸索。 \\ 反斜杠 \t 间隔 ('\u0009') \n 换行 ('\u000A') \r 回车 ('\u000D') \d 数字 等价于[0-9] \D 非数字 等价于[^0-9] \s 空白符号 [\t\n\x0B\f\r] \S 非空白符号 [^\t\n\x0B\f\r] \w 单独字符 [a-zA-Z_0-9] \W 非单独字符 [^a-zA-Z_0-9] \f 换页符 \e Escape \b 一个单词的边界 \B 一个非单词的边界 \G 前一个匹配的结束 ^为限制开头 ^java 条件限制为以Java为开头字符 $为限制结尾 java$ 条件限制为以java为结尾字符 .为限制一个任意字符 java.. 条件限制为java后除换行外任意两个字符 加入特定限制条件「[]」 [a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符 ........ ............ ............
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值