使用pyparsing

时间:2017-04-05 05:03:26

标签: python pyparsing

我正在尝试使用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)

0 个答案:

没有答案