Главная > Форматирование программы
1993

Декларативная часть (описание переменных) во многих языках программирования высокого уровня выглядит красивее, если текст специальным образом отформатирован по колонкам. Ваша задача написать программу, которая форматирует декларативную часть, написанную на некотором языке программирования.

Исходные данные состоят не более чем из 50 строк, каждая из которых содержит (в указанном порядке):

  • идентификатор (имя переменной);
  • символ двоеточие (:);
  • идентификатор (тип переменной);
  • символ точка с запятой (;);
  • необязательный комментарий, который начинается с двойного тире (--) и продолжается до конца строки.
Пробелы между любыми двумя пунктами могут как отсутствовать, так и присутствовать в любом количестве. Идентификатор может состоять из больших и маленьких латинских букв, цифр и символа подчеркивания (_). Текст комментария содержит по крайней мере один символ.

Программа должна отформатировать заданный текст описания по следующим правилам:

  • Имена переменных начинаются с третьей колонки.
  • Все двоеточия расположены в одной колонке, через одну после самого длинного имени переменной.
  • Идентификатор типа идет через пробел после двоеточия.
  • Точка с запятой расположена непосредственно после идентификатора типа, без пробелов.
  • Все символы начала комментария (--) расположены друг под другом, через две колонки после самого длинного описания типа.
  • Первое слово комментария начинается через пробел после символа начала комментария (--).
Исходные данные программа должна считывать из файла PRINT.DAT, а отформатированный текст помещать в файл PRINT.SOL.


Пример

print.dat
code: codeblock;
ident:type;
 lines : integer;
 linenum :  integer ; -- line number counter for loop
                                       maxidentlen : integer ;
 dummy:                                              integer;
list     :   array_of_real    ;  --This is a big list of things;
print.sol
  code        : codeblock;
  ident       : type;
  lines       : integer;
  linenum     : integer;       -- line number counter for loop
  maxidentlen : integer;
  dummy       : integer;
  list        : array_of_real; -- This is a big list of things;

 
Hosted by uCoz