我有以下形式的字符串表达式:
"( ( ( 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。然后我创建的方法就是基于此,但对每种表达式类型都非常特定。我想在这里发布我的代码,但它非常长且复杂,因此是无用的
我想知道我是否想得太多了,是否有一种更简单的方法来解析上面给出的一般表达式
目前没有回答
相关问题 更多 >
编程相关推荐