[英]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.