Re: Парсер - писать самому или взять генератор
От: vmpire Россия  
Дата: 15.06.09 13:10
Оценка: 1 (1)
Здравствуйте, bybor, Вы писали:

B>Надо написать парсер выражений. Язык программирования — C#. В выражении могут быть арифметические операции, предопределенные функции (MIN, MAX, ABS, ...), и в качестве переменных — названия полей таблиц базы данных. Парсер будет использоваться для "вычисляемых" полей в отчётах. Вычисление будет задаваться выражением, которое требуется разобрать (желательно на этапе ввода, чтобы не заниматься этим при отображении отчёта), подставить туда значения для текущего кортежа и вернуть результат.


B>Как я понимаю, задача сводится к обычному "калькулятору" с возможностью задания переменных.


Самый быстрый и реально работающий способ (не без недостатков, конечно) это тупо писать выражения на C#, а потом компилировать их в runtime и выполнять. Удобно для этого завести базовый класс с виртуальным методом типа Calculate, а динамический класс от него наследовать. В нём тогда можно наопределять protected методов Min, Max и всё, что угодно.

Плюсы — выражение будет вычисляться быстро и очень легко расширять дополнительными функциями.
Минус — на C# пользователь может написать больше, чем того хотелость, то есть тут потенцияльная дырка в секьюрити. Дырка закрывается дополнительной валидацией скомпилированного.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.