相关疑难解决方法(0)

具有pyparsing的递归表达式

我试图弄清楚如何做一个左关联表达式,其中递归(不包含在任何东西)表达式是可能的.例如,我想做:

expr + OP + expr
Run Code Online (Sandbox Code Playgroud)

它分析2个操作,如1 x 2 x 3(expr OP expr) OP expr结果.

如果我试图阻止expr无限递归解析,我可以做类似的事情:

expr -> Group(simple_expr + OP + expr)
      | simple_expr
Run Code Online (Sandbox Code Playgroud)

但后来我得到了expr OP (expr OR expr)结果.

如何强制左侧绑定?

编辑:我知道operatorPrecedence但是当操作员"IS" + Optional("NOT")或类似时,它似乎没有正确匹配.

python parsing pyparsing associativity

5
推荐指数
1
解决办法
1901
查看次数

使用Python在逻辑字符串中获取"AND"中的元素

我想解析逻辑字符串并获得"和"逻辑中所有元素的组合.例如,对于字符串'(A和(B或C))'我应该得到[[A,B],[A,C]]和字符串'(A和B以及(C或D和F)或者F和G)'我应该[[A,B,C],[A,B,D,F],[F,G]].

我正在尝试使用pyparsing.在这篇文章之后,在这里以二叉树方式解析pyparsing中的复杂逻辑表达式,我设法得到一个嵌套列表,其中字母按照首选项分组("和"优先于"或",括号覆盖此):

import pyparsing as pp

complex_expr = pp.Forward()
vars = pp.Word(pp.alphas, pp.alphanums + "_") | pp.Regex(r"[+-]?\d+(:?\.\d*)?(:?[eE][+-]?\d+)?").setName('proteins')
clause = pp.Group(vars ^ (pp.Suppress("(") + complex_expr + pp.Suppress(")") ))

expr = pp.operatorPrecedence(clause,[
                            ("and", 2, pp.opAssoc.LEFT, ),
                            ("or", 2, pp.opAssoc.LEFT, ),])
#print expr
complex_expr << expr
parseresult=complex_expr.parseString('( A and B and ( C or D and F ) or F and G )')
print parseresult
Run Code Online (Sandbox Code Playgroud)

这使:

[[[['A'],'和',['B'],'和',[[['C'],'或',[['D'],'和',['F ']]]]],'或',[['F'],'和',['G']]]]]

现在我该如何处理这个结果来实现所需的输出?我会很乐意帮助你.我试过pyparsing但我对其他可能更好的模块开放.

提前致谢.

python boolean-logic pyparsing

5
推荐指数
1
解决办法
111
查看次数