PyParsing: Разбор класса 'pyparsing.ParseResults'
Пишу анализатор логических выражений с помощью PyParsing, получил класс pyparsing.ParseResults который выглядит следующим образом:
[[[[['A1'], 'and', ['not', ['B2']], 'and', [[['C3'], 'or', [['D3'], 'and', ['F2']]]]], 'or', [['F2'], 'and', ['G2']]]]]
Вопрос в том, как разобрать получившийся экземпляр класса до ответа.
В моём случае A1, B2 - переменные содержащие float
not - вернёт отрицательное значение операнда(not 0.5 = -0.5)
and - должен выбрать минимум из операндов(0.2 and 0.3 and 0.4 = 0.2)
or - должен выбрать максимум из операндов(0.2 or 0.3 or 0.4 = 0.4)
Код:
import pyparsing as pp
def parsing(parse_string):
complex_expr = pp.Forward()
vars = pp.Word(pp.alphas, pp.alphanums)
clause = pp.Group(vars ^ (pp.Suppress("(") + complex_expr + pp.Suppress(")") ))
expr = pp.infixNotation(clause,[
('not', 1, pp.opAssoc.RIGHT,),
("and", 2, pp.opAssoc.LEFT, ),
("or", 2, pp.opAssoc.LEFT, ),])
complex_expr << expr
parse_result=complex_expr.parseString(parse_string)
return parse_result
parse_result = parsing('( A1 and not B2 and ( C3 or D3 and F2 ) or F2 and G2 )')```