繁体   English   中英

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

[英]Using Irony for custom language design in .Net 2.0

就像问题所说的那样,我在公司里面坚持使用.Net 2.0,没有升级的机会。 有没有办法让Irony在.NET 2.0中运行。

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

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

一个非常愚蠢的例子 -

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

显然,这个配方经过的两个阶段。

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

  • 通过正则表达式检查是否存在关键字的预定义arrayList中不存在的任何关键字

  • 然后检查是否有任何变量(在这种情况下 - A,B,C是那些)变量的arraylist中不存在的变量。

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

现在在评估了这个表达式之后,结果是--DivideByZeroException ,为什么因为eval将所有布尔值true转换为1并对它执行常规算术。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM