我正在尝试使用pyparsing来解析逻辑表达式,然后将输入列表与该表达式进行比较。
表达式匹配对象上的标签(单词)组。所以表达式以这种形式出现:
this AND that OR now
(this OR that) AND there OR here AND (now OR then)
我能够将表达式解析为中缀列表:
import pyparsing as pp
identifier = pp.Word(pp.alphanums + "_" + "-" + "'")
expr = pp.infixNotation(identifier, [
("AND", 2, pp.opAssoc.LEFT,),
("OR", 2, pp.opAssoc.LEFT,),
])
result = expr.parseString(expression)
这将产生以下结果(对于给出的第二个例子):
[[['this', 'OR', 'that'], 'AND', 'there'], 'OR', ['here', 'AND', ['now', 'OR', 'then']]]
此时,我想比较一个标签列表,并确定需要将哪些标签添加到我的标签列表中,以使表达式有效。
因此,对于第二个示例,如果我的标记列表为['this', 'now']
,我需要确定需要将'there'
或'here'
添加到表达式的列表中是有效的。
我不知道从哪里开始。我认为我需要某种递归函数来遍历这些术语,同时跟踪什么是OR术语以及什么是AND术语,因为这会影响确定列表中缺少什么的逻辑。
编辑:更新
根据目前为止的反馈,我已经为AND和OR术语设置了一些解析操作。这适用于像(this OR that) AND there
这样的简单情况,但无法处理更复杂的表达式,其中有不同的标签组可以满足表达式(即基于表达式的OR),如{{1 }}。有人可以帮助我扩展这些解析行动来满足这种需求吗?
(this OR that) AND there OR here AND (now OR then)