Need a formula interpreter for .Net [closed]
Asked Answered
M

3

6

I'm looking for a formula interpreter that I can use in a C# application. It needs to be able to interpret a string like this:

max(1+2, 4) * x

I found Writing a fast formula interpreter (codeproject.com) which almost does what I need but it doesn't allow for functions with multiple parameters. I could probably add that functionality to it but I was just wondering if something like this already exists.

Thanks

Mcneal answered 29/3, 2011 at 21:59 Comment(4)
possible duplicate: https://mcmap.net/q/40598/-how-can-i-evaluate-c-code-dynamicallyTeamster
Another potential duplicate: #355562Bateau
Those questions are relatively old - Corbins answer already links to two projects not mentioned in either of those two questions, so I say keep the question open.Unclad
This question has been done to death. There have been no revolutionary developments in the past, oh, 10 years.Hotblooded
L
7

A couple I've used in the past with no problems:

Lipolysis answered 29/3, 2011 at 22:3 Comment(0)
K
1

You can actually build a very effective interpreter by parsing and replacing certain functional keywords such as max with Math.Max and then dynamically building and executing the formula as a C# class and method. So actually you would be parsing and wrapping the formula and allowing the C# compiler to interpret and execute it.

So, taking your sample formula of max(1+2, 4) * x would turn into:

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

Which you would compile on the fly and then execute per the linked article. You still have to parse for and pass the x value of course.

Kirman answered 29/3, 2011 at 22:4 Comment(2)
This seems dangerous if certain security precautions aren't met.Vilhelmina
@Ozzah: This isn't like SQL Injection. For one thing, you would limit the amount of input, and then you would be parsing for math terms such as max, sin, cos etc. Anything that's not kosher would fail as a syntax error.Kirman
J
1

A long time ago in one project i had to create some booking with formulas, and i used VsaEngine. To use this engine you need to add reference to Microsoft.JScript. Here is example:

Code for usage is very simple, just replace formula parameters like:

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

And here is core method, CalculateFormula:

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

With this you can create your custom formula interpreter engine.

Jepum answered 29/3, 2011 at 22:29 Comment(1)
VsaEngine is a nice thing. The problem is that it is obsolete and deprecated and Microsoft states that there will be no replacement for this feature.Tyeshatyg

© 2022 - 2024 — McMap. All rights reserved.