Учитывая строку типа: '~ a & ~ b & (~ c | ~ a) -> c'
Я хочу сгенерировать список, содержащий все подвыражения этого утверждения, а именно:
- (~c|~a)
- ~a & ~b & (~c | ~a)
- ~a & ~b & (~c | ~a) -> c
в список. У меня уже есть парсер, который может найти:
- [[['~', 'a', '&', '~', 'b', '&', ['~', 'c', '|', '~', 'a']], '@', 'c']]
Отсюда я хочу последовательно сгруппировать каждый список в свое собственное утверждение и оценить каждый из них как подсписок, а именно я хочу найти в списке выше:
- ['~', 'c', '|', '~', 'a']
- ['~', 'a', '&', '~', 'b', '&', ['~', 'c', '|', '~', 'a']]
- [[['~', 'a', '&', '~', 'b', '&', ['~', 'c', '|', '~', 'a']], '@', 'c']]
Может ли кто-нибудь дать мне совет, как этого добиться? Я хочу сделать это рекурсивно, но я не смог найти решение.
Моя общая цель - создать средство оценки логических выражений, поэтому, если у кого-то есть рекомендации по этому вопросу, это будет оценено.