我正在尝试构建一个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,这很快就会变得复杂。我这太难了吗?