производительность — анализатор выражений бизнес-правил C ++

Я ищу предложения портативных облегченных библиотек, написанных на C++, которые поддерживают выражение и оценку математических и бизнес-правил. я понимаю C++ не обеспечивает такую ​​функциональность в STL,

Основное требование заключается в следующем:

Выражения, которые будут оцениваться, будут состоять из чисел и строк и переменных, представляющих числа или строки.

Ожидается, что некоторые выражения будут оцениваться много раз в секунду (1000-2000 раз), поэтому существует потребность в высокопроизводительных вычислениях выражений.

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

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

Что я ищу:

  1. Библиотека написана на C ++ (C ++ 03 или C ++ 11)
  2. Стабильный / достойный производства
  3. Быстрые оценки
  4. Портативный (win32 / linux)
  5. Любые предложения по созданию высокопроизводительного движка бизнес-правил.

Пример бизнес-правила:

‘rule_result = (оставшиеся_элементы < min_items) и (item == «пляжный мяч») ‘

10

Решение

Увидеть Библиотека математических выражений C ++ изложенные в этот ответ.

Но, если вам действительно нужна скорость, подумайте о компиляции выражений непосредственно в C / C ++, а затем загрузите их динамически (общие объекты / DLL).

13

Другие решения

Рассматривали ли вы создание собственного парсера с бизон + сгибать? Он использует реализацию синтаксического анализатора LALR на основе FSM, которая является быстрой и простой в написании, поддерживает оценку выражений во время их анализа, а также генерацию AST для повторной оценки.

1

По вопросам рекламы [email protected]