一种分析嵌套表达式的通用方法

2024-09-30 03:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下形式的字符串表达式:

"( ( ( D & E ) | B ) & ( A | C ) )"
"( ( A & B ) | ( C ^ D ) )"
"( ( ( A & B ) | ( C ^ D )  ) & E )"
"( E & ( A & ( B   | ( C ^ D ) ) ) )"

列表['A', 'B', 'C', D', 'E']中的元素表示系统,列表['&', '|', '^']中的元素表示布尔运算

我需要根据括号的嵌套来解析每个表达式。每个表达式都应该从最内层的嵌套语句进行求值

例如:"( ( ( D & E ) | B ) & ( A | C ) )"将被解析为以下列表

[('C', 'A'),
 ('C', '( C | A )'),
 ('A', '( C | A )'),
 ('E', 'D'),
 ('E', '( E & D )'),
 ('D', '( E & D )'),
 ('B', '( E & D )'),
 ('( B | ( E & D ) )', '( C | A )')]

"( ( A & B ) | ( C ^ D ) )"将被解析为:

[('A', '( A & B )'),
 ('B', '( A & B )'),
 ('C', '( C ^ D )'),
 ('D', '( C ^ D )'),
 ('( A & B )', '( C ^ D )')]

等等

预期结果从表达式中最内层的嵌套表达式开始,例如( A & B ),并将每个系统元素与此进行比较,以获得列表元组元素('A', '( A & B )')('B', '( A & B )'),然后在表达式中向外遍历,直到到达最外层的表达式,例如('( A & B )', '( C ^ D )')

为了获得这些表达式在解析树中的求值顺序(['D', 'C', '^', 'B', 'A', '&', '|']对于第二个示例),我创建了基于Miller和Ranum的解析树算法的方法,如这里的Parse Tree。然后我创建的方法就是基于此,但对每种表达式类型都非常特定。我想在这里发布我的代码,但它非常长且复杂,因此是无用的

我想知道我是否想得太多了,是否有一种更简单的方法来解析上面给出的一般表达式


Tags: 方法字符串元素示例列表顺序表达式系统

热门问题