C++ Business rule expression parser / evaluation [zamknięty]

Szukam sugestii portable lightweight libraries napisanych w C++, które wspierają wyrażanie i ewaluację reguł matematycznych i biznesowych. Rozumiem, że C++ nie zapewnia takiej funkcjonalności w STL.

Podstawowe wymagania są następujące:

Wyrażenia do oceny będą składać się z liczb i łańcuchów oraz zmiennych reprezentujących liczby lub łańcuchy.

Niektóre wyrażenia mają być oceniane wiele razy na drugi (1000-2000 razy), stąd istnieje wymóg wysokiej wydajności oceny wyrażeń.

Pierwotnie projekt w mojej firmie, kodujemy wszystkie reguły biznesowe jako klasy wywodzące się z podstawowej klasy wyrażeń. Problem polega na tym, że takie podejście nie skaluje się dobrze wraz ze wzrostem liczby wyrażeń.

Wygooglowałem, ale większość "bibliotek", które mogłem znaleźć, to dość proste przykłady algorytmu manewrowego, większość wyrażenia parsery, wykonują parsowanie i ewaluację w tym samym kroku, co czyni je nieodpowiednimi do ciągłych ponownych ocen, a większość obsługuje tylko numery.

Czego szukam:

    Biblioteka napisana w C++ (C++03 lub C++11)
  1. stabilna / godna produkcji
  2. szybkie oceny
  3. Portable (win32 / linux)
  4. wszelkie sugestie dotyczące budowy silnika reguł biznesowych o wysokiej wydajności.

Przykładowy biznes reguła:

'rule_result = (remaining_items

Author: Zamfir Kerlukson, 2013-10-07

2 answers

Patrz Biblioteka wyrażeń matematycznych C++ przedstawiona w tej odpowiedzi .

Ale jeśli naprawdę zależy ci na szybkości, rozważ kompilację wyrażeń bezpośrednio w C / C++, a następnie załaduj je dynamicznie (shared objects/DLL).

 13
Author: Macke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:29

Czy zastanawiałeś się nad wygenerowaniem własnego parsera za pomocą Bison + Flex ? Wykorzystuje on opartą na FSM implementację parsera LALR, która jest szybka i łatwa do napisania, i wspiera ewaluację wyrażeń podczas ich parsowania, a także generowanie AST do wielokrotnej ewaluacji.

 1
Author: Renan Gemignani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-11 20:49:46