Здравствуйте, bybor, Вы писали:
B>Надо написать парсер выражений. Язык программирования — C#. В выражении могут быть арифметические операции, предопределенные функции (MIN, MAX, ABS, ...), и в качестве переменных — названия полей таблиц базы данных. Парсер будет использоваться для "вычисляемых" полей в отчётах. Вычисление будет задаваться выражением, которое требуется разобрать (желательно на этапе ввода, чтобы не заниматься этим при отображении отчёта), подставить туда значения для текущего кортежа и вернуть результат.
B>Как я понимаю, задача сводится к обычному "калькулятору" с возможностью задания переменных.
Самый быстрый и реально работающий способ (не без недостатков, конечно) это тупо писать выражения на C#, а потом компилировать их в runtime и выполнять. Удобно для этого завести базовый класс с виртуальным методом типа Calculate, а динамический класс от него наследовать. В нём тогда можно наопределять protected методов Min, Max и всё, что угодно.
Плюсы — выражение будет вычисляться быстро и очень легко расширять дополнительными функциями.
Минус — на C# пользователь может написать больше, чем того хотелость, то есть тут потенцияльная дырка в секьюрити. Дырка закрывается дополнительной валидацией скомпилированного.