C#实现的表达式解析与计算类TExprParser介绍

本文介绍了C#编写的TExprParser类库,包括核心版、基本版、扩展版和中文版,支持自定义函数、占位符、iif函数和if结构,提供表达式规范性检测,适用于复杂计算需求。TExprParserChina版提供丰富的数值、字符和日期函数,可满足多种计算场景。
摘要由CSDN通过智能技术生成

        在一个报表审核软件项目中需要计算字符串表达式的值(例如"1+2/3")。同时,在编制审核规则时也需要获取审核表达式是否存在语法错误。于是,在国内外网上搜索了几个免费组件,感觉都不太好灵活实用。也使用了网上介绍的基于JScript.NET的表达式计算方法(本质上是模拟Javascript计算表达式),代码异常简短且能获取表达式的值,但不能满足项目需求:

  • 不能确定表达式或其子项计算后的数据类型。
  • 不支持自定义函数,如常见的数值计算函数Truncate和字符处理函数Substr等。起因是,审核软件中要判断某个字符型数据是否含空格、是否含非可见字符等,或根据某个标志位判断一个数据与另一个数据是否匹配。
  • 不能自定义常见的iif(e1,e2,e3)函数和if e1 then e2 else e3结构。
  • 不能使用{n}占位符的参数计算形式,应用缺乏灵活性。
  • 不能自定义运算符。特别,定义符合中文习惯的小于等于(≤)、大于等于(≥)和不等于(≠)运算符,以及更好理解的and/or逻辑表示。这个基于考虑,审核规则表达式不仅我们要能看懂,更需要软件使用者能看懂!例如1>=2 && 5<=6就不及1≥2 and 5≤6好理解。
  • 计算出现异常时直接抛出错误,无法内部捕获,例如表达式错误、数据被0除、数据溢出等。

        总之,能找到的现有免费组件和方法不能满足灵活性应用需求。于是,在2015年春节前编写了一组TExprParser类(其dll库文件和测试程序可以到csdn下载),基本满足了上述需求,具体介绍如下:

        1、名称空间、类版本及其构造函数

        全部类位于名称空间CSUST.Data.Expr中,可以直接使用的类有如下四个版本(基类为TExprChecker)和一个检测类(TExprChecker):

  • 核心版:TExprParserKernal。该版本的表达式使用c/c++/c#的语法,支持常规数学计算(+-*/^,其中^是幂计算)、关系计算(==、!=、>=和<=)、逻辑计算(&&、||),支持两个数学单目运算符(+-)和一个逻辑非单目运算符(!)。运算符的优先级别和结合方法与c/c++/c#的运算符相同。注意,该
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值