Нужен переводчик формул for.Net [закрыто]
Я ищу интерпретатор формул, который можно использовать в приложении C#. Он должен быть способен интерпретировать строку следующим образом:
max(1+2, 4) * x
Я нашел написание быстрого интерпретатора формул (codeproject.com) который почти делает то, что мне нужно, но он не позволяет использовать функции с несколькими параметрами. Я, вероятно, мог бы добавить к нему эту функциональность, но мне просто интересно, существует ли что-то подобное.
Спасибо
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(); }
С его помощью вы можете создать свой собственный механизм интерпретатора формул.