Способ построения BDD - из дерева разбора для выражения, представляющего булеву функцию, которую вы пытаетесь построить.
Т.е., если вы хотите BDD для (A + B). (C + D), вы сначала анализируете (A + B). (C + D) в дерево:
.
/ \
+ +
/ \ / \
A B C D
затем рекурсивно создайте BDD - вам нужны методы, которые могут формировать И и ИЛИ двух BDDS, и базовый случай (одна переменная BDD).
Это работает так же хорошо и для логических схем (в виде разобранного DAG вместо дерева).
Эти примечания к BDD объясняют, как реализовать AND и OR, а также хеш-таблицы, которые необходимы для эффективной работы: http://bit.ly/cuClGe