вы могли бы поучиться у этого проекта, есть хорошие уроки, но как это было сделано
Вы видели http://ncalc.codeplex.com?
Это расширяемое, быстрое (например, имеет собственный кэш) позволяет вам предоставлять пользовательские функции и переменные во время выполнения путем обработки событий EvaluateFunction / EvaluateParameter. Примеры выражений, которые он может анализировать:
Выражение e = новое выражение («Round (Pow (Pi, 2) + Pow ([Pi2], 2) + X, 2)»);
e.Parameters ["Pi2"] = новое выражение ("Pi * Pi");
e.Parameters ["X"] = 10;
e.EvaluateParameter + = делегат (имя строки, аргументы ParameterArgs)
{
если (имя == "Пи")
args.Result = 3,14;
};
Debug.Assert (117.07 == e.Evaluate ());
Он также обрабатывает Unicode и многие типы данных. Он поставляется с файлом рога, если вы хотите изменить грамматику. Существует также форк, который поддерживает MEF для загрузки новых функций.
Он также поддерживает логические операторы, строки даты / времени и операторы if.