0

正如问题所说,我在公司中一直使用 .Net 2.0,并且没有升级的机会。有没有办法让 Irony 在 .NET 2.0 中工作。

我将简要尝试解释我想要实现的目标。我们公司有一个工资单系统,我们让客户在那里定义自己的工资单项目公式。这些公式必须使用我们通过正则表达式检查的一些关键字/函数(非常不可靠)。然后我们创建一个 Microsoft 脚本控件对象并使用它的 eval 函数来解析代码片段。这些片段依次调用类中定义的关键字/函数来获取输出。

但是说这个系统有缺点是很客气的。有时它只是溢出错误。

一个非常愚蠢的例子——

FVAL(A)/(FVAL(B)+FVAL(C))

显然,这个公式经历了两个阶段。

首先是验证阶段,我们执行以下操作 -

  • 通过正则表达式检查是否有使用的关键字在预定义的关键字数组列表中不存在

  • 然后检查是否有任何变量(在这种情况下 - A、B、C 是变量)中不存在于变量的数组列表中。

  • 如果所有验证都通过,那么我们将公式字符串传递给 ScriptControlClass 对象的 eval 函数,并添加一个包含其中定义的所有函数的静态类(在这种情况下考虑),如果变量是在此使用的有效变量,则FVAL()此函数返回布尔值true上下文(如添加日期和数字将返回 false)

现在在评估这个表达式之后,结果是 - DivideByZeroException,为什么因为 eval 将所有布尔值类型转换true1并对它执行正常的算术运算。

FVAL(A)/(FVAL(B)+FVAL(C)) => 1/(1-1)

第二阶段几乎相似,但没有任何验证检查,就像不返回 true 一样,我们实际上从 a 返回变量的值,DataTable其中包含每个变量的值。

这个系统已经过时了,它让我很紧张,我真的需要帮助。请建议。

4

1 回答 1

2

如果您只是在谈论 excel 样式的公式,那么编写一个好的解释器非常容易,尤其是当您只需要处理一种数据类型时。具有编译器(甚至解析器)背景的人可能会在不到一天的时间内写给您。我自己写了一堆。

嵌入脚本语言是另一种选择,但您必须熟悉给定语言的怪癖。如果这是业务需求,确保使用高精度数字可能很困难。

于 2012-03-21T08:16:02.267 回答