Задание №2
«Indent для C»

Описание задачи

Уж сколько раз твердили миру, что
"Лесенка" должна отражать структурную вложенность языковых конструкций. Рекомендуется отступ не менее 2-х и не более 8-и пробелов. Принятого отступа нужно придерживаться во всем тексте программы.",
да только все не впрок!
И всегда найдется программист, который не хочет/не может/не умеет делать лесенку в программе на Си. Помогите инвалиду, который не может ходить по лесенке -- сделайте ему лифт :).
В данном случае мы считаем, что в удобочитаемой программе языковые конструкции, комментарии и проч. написаны в стиле K&R (Brian Kernighan & Dennis Ritchie -- авторы языка Си, а не Kopyta & Roga :). Описание этого и других стилей можно найти в [6].
Требуется написать программу, которая преобразует текст (синтаксически верной) программы на Си в удобочитаемый, расставляя лесенку и проч. согласно стилю K&R. При этом, конечно, программа должна остаться синтаксически верной. Например:

До indent После indent
#include <stdio.h>
void main() {
printf("Hello, world!\n"); }
#include <stdio.h>
void
main()
{
printf(
"Hello, world!\n");
}
#include <stdio.h>
int i;
float r;
/* начало
программы */
int main() {
do
{
printf('введи целое положительное: ');
scanf("%d",&i); if (i<0) {
printf("ошибка!\n");} while (i >0);
r=3.14*i*i; printf( "Pi*i*i=%f\n",r);
return 0; }
#include <stdio.h>
int i;
float r;
/* начало программы */
int main()
{
do {
printf(
"введи целое \
положительное: "
);
scanf("%d", &i);
if (i<0) {
printf(
"ошибка!\n");
}
} while (i>0);
r=3.14*i*i;
printf("Pi*i*i=%f\n",r);
return 0;
}

Все параметры indent можно найти в [6]. Список параметров необходимо уточнить при составлении Соглашений о требованиях.

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

  • при просмотре выделять полужирным и/или цветом ключевые слова в тексте программы;
  • при просмотре выделять цветом внесенные изменения.

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

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