2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 удалить комментарии из файла
Сообщение05.03.2009, 00:04 
Аватара пользователя
Есть файл filename.cpp. Нужно удалить из него все комментарии. Проблема в том, что символы "//", "/*" могут быть в кавычках, то есть могут использоваться для вывода на экран, например. Соответственно, и кавычки могут быть в самих коментариях. Получается замкнутый круг, из которго я пока никак не выйду :(

 
 
 
 
Сообщение05.03.2009, 11:03 
Аватара пользователя
А кавычки и символы комментария // на одной строке идут или могут быть на разных?

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

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

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

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

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

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

 
 
 
 
Сообщение06.03.2009, 12:58 
Аватара пользователя
Cat, могут быть как угодно, то есть как программист наоставляет комментариев, так и будет.
ewert, спасибо, вроде реализовал, правда обошелся без уровней вложенности.

 
 
 
 
Сообщение06.03.2009, 19:39 
А вопрос - зачем удалять комментарии, если не секрет?

 
 
 
 
Сообщение06.03.2009, 20:44 
Ну, во-первых, просто хоцца. А во-вторых -- это может быть начальной стадией анализа собственно кода.

 
 
 
 
Сообщение06.03.2009, 21:51 
Цитата:
Ну, во-первых, просто хоцца.

Не аргумент.

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

Не понял...

 
 
 
 
Сообщение06.03.2009, 22:16 
а чего тут понимать. Комментарии -- замусоривают код и, естественно, их надобно удалить прежде, чем дело дойдёт до анализу собственно алгоритму (если, естественно, дойдёт).

 
 
 
 
Сообщение06.03.2009, 23:35 
Цитата:
а чего тут понимать. Комментарии -- замусоривают код и, естественно, их надобно удалить прежде, чем дело дойдёт до анализу собственно алгоритму (если, естественно, дойдёт).

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

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

 
 
 
 
Сообщение07.03.2009, 14:13 
Аватара пользователя
У меня была такая конечная цель: кол-во строк реального кода. Это одна из часто используемых "метрик" в программированиее больших проектов. Но, между прочим, тут нужно организовать флаги и пройти несколько технических деталей по отлову апострофов и кавычек, поэтому мне задачка показалась интересной, ее я и стал кодить (было что-то типа домашнего задания на выбор).

 
 
 
 
Сообщение07.03.2009, 14:21 
Вообще-то "реального кода" -- это некоторая условность, в одной строке может присутствовать несколько операторов или фрагментов оператора (строго формально организованный тест не очень-то читабелен).

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

 
 
 
 
Сообщение07.03.2009, 15:14 
Аватара пользователя
А если ещё нужно "реально работающего кода" --- тады ой! :lol:

 
 
 
 
Сообщение07.03.2009, 17:34 
Любой СИ-код можно уместить на 1-й строке по стандарту языка. Другое дело что у конкретных компиляторов как правило есть ограничение на длину строки.

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

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

 
 
 [ Сообщений: 27 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group