Анализатор логических выражений для CUDD

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

Спасибо!

2 ответа

Другая возможность - работать в Python, используя привязки Cython к CUDD:

from dd import cudd

bdd = cudd.BDD()
bdd.declare('a', 'b')
u = bdd.add_expr('a /\ ~ b')
s = bdd.to_expr(u)
print(s)

По состоянию на dd == 0.5.3 В PyPI доступны файлы wheel, включающие скомпилированную версию CUDD. Так pip install dd также установит CUDD в любой среде Linux с версией Python, соответствующей колесам (3.5 или 3.6).

Отказ от ответственности: я автор пакета dd,

Существует несколько проектов, в которых функциональность для анализа строки в BDD уже содержится.

Например, по адресу https://github.com/LTLMoP/slugs/blob/master/src/synthesisContextBasics.cpp, строки 22-64, вы можете найти простой синтаксический анализатор для логических формул нормальной формы в C++. Ат предполагает, что переменные уже распределены, а ссылки BDD для узлов, представляющих переменные, хранятся в массивах "variable [..]", а их соответствующие имена хранятся в "variabeNames[...]", адаптируя общую идею к C относительно просто. Класс "BF" в этом коде является оболочкой для ссылок "DdNode*".

Если вы хотите использовать инфиксную нотацию, вы всегда можете использовать yacc/lex для создания простого парсера, который сделает это за вас.

Другие вопросы по тегам