Имя входного файла: стандартный ввод
Имя выходного файла: стандартный вывод
Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт
На вход вашей программе дается утверждение в следующей грамматике:
⟨Файл⟩ ::= ⟨Выражение⟩
⟨Выражение⟩ ::= ⟨Дизъюнкция⟩|⟨Дизъюнкция⟩`->'⟨Выражение⟩
⟨Дизъюнкция⟩ ::= ⟨Конъюнкция⟩|⟨Дизъюнкция⟩`|'⟨Конъюнкция⟩
⟨Конъюнкция⟩ ::= ⟨Отрицание⟩|⟨Конъюнкция⟩`&'⟨Отрицание⟩
⟨Отрицание⟩ ::= `!'⟨Отрицание⟩|⟨Переменная⟩| `('⟨Выражение⟩`)'
⟨Переменная⟩ ::= (`A'...`Z'){`A'...`Z'|`0'...`9'|`''}*
Имена переменных не содержат пробелов. Между символами оператора `->' нет пробелов. В остальных местах пробелы могут присутствовать. Символы табуляции и возврата каретки должны трактоваться как пробелы. Вам требуется написать программу, разбирающую утверждение и строящую его дерево разбора, и выводящую полученное дерево в единственной строке без пробелов в следующей грамматике:
⟨Файл⟩ ::= ⟨Вершина⟩
⟨Вершина⟩ ::= `('⟨Знак⟩`,'⟨Вершина⟩`,'⟨Вершина⟩`)'
| `(!'⟨Вершина⟩`)'
| ⟨Переменная⟩
⟨Знак⟩ ::= `->' | `|' | `&'
⟨Переменная⟩ ::= (`A':::`Z'){`A'...`Z'|`0'...`9'|`''}*
В единственной строке входного файла дано утверждение в грамматике из условия. Размер входного файла не превышает 100 КБ.
В единственной строке выходного файла выведите дерево разбора утверждения без пробелов.
стандартный ввод
!A&!B->!(A|B)
стандартный вывод
(->,(&,(!A),(!B)),(!(|,A,B)))
стандартный ввод
P1'->!QQ->!R10&S|!T&U&V
стандартный вывод
(->,P1',(->,(!QQ),(|,(&,(!R10),S),(&,(&,(!T),U),V))))