我正在寻找一个可以在C#应用程序中使用的公式解释器。它需要能够解释这样的字符串:
max(1+2, 4) * x
我发现Writing a fast formula interpreter (codeproject.com)几乎可以满足我的需求,但它不允许具有多个参数的函数。我可以添加它的功能,但我只是想知道这样的事情是否已经存在。
由于
答案 0 :(得分:7)
我过去使用的一对夫妇没有问题:
答案 1 :(得分: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值。
答案 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();
}
通过这种方式,您可以创建自定义公式解释器引擎。