Skip to content

Latest commit

 

History

History

A

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

A. Разбор утверждения

Имя входного файла:                 стандартный ввод
Имя выходного файла:                стандартный вывод
Ограничение по времени:             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))))