解析布尔搜索抽象语法树

时间:2018-04-27 11:37:49

标签: python parsing abstract-syntax-tree boolean-logic

我正在尝试构建一个Python解析器,它将采用“复杂”布尔搜索字符串并将它们解析为多个更简单的字符串,一个到一行。 e.g。

“(A或B)和(C或D)和(E或F)”转换为:

A AND C AND E

A AND C AND F

A AND D AND E

等...

这需要是可扩展的,以便最终可以使用其他布尔运算符(例如NOT,邻近运算符等)和任意括号深度。我已经找到了解析字符串并创建抽象语法树(AST)的部分。我遇到问题的部分是概念化如何在AST构建后解释它。

我的想法是创建一个算法来遍历AST并将其或多或少地转换为适当的位置,但实现让我感到厌烦。

举个简单的例子:

    AND                                  OR
OR - | - OR       =>               OR   --|---  AND
 |        |                        |             |
A-B      C-D                  OR   -    AND    B - D
                              |          |
                         AND  -   AND   B - C
                          |        |   
                        A - C    A - D 

这个想法是这是第一次传递,在第二次传递时,你在打印出结果时将“OR”分成单独的行。

但是我不确定你会用第一棵树做什么“做”,然后把它转换成第二棵树。如果在输入字符串中添加另一个AND,这很快就会变得复杂。我这太难了吗?

0 个答案:

没有答案