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

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

Благодарю вас!


person ashishbaghudana    schedule 10.07.2015    source источник
comment
У меня нет прямого ответа, но вы можете взглянуть на визуализатор BDD.   -  person Axel Kemper    schedule 10.07.2015


Ответы (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 и содержат скомпилированную версию CUDD. Таким образом, pip install dd также установит CUDD в любой среде Linux с версией Python, соответствующей колесам (3.5 или 3.6).

Отказ от ответственности: я являюсь автором пакета dd.

person Ioannis Filippidis    schedule 09.01.2018

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

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

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

person DCTLib    schedule 10.07.2015