相关疑难解决方法(0)

以二叉树方式解析pyparsing中的复杂逻辑表达式

我试图解析复杂的逻辑表达式,如下所示;

x > 7 AND x < 8 OR x = 4
Run Code Online (Sandbox Code Playgroud)

并将解析后的字符串作为二叉树.对于上面的表达式,预期的解析表达式应如下所示

[['x', '>', 7], 'AND', [['x', '<', 8], 'OR', ['x', '=', 4]]]
Run Code Online (Sandbox Code Playgroud)

'OR'逻辑运算符的优先级高于'AND'运算符.括号可以覆盖默认优先级.更一般地说,解析后的表达式应该是这样的;

<left_expr> <logical_operator> <right_expr>
Run Code Online (Sandbox Code Playgroud)

另一个例子是

input_string = x > 7 AND x < 8 AND x = 4
parsed_expr  = [[['x', '>', 7], 'AND', ['x', ',', 8]], 'AND', ['x', '=', 4]]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我想出了这个简单的解决方案,遗憾的是它无法以二叉树方式生成解析表达式.operatorPrecedence似乎没有帮助我这里有连续相同的逻辑运算符,如前面的例子.

import pyparsing as pp
complex_expr = pp.Forward()
operator = pp.Regex(">=|<=|!=|>|<|=").setName("operator")
logical = (pp.Keyword("AND") | pp.Keyword("OR")).setName("logical")
vars = pp.Word(pp.alphas, pp.alphanums + "_") | pp.Regex(r"[+-]?\d+(:?\.\d*)?(:?[eE][+-]?\d+)?")
condition …
Run Code Online (Sandbox Code Playgroud)

python pyparsing

19
推荐指数
2
解决办法
7389
查看次数

标签 统计

pyparsing ×1

python ×1