Всем привет! Хочу поделиться небольшим кусочком кода для вычисления математических выражений из строк, который изначально был написан для моей инди игры - 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 этого проекта!