Задание №15
«Слова в typedef»

Описание задачи
Язык Си часто ругают за синтаксис деклараций, особенно когда в них имеются указатели на функции. В самых тяжелых случаях декларации перенасыщены скобками и префиксными операторами `*', и прочитать их слева направо практически невозможно. Необходимо написать программу, которая по заданному описанию декларации генерирует соответствующую конструкцию typedef.

Например:

Описание Семантика Декларация
ppint_t * * int Тип ppint_t - указатель на указатель на int typedef int ** ppchar_t;
f_t ( ) * int Тип f_t - функция, возвращающая указатель на int typedef int * f_t( );
pf_t * ( ) int Тип pf_t - указатель на функцию, возвращающую int typedef int (* pf_t)( );
myarr_t * [100] int Тип myarr_t - указатель на массив[100] из int typedef int (* myarr_t) [100];
cool_t ( ) * [ ] * ( ) int Тип cool_t - функция, возвращающая указатель на массив[ ] из указателей на функцию, возвращающую int typedef int (* (* cool_t( )) [ ]) ( );
coolest_t [10] * ( ) * [5] int Тип coolest_t - массив[10] из указателей на функцию, возвращающую указатель на массив[5] из int typedef int (* (* coolest_t [10]) ( ) ) [5];

Усложнение (по желанию студента):

  • генерировать конструкцию typedef без лишних скобок;
  • генерировать также семантическое описание (без сокращений слов, расставляя запятые и окончания в зависимости от падежа).

Упрощение (по желанию студента, со снижением итоговой оценки): сделать из программы только безмолвную утилиту def2decl infile outfile

Функциональные требования:
  1. Программа должна быть реализована в консоли (графический или текстовый режим по выбору студента). Использование визуальных средств должно быть согласовано с преподавателем.
  2. Пользовательский интерфейс должен предоставлять возможность выбора файла с описаниями, просмотра исходного текста и результата преобразования одновременно, а также возможность редактирования исходного текста и результата. В режиме "ручного" ввода описания следует предусмотреть возможность выбора символов описания из списка. За основу можно взять интерфейс Turbo-оболочки от Borland Pascal 7.0.
  3. Необходимо предусмотреть возможность запуска программы в пакетном режиме: без интерфейса прочитал исходный файл, записал результат в выходной файл.