我正在编写.Net应用程序,我必须支持用户定义的公式,这些公式可以执行基本数学,以及从数据库中的任意表访问数据。
我使用JScript Eval()来运行数学部分。
我还没有决定采用通用表查找的好方法。
例如,我可能有一个类似的公式:
专栏:BonusAmount
公式:{CurrentSalary} * 1.5 * {[SystemSettings] [Value] [SettingName = CorpBonus AND Year = {Year}]}
所以,在这个例子中,我将{xxx}和{Year}替换为当前表中的列xxx的值,我将用值替换第二部分(从SystemSettings中选择值WHERE SettingName ='CorpBonus 'AND年= 2008年)
所以,基本上,我正在寻找与MS Access DLookup功能非常相似的东西:
DLookup(表达式,域名,[条件])
DLookup(“[UnitPrice]”,“订单详情”,“OrderID = 10248”)
但是,我还需要整体解析例程,它可以判断是在当前行中查找,还是查看另一个表。也可以很好地支持聚合函数(即:DAvg,DMax等),以及处理的所有奇怪的边缘情况。
所以我想知道是否有人知道任何类型的现有库,或者有一个很好的例程可以处理解析和数据库查找/聚合函数解析要求的公式。
答案 0 :(得分:1)
您可以在JScript中实现自己的DLookup功能,“eval”表达式可以访问它。 “eval”的缺点是用户可以调用任何其他JScript函数,这会使整个系统不安全。您能否提供有关您问题的更多细节?
答案 1 :(得分:0)
最正确的方法是使用ANTLR http://www.antlr.org/之类的解析器,但不能在公园散步。