Кусровая по теме "Теория языков программирования"

Описание
Написать программу, которая будет принимать на вход произвольную контекстно-свободную грамматику и выполнит преобразование
её к каноническому виду. Преобразование осуществлять поэтапно,
отображая результат на каждом из этапов. Программа должна проверить построенную грамматику на эквивалентность исходной: по обеим
грамматикам сгенерировать множества всех цепочек в заданном пользователем диапазоне длин и проверить их на идентичность. Для подтверждения корректности выполняемых действий предусмотреть возможность корректировки любого из построенных множеств пользователем
(изменение цепочки, добавление, удаление…). При обнаружении несовпадения должна выдаваться диагностика различий – где именно несовпадения и в чём они состоят.