NOCOM


  • Без комментариев
    NOCOM


Описание
Фирма Willisoft решила сделать открытыми исходные тексты своей всемирно известной программы Mistakes-2002. Но перед опубликованием президент фирмы потребовал удалить все комментарии в исходных текстах, что проще и быстрее всего сделать, написав специальную программу. Программа Mistakes-2000 была написана на языке С++, в котором имеются две следующие возможности для комментирования:

/* любой текст от символов /* до */
// любой текст после // до конца строки

Если части текста программы были на разных строках, то они должны остаться на разных строках. Символы начала комментария внутри другого комментария игнорируются (комментарии не могут быть вложенными). Символы начала комментариев игнорируются и внутри строк в двойных кавычках. Внутри таких строк может встречаться символ двойной кавычки, если перед ним стоит символ '\' (обратная косая черта). Например, " Строка с символами \" между \" и \" " . Символ '\' используется в С++ для введения в строку специальных символов, например, самой обратной косой черты: " \\" . Идентификаторы в языке С++ составляются из строчных и прописных латинских букв, символа _ (подчеркивания) и цифр. Для упрощения задачи символьные константы (буквы в одинарных кавычках, например: 'A') в программе отсутствуют.

После удаления комментариев из строки нужно:

  1. удалить все пробелы в конце строки (остальные пробелы не удаляются)

  2. удалить пустые (не содержащие текста) строки

  3. если при удалении комментария два идентификатора (ключевых слова) или числа соединяются, то вставить один пробел. Например, int/*целое*/a; должно превратиться в int a;

Задача
Составьте программу
NOCOM, которая:

  • во входном файле INPUT.TXT считывает исходный текст синтаксически правильной программы

  • в выходной файл OUTPUT.TXT выводит тот же текст без комментариев, согласно требованиям


Например:

INPUT.TXT
/***************************************
   Программа Mistakes-2000
   (c) Willisoft, 1980, 1984-1989, 2000
****************************************/
#include <stdio.h>

int/* для возврата кода ошибки*/main(void)
{ char *str;
  int age;

  // Ввод имени
  printf("Введи свое имя:");
  scanf("%s", str); /* Память для str не выделена! */
  // Ввод возраста
  printf("Введи свой возраст:");
  scanf("%d", d);   // Пропущен &

  printf("%s,\n ваш возраст в секундах %d\n", /* В году 365.25 дней
     */  str, d*60*60*24*365); // Результат будет правилен только для
                               /* 32-битной версий компилятора */
  return 0;
}

OUTPUT.TXT
#include <stdio.h>
int main(void)
{ char *str;
  int age;
  printf("Введи свое имя:");
  scanf("%s", str);
  printf("Введи свой возраст:");
  scanf("%d", d);
  printf("%s,\n ваш возраст в секундах %d\n",
  str, d*60*60*24*365);
  return 0;
}


Замечание
Ввод осуществляется из файла INPUT.TXT, а вывод в файл OUTPUT.TXT. Формат входного файла соответствует спецификации, дополнительные проверки не нужны. Запрещается открывать для ввода-вывода другие файлы, выводить содержимое теста на экран, изменять вектора прерываний. Программа main() должна вернуть 0 (return 0;)!