Анализ логического выражения и преобразование его в дерево в Perl

У меня есть сложное логическое выражение, которое выглядит следующим образом:

((((!((cond1) || (cond2) || (cond3)) && (cond4))) && (cond5)) <= (((cond6) || (cond7) || (cond8)) || (cond9)))

Каждая строка содержит несколько десятков выражений. Допустимые логические знаки: || , && , ! и <= . <= означает ведет, как в a <= b означает, что b ведет к a.

Мне нужно просмотреть эти утверждения и проверить условия, так как некоторые из них Более не действителен. Я хочу иметь возможность преобразовать его в дерево, затем проверить каждый из его листьев (где каждый лист является условием), удалить ненужные листья и построить обратно полные и правильные выражения.

Я знаю, что каждый узел Дерево определяется парой из первой скобки и закрывающей его скобки, но я не знаю, как идентифицировать такие пары и как определить логический знак между ними.

Все знаки, кроме ! , находятся между двумя выражениями.

7
задан SIMEL 23 December 2010 в 10:45
поделиться