Математический парсер выражений

Возможный дубликат:
Есть ли в .NET математический оценщик строк?

Мне нужно реализовать математический анализатор выражений. Он должен оценить следующие выражения:

  • Основные операторы (+, -, *, /,% [по модулю оператора])
  • приоритетные операции, такие как 2 * (4-1)
  • функции sin, cos, tan, cotan, log (base, number)
  • позволяет получать такие композиции, как sin (cos (log (2,32)))
  • мощность, такая как 2 ^ 5

Сначала я хотел использовать функцию JScript eval. Но это небезопасно и нет оператора электропитания. Secondary Я искал некоторые библиотеки в Интернете. Но, как оказалось, я не могу их использовать. Итак, вопрос в следующем: насколько безопасным является вызов функции JScript eval и существуют ли какие-либо стандартные инструменты .net для моей задачи? Если нет, то какой алгоритм лучше? На данный момент я пытаюсь построить дерево выражений, а затем скомпилировать его для получения результата.

Вы можете попробовать NCalc

 Dictionary dict = new Dictionary() { {"a",1} , {"b",4} }; NCalc.Expression exp = new NCalc.Expression("a + b / 2 * myfunc(3.14)"); exp.EvaluateFunction += (s, e) => { var d = (double)e.Parameters[0].Evaluate(); e.Result = Math.Cos(d); }; exp.EvaluateParameter += (s, e) => { e.Result = dict[s]; }; var result = exp.Evaluate(); 

Или jep.net – отказ от ответственности: я автор.