如何将嵌套的函数代码转换为可读的布尔代数?

时间:2019-03-26 19:55:39

标签: python parsing tree boolean-algebra

对于我正在编写的该程序,我正在编写一个需要简化和读取/输出布尔表达式的程序。为此,我需要能够在以下代码之间进行转换:

AND(OR(a,b), NOT(OR(c,a)))

进入

(A+B).'(C+A)

反之亦然,所有运算符都以AND(a,b)OR(a,b)NOT(a)的形式工作,其中a和b是变量/参数(它们代表程序中的实际功能)。 / p>

我不知道该如何处理,因此,如果您有什么可以指导我的,我将非常感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

因此,撇开评估给定布尔表达式的问题,您最终将拥有一种采用特定格式的代码字符串,并且希望将其重新格式化为其他类型的字符串。从第一种格式更改为第二种格式的一种方法是在Python中创建称为“ AND”,“ OR”和“ NOT”的实际函数(当三个单词全部用全英文写时,它们在Python中没有其他特殊含义)像这样的帽子)。然后定义每个函数以打印第二种逻辑格式的输出。因此,例如,运行AND("x","y")将返回三个字符的字符串“ x.y”:

def AND(a,b):
    return "(%s.%s)" % (a, b)

def OR(a,b):
    return "(%s+%s)" % (a, b)

def NOT(a):
    return "'(%s)" % a

a, b, c = "a", "b", "c"
myfirstbool = "AND(OR(a,b), NOT(OR(c,a)))"
mynewbool = eval(myfirstbool)  # Take the string, and treat it as Python code
print(mynewbool)  # output:  ((a+b).'((c+a)))

这可能会给您一些多余的括号,但是最终表达式仍然有效。

采用另一种方法比较麻烦,因为您必须计算嵌套的括号才能正确处理。您可能要查找算法,以了解如何在Python中解析嵌套括号,如何在正则表达式或Sympy模块中查找“ *+*”之类的东西。