Задание №1
«Indent для Turbo Pascal»

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

Уж сколько раз твердили миру, что
"Лесенка" должна отражать структурную вложенность языковых конструкций. Рекомендуется отступ не менее 2-х и не более 8-и пробелов. Принятого отступа нужно придерживаться во всем тексте программы.",
да только все не впрок!

И всегда найдется программист, который не хочет/не может/не умеет делать лесенку в программе на Pascal'е. Помогите инвалиду, который не может ходить по лесенке -- сделайте ему лифт :).

Требуется написать программу, которая преобразует текст (синтаксически верной) программы на Turbo Pascal'е в удобочитаемый, расставляя лесенку. При этом, конечно, программа должна остаться синтаксически верной. Например:

До indent После indent
program hello; begin
writeln('Hello, world!') end.
program hello;
begin
writeln('Hello, world!')
;
end.
program myprog;
var i,r: integer;
{начало
программы}
begin
repeat
write('введи целое положительное: ');
readln(i); if i<0 then
writeln( 'ошибка!' ) until i >0;
r:=pi*sqr (i) ; writeln( 'Pi*i*i=',r)
end.
этот текст не компилируется!
пиши, что хочешь!
program myprog;
var i, r: integer;
{начало программы}
begin
repeat
write(
'введи целое положительное: ');
readln(i);
if i < 0 then
writeln(
'ошибка!');
until i > 0;
r := pi * sqr(i);
writeln(
'Pi*i*i=', r);
end.

Величина отступа, отступ есть пробелы или табуляция, удаление пустых операторов, добавлять ли `;' перед end, номер столбца , с которого должны начинаться комментарии, писать ли

while <условие> do begin
<операторы>;
end;

или

while <условие> do
begin
<операторы>;
end;

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

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

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

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

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