Всем привет! Хочу поделиться небольшим кусочком кода для вычисления математических выражений из строк, который изначально был написан для моей инди игры - 4X стратегии MyCivGame. Проект я решил назвать Context EXpressions 🥰.
Строки анализируются один раз, затем могут вычисляться с разным контекстом. В контекст помещаются начальные значения переменных, результат вычисления также будет помещен в контекст.
Пример:
var context = new Dictionary<string, double>(); context.Add("a", 2); context.Add("b", 5); var expression = new ComplexExpression(@" c = 9; result1 = a + b + c; result2 = (a + b) * c; result3 = (a + b - 5) ^ (3 * a); result4 = result2 / 1000; x = result1 - result2 / 15.6 * (-result3) - result4; "); expression.Call(context);
Содержание словаря после вычисления:
a = 2 b = 5 c = 9 result1 = 16 result2 = 63 result3 = 64 result4 = 0,063 x = 274,39853846153846
На данный момент поддерживаются конструкции: +, -, *, /, ^, ( ), строки разделяются с помощью ";" или ",". Для моей игры этого достаточно, но если кто-то хочет продолжить развивать эту библиотеку, добро пожаловать на GitHub этого проекта!
