【发布时间】:2021-01-22 04:46:31
【问题描述】:
我正在从前端获取( (A & B) | (C & ~D) ) 形式的布尔表达式。我需要将其转换为可以由 PyEDA 解决的布尔表达式。在 PyEDA 中编写布尔表达式有两个步骤。
- 使用
A,B,C,D = map(exprvar, "abcd") - This becomes a problem when number of boolean variables are dynamic或A = exprvars("a", 4) - solves the dynamic variable issue but need to convert letters in the equation to A[0],A[1]...创建布尔变量A、B、C、D。 - 将表达式写为
( (A & B) | (C & ~D) )。
尝试了以下方法。 boolean_exp 表示布尔表达式字符串,num_variables 表示字符串中变量的个数。
def parse_boolean_expression(boolean_exp,num_variables):
count = 0
boolean_exp_list = list(boolean_exp)
for index,char in enumerate(boolean_exp_list):
if char.isalpha():
boolean_exp_list[index] = "Z[{}]".format(count)
count += 1
final_bool_exp = "".join(boolean_exp_list)
Z = exprvars("z", num_variables)
expression = final_bool_exp
这种方法不起作用,因为创建的表达式和变量是字符串类型,而正确的类型应该是表达式的 <class 'pyeda.boolalg.expr.OrOp'> 和变量的 <class 'pyeda.boolalg.expr.variables'>。
在交互模式下,我们可以轻松地完成上述步骤,但我们如何在脚本模式下使用从前端发送的具有动态变量数量的布尔表达式字符串来构建这个表达式?
【问题讨论】:
标签: python parsing boolean-logic boolean-expression pyeda