需要.Net的公式解释器[关闭]

问题描述 投票:6回答:3

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

max(1+2, 4) * x

我发现Writing a fast formula interpreter (codeproject.com)几乎可以满足我的需要,但它不允许具有多个参数的函数。我可能可以在其中添加该功能,但是我只是想知道是否已经存在类似的东西。

谢谢

c# .net expression interpreter formula
3个回答
7
投票

我过去曾经使用过的几对,没有问题:


1
投票

您实际上可以通过将某些功能关键字(例如max替换为Math.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值,当然。


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();
}

由此您可以创建自定义公式解释器引擎。

© www.soinside.com 2019 - 2024. All rights reserved.