Нужен переводчик формул for.Net [закрыто]


Я ищу интерпретатор формул, который можно использовать в приложении C#. Он должен быть способен интерпретировать строку следующим образом:

max(1+2, 4) * x

Я нашел написание быстрого интерпретатора формул (codeproject.com) который почти делает то, что мне нужно, но он не позволяет использовать функции с несколькими параметрами. Я, вероятно, мог бы добавить к нему эту функциональность, но мне просто интересно, существует ли что-то подобное.

Спасибо

3 6

3 ответа:

Пара, которую я использовал в прошлом без проблем:

На самом деле вы можете построить очень эффективный интерпретатор, разбирая и заменяя некоторые функциональные ключевые слова, такие как max С математикой.Max , а затем динамическое построение и выполнение формулы в качестве класса и метода 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();
}

С его помощью вы можете создать свой собственный механизм интерпретатора формул.