我在C上使用CUDD库来制作二元决策图。我想知道是否有某种方法可以将作为字符串给出的布尔表达式转换为二进制决策图。
谢谢!
答案 0 :(得分: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
开始,wheel files可从PyPI获得,其中包含CUDD的编译版本。所以pip install dd
也将在任何Linux环境中安装CUDD,其Python版本与轮子相匹配(3.5或3.6)。
免责声明:我是该软件包dd
的作者。
答案 1 :(得分:1)
有几个项目已经包含了将字符串解析为BDD的功能。
例如,在https://github.com/LTLMoP/slugs/blob/master/src/synthesisContextBasics.cpp第22-64行,你可以找到一个简单的解析器,用于在C ++中修饰普通形式的布尔公式。假设已经分配了变量,并且表示变量的节点的BDD引用存储在数组“variables [..]”中,并且它们各自的名称存储在“variabeNames [...]”中。将一般思想调整为C比较简单。该代码中的“BF”类是“DdNode *”引用的包装。
如果你想要中缀表示法,你总是可以使用yacc / lex来构建一个简单的解析器来为你做这个。