2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 удалить комментарии из файла
Сообщение05.03.2009, 00:04 
Аватара пользователя


23/01/08
565
Есть файл filename.cpp. Нужно удалить из него все комментарии. Проблема в том, что символы "//", "/*" могут быть в кавычках, то есть могут использоваться для вывода на экран, например. Соответственно, и кавычки могут быть в самих коментариях. Получается замкнутый круг, из которго я пока никак не выйду :(

 Профиль  
                  
 
 
Сообщение05.03.2009, 11:03 
Аватара пользователя


21/10/05
167
Иркутск
А кавычки и символы комментария // на одной строке идут или могут быть на разных?

 Профиль  
                  
 
 
Сообщение05.03.2009, 11:46 
Заслуженный участник


11/05/08
32166
Spook в сообщении #191800 писал(а):
Есть файл filename.cpp. Нужно удалить из него все комментарии. Проблема в том, что символы "//", "/*" могут быть в кавычках, то есть могут использоваться для вывода на экран, например. Соответственно, и кавычки могут быть в самих коментариях. Получается замкнутый круг, из которго я пока никак не выйду

Заведите два флажка -- "быть внутри комментария" и "быть внутри строковой константы". При начале просмотра файла оба флажка устанавливаем в FALSE.

Если встречаем слэш, то:
* если мы внутри строки, то интерпретируем как обычный символ;
* если внутри комментария, то сбрасываем флажок комментария и сам слэш в выходной файл не выводим;
* если вне строки и вне комментария, то устанавливаем флажок комментария и сам слэш опять же не выводим.

Если встречаем кавычку, то:
* если мы внутри строки, сбрасываем флажок строки;
* если внутри комментария, просто игнорируем (т.е. не выводим в выходной файл);
* если вне строки и вне комментария, то устанавливаем флажок строки.

Просмотр файла проще вести не в строковом, а в посимвольном режиме. В выходной поток отправляем очередной символ тогда и только тогда, когда мы не находимся в режиме "комментарий".

Ну там ещё чисто технические детали насчёт того, как поймать сам "слэш". И как отслеживать вложенные комментарии -- придётся вместо просто флажка ввести переменную "уровень вложенности". И как опознавать символ кавычки, если он содержится в самой строке.

 Профиль  
                  
 
 
Сообщение06.03.2009, 12:58 
Аватара пользователя


23/01/08
565
Cat, могут быть как угодно, то есть как программист наоставляет комментариев, так и будет.
ewert, спасибо, вроде реализовал, правда обошелся без уровней вложенности.

 Профиль  
                  
 
 
Сообщение06.03.2009, 19:39 


21/03/06
1545
Москва
А вопрос - зачем удалять комментарии, если не секрет?

 Профиль  
                  
 
 
Сообщение06.03.2009, 20:44 
Заслуженный участник


11/05/08
32166
Ну, во-первых, просто хоцца. А во-вторых -- это может быть начальной стадией анализа собственно кода.

 Профиль  
                  
 
 
Сообщение06.03.2009, 21:51 


21/03/06
1545
Москва
Цитата:
Ну, во-первых, просто хоцца.

Не аргумент.

Цитата:
А во-вторых -- это может быть начальной стадией анализа собственно кода.

Не понял...

 Профиль  
                  
 
 
Сообщение06.03.2009, 22:16 
Заслуженный участник


11/05/08
32166
а чего тут понимать. Комментарии -- замусоривают код и, естественно, их надобно удалить прежде, чем дело дойдёт до анализу собственно алгоритму (если, естественно, дойдёт).

 Профиль  
                  
 
 
Сообщение06.03.2009, 23:35 


21/03/06
1545
Москва
Цитата:
а чего тут понимать. Комментарии -- замусоривают код и, естественно, их надобно удалить прежде, чем дело дойдёт до анализу собственно алгоритму (если, естественно, дойдёт).

Хрена себе заявление. Сильно!

 Профиль  
                  
 
 
Сообщение07.03.2009, 11:35 
Заслуженный участник


11/05/08
32166
Имеется в виду попытка синтаксического анализа, а не смыслового. Например, можно попытаться написать программку, переводящую сишный код в паскалевский. Тогда комментарии будут мешать.

 Профиль  
                  
 
 
Сообщение07.03.2009, 14:13 
Аватара пользователя


23/01/08
565
У меня была такая конечная цель: кол-во строк реального кода. Это одна из часто используемых "метрик" в программированиее больших проектов. Но, между прочим, тут нужно организовать флаги и пройти несколько технических деталей по отлову апострофов и кавычек, поэтому мне задачка показалась интересной, ее я и стал кодить (было что-то типа домашнего задания на выбор).

 Профиль  
                  
 
 
Сообщение07.03.2009, 14:21 
Заслуженный участник


11/05/08
32166
Вообще-то "реального кода" -- это некоторая условность, в одной строке может присутствовать несколько операторов или фрагментов оператора (строго формально организованный тест не очень-то читабелен).

Ну и кроме кроме комментариев надо позаботиться о выкидывании пустых строк, это проще сделать вторым проходом.

 Профиль  
                  
 
 
Сообщение07.03.2009, 15:14 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
А если ещё нужно "реально работающего кода" --- тады ой! :lol:

 Профиль  
                  
 
 
Сообщение07.03.2009, 17:34 


21/03/06
1545
Москва
Любой СИ-код можно уместить на 1-й строке по стандарту языка. Другое дело что у конкретных компиляторов как правило есть ограничение на длину строки.

И абсолютно непонятно, что же такое измеряет параметр "кол-во строк кода"... Раньше правда (в СССР) труд программсита оплачивался в кол-ве написанных и отлаженных строк кода в день. Нормы были что-то типа 10 ассемблерных строк в день :).

 Профиль  
                  
 
 
Сообщение07.03.2009, 18:03 
Заслуженный участник


15/05/05
3445
USA
e2e4 писал(а):
Раньше правда (в СССР) труд программсита оплачивался в кол-ве написанных и отлаженных строк кода в день.
Еще раньше это появилось в "не-СССР".
Кроме того, использовались метрики качества записи кода, типа: среднее число операторов в строке; среднее число строк комментариев на оператор; и т.п. Выход за рекомендованные границы таких параметров снижал "стоимость строки".

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group