在 .Net 2.0 中使用 Irony 进行自定义语言设计

本文关键字:自定义 语言 Irony Net | 更新日期: 2023-09-27 18:28:33

正如问题所说,我在我的公司里坚持使用.Net 2.0,没有升级的机会。有没有办法让讽刺在.NET 2.0中工作。

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

但是要说这个系统有缺点是非常礼貌的。有时它只是溢出错误。

一个非常愚蠢的例如 -

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

显然,这个公式经过的拖曳阶段。

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

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

  • 然后检查是否有任何变量(在本例中为 - A、B、C 是变量数组列表中不存在的变量(。

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

现在在计算此表达式后,结果是 - DivideByZeroException,为什么因为 eval 类型转换所有布尔true 1并对其执行正态算术。

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

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

该系统已经过时,严重困扰着我的神经,我真的需要帮助。请指教。

在 .Net 2.0 中使用 Irony 进行自定义语言设计

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

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