Процедура синтаксического анализа / оценки формулы или библиотека с общей функциональностью DLookup - PullRequest
0 голосов
/ 12 января 2009

Я пишу приложение .Net, в котором я должен поддерживать определяемые пользователем формулы, которые могут выполнять базовую математику, а также получать доступ к данным из любой произвольной таблицы в базе данных.

У меня математическая часть работает с использованием JScript Eval ().

То, что я еще не решил, это то, что хороший способ - это сделать поиск по общей таблице. Например, у меня может быть формула что-то вроде :
Колонка: BonusAmount Формула: {CurrentSalary} * 1.5 * {[SystemSettings] [Значение] [SettingName = CorpBonus AND Year = {Year}]}}

Таким образом, в этом примере я заменил бы {xxx} и {Year} значением столбца xxx из текущей таблицы, и я бы заменил вторую часть значением (выберите Value из SystemSettings WHERE SettingName = 'CorpBonus 'И Год = 2008)

Итак, в основном я ищу что-то очень похожее на функцию MS Access DLookup:
DLookup (выражение, домен, [критерии])
DLookup ("[UnitPrice]", "Детали заказа", "OrderID = 10248")

Но мне также нужна общая процедура синтаксического анализа, которая может указать, нужно ли просто искать в текущей строке или заглядывать в другую таблицу. Также было бы неплохо поддерживать агрегатные функции (например, DAvg, DMax и т. Д.), А также обрабатывать все странные крайние случаи.

Поэтому мне интересно, знает ли кто-нибудь о какой-либо существующей библиотеке или имеет хорошую подпрограмму, которая может обработать эту формулу при разборе и требований к поиску базы данных / разрешению агрегатной функции.

Ответы [ 2 ]

1 голос
/ 25 мая 2009

Вы можете реализовать свою собственную функцию DLookup в JScript, и выражение "eval" может получить к ней доступ. Недостатки «eval» в том, что пользователь может вызывать любую другую функцию JScript, и это делает всю систему небезопасной. Можете ли вы предоставить более подробную информацию о вашем вопросе?

0 голосов
/ 19 мая 2011

Самый правильный способ сделать это - использовать синтаксический анализатор, такой как ANTLR http://www.antlr.org/, но не ходить по парку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...