我正在寻找可在C#应用程序中使用的公式解释器。它需要能够解释这样的字符串:
max(1+2, 4) * x
我发现Writing a fast formula interpreter (codeproject.com)几乎可以满足我的需要,但它不允许具有多个参数的函数。我可能可以在其中添加该功能,但是我只是想知道是否已经存在类似的东西。
谢谢
我过去曾经使用过的几对,没有问题:
您实际上可以通过将某些功能关键字(例如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值,当然。
很久以前,在一个项目中,我必须使用公式创建一些预订,并且我使用了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();
}
由此您可以创建自定义公式解释器引擎。