需要.Net的公式解释器

时间:2011-03-29 21:59:50

标签: c# .net expression interpreter formula

我正在寻找一个可以在C#应用程序中使用的公式解释器。它需要能够解释这样的字符串:

max(1+2, 4) * x

我发现Writing a fast formula interpreter (codeproject.com)几乎可以满足我的需求,但它不允许具有多个参数的函数。我可以添加它的功能,但我只是想知道这样的事情是否已经存在。

由于

3 个答案:

答案 0 :(得分:7)

我过去使用的一对夫妇没有问题:

答案 1 :(得分:1)

您实际上可以通过解析和替换某些功能关键字(例如maxMath.Max,然后将dynamically building and executing公式替换为C#类和方法来构建非常有效的解释器。实际上,您将解析并包装公式并允许C#编译器解释并执行它。

因此,采用max(1+2, 4) * x的示例公式将变为:

public class MyFormula
{
    public double calc(double x)
    {
        return Math.Max(1+2, 4) * x;
    }
}

您可以动态编译,然后根据链接文章执行。你仍然需要解析并传递x值。

答案 2 :(得分:1)

很久以前在一个项目中,我不得不用公式创建一些预订,而且我使用了VsaEngine。要使用此引擎,您需要添加对Microsoft.JScript的引用。这是一个例子:

使用代码非常简单,只需替换以下公式参数:

string formula = "x+y";
formula=  formula.Replace("x","100").Replace("y","200");
string result = CalculateFormula(formula);

这是核心方法,CalculateFormula:

public string CalculateFormula(string evaluationString)
{ 
      VsaEngine en = VsaEngine.CreateEngine();
      Object result = Eval.JScriptEvaluate(evaluationString, en);
      return result.ToString();
}

通过这种方式,您可以创建自定义公式解释器引擎。