ФлеймФорумОбщее

Удаление всех комментариев из кода ONLINE (6 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#75
11:10, 19 авг 2015

Триграфы выпилили из стандарта крестов в последнем, так что можно больше не поддерживать

#76
11:13, 19 авг 2015

Zheka_Dnepr
Зачем эта прога? И зачем писал?

programina
> Отправим программу вычищалку на свой емайл.
А он сама запустилась и все вычистила вместе кредитками. Годно, поддержу проэкт

#77
11:38, 19 авг 2015

Zefick
>   Что именно не правильно? Ты придумал пример, и даже не знаешь, как он
> работает?
Есть код:

int main() {
  /*
char* d  ="/*\
\
//\
*/const char* t= "wrong";
*/
const char* t= "good";

Комментарием в данном коде является только:

  /*
char* d  ="/*\
\
//\
*/

Тоесть после удаления комментариев должен остаться следующий код:

int main() {
const char* t= "wrong";
*/
const char* t= "good";

Конечно он не валиден и в нормальных компиляторах не компилируется, но gcc это хавает.

#78
11:45, 19 авг 2015

Che@ter
> Комментарием в данном коде является только
  Нет, комментария тут на самом деле даже два, а не один (что отлично видно в моих тестах). Как ты это вообще додумался написать, если не понимаешь ничего? GCC это нормально обрабатывает, у меня тоже получилось. Совпадение? Не думаю.

#79
11:54, 19 авг 2015

Che@ter
gcc, icc и студия компиляют, только шланг зафейлился

#80
12:14, 19 авг 2015

Ясно, когда я тестировал в студии, этот код был с табуляцией и 

 /*
char* d  ="/*\
\
/

Не воспринимался одним комментарием, так как между * и / был символ табуляции...
Без табуляции таки да, это один коммент. Я чот провтыкал этот момент.

#81
12:46, 19 авг 2015

Zheka_Dnepr
> дай пасты почитать что это такое?
http://alenacpp.blogspot.ru/2006/02/blog-post.html

laMer007
> Триграфы выпилили из стандарта крестов в последнем, так что можно больше не
> поддерживать
В последнем это каком? В каком-нибудь С++51?

#82
12:54, 19 авг 2015

laMer007
>Триграфы выпилили из стандарта крестов в последнем, так что можно больше не поддерживать
Линк? В n3797 ещё есть.

#83
13:13, 19 авг 2015

Hardcode
> gcc, icc и студия компиляют
А редактор студии подсвечивает нормально? 2005 у меня лажает.

+ Показать
#84
13:30, 19 авг 2015

laMer007
> Зачем эта прога? И зачем писал?
для проекта http://findmelody.org много г...на в виде комментариев удалил, искал сначала решение в интернете, ничего похожего не нашел, написал свой код, потом подумал, что решение скидывать свои коды на сторонний ресурс - не правильное, опасное, и запилил на одном из своих доменов этот скрипт, чтобы коды теперь я не скидывал, а мне скидывали

#85
14:30, 19 авг 2015

Zheka_Dnepr
Хохо... Проси скидывать всем проектом с мейкфайлами

#86
21:06, 19 авг 2015

entryway
Я в http://rextester.com/ и в http://gcc.godbolt.org/ проверял

#87
1:03, 20 авг 2015

О, я недавно писал удаление комментов в рамках другой, более обширной задачи.
Моё решение адекватно работает с вложенными комментариями, бекслешами в конце строки и строковыми литералами.
Обработку триграфов, правда, добавлять не стал, так как они скоро устареют. Выглядит так:

const std::string singleLineComment = "//.*";
const std::string multiLineComment = "[/][*][^]*?[*][/]";
const std::string charLiteral = "'(\\\\'|[^'])*?'";        // '(\\'|[^'])*?'
const std::string stringLiteral = "\"(\\\\\"|[^\"])*?\"";  // "(\\"|[^"])*?"

const std::string comments = "(" + singleLineComment + ")|(" + multiLineComment + ")";
const std::string literals = "(" + charLiteral + ")|(" + stringLiteral + ")";

const std::string lineContinuation = "\\\\\\n"; // \\\n

void spliceLines(std::string& text)
{
    text = std::regex_replace(text, std::regex(lineContinuation), "");
}

void removeComments(std::string& text)
{
    auto reg = std::regex(comments + "|" + literals);
    std::match_results<std::string::iterator> match;
    auto it = std::begin(text);
    do
    {
        auto result = std::regex_search(it, std::end(text), match, reg);
        if (result)
        {
            if (match[1].matched || match[2].matched) // is comment
            {
                it = text.erase(match[0].first, match[0].second);
            }
            else
            {
                it = match[0].second;
            }
        }
        else
        {
            break;
        }
    }
    while (true);
}

spliceLines(text);
removeComments(text);
#88
12:41, 20 авг 2015

Зачем удалять комментарии в коде? Экзешник меньше получается да? :)

#89
12:56, 20 авг 2015

RadianTOR
Ну я С++11 атрибуты у классов и полей самостоятельно обрабатываю для своих нужд. Проэтому пришлось хотя бы в общих чертах распарсить С++.

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумОбщее

Тема в архиве.