Обработать перлом сишные комменты (многострочные)

Модератор: Модераторы разделов

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Обработать перлом сишные комменты

Сообщение t.t »

Мне тут понадобилось по работе немного доработать свой обработчик исходников, конкретно -- нужно обрабатывать комментарии. Комментарии в языке такие же, как в сях: многострочные, заключённые в /* ... */ Что-то у меня голова уже квадратная и никак не приходит красивое решение как это сделать.. Буду благодарен, если кто-нибудь мне набросает для примера, скажем, как поудалять все такие комменты. Весь многострочный текст хранится в $_
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Обработать перлом сишные комменты

Сообщение madskull »

Код: Выделить всё

$_=~s:/\*.*?\*/::gs
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Обработать перлом сишные комменты

Сообщение t.t »

Спасибо. Никак этот ключ s запомнить не могу, а perldoc'а в cygwin'е нету. Весьма благода.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: Обработать перлом сишные комменты

Сообщение xorader »

(madskull @ Четверг, 14 Июля 2005, 12:14) писал(а):

Код: Выделить всё

$_=~s:/\*.*?\*/::gs



$_=~s:/\*.+\*/::gs

а так ? :-/
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Обработать перлом сишные комменты

Сообщение t.t »

(xorader @ Четверг, 14 Июля 2005, 15:33) писал(а):$_=~s:/\*.+\*/::gs

а так ? :-/
А так оно может захватить всё от начала первого комментария до конца последнего.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
madskull
Сообщения: 1019
Статус: Экс-металлюга

Re: Обработать перлом сишные комменты

Сообщение madskull »

(xorader @ Четверг, 14 Июля 2005, 15:33) писал(а):
(madskull @ Четверг, 14 Июля 2005, 12:14) писал(а):

Код: Выделить всё

$_=~s:/\*.*?\*/::gs



$_=~s:/\*.+\*/::gs

а так ? :-/


А так он у тебя съест все от первого /* до самого последнего */ в тексте.
"Жадность квантификаторов".
ArchLinux / IceWM
Спасибо сказали:
Аватара пользователя
xorader
Сообщения: 1030
Статус: собирающий миры
ОС: Debian

Re: Обработать перлом сишные комменты

Сообщение xorader »

Спасибо за разьяснение! Стормозил два раза:
1) показалась строка "$_=~s:/\*.*.\*/::gs" (так как не понял значения "?")
2) вытекает из предыдущего. Не знал следующего:
Рассмотрим пример: /.*a/ - можно ожидать, что с помощью этого выражения мы найдем часть текста до первого вхождения буквы а. На самом же деле мы получим, часть текста до последнего вхождения этого символа. Происходит это потому, что, натыкаясь на "*" парсер предпринимает попытку найти, как можно более длинную строку. Это называется "жадностью квантификатора". Её можно ограничить с помощью символа "?": /.*?a/. Теперь все будет работать правильно. То же касается и спецсимвола "+".
Molchanov Alexander (aka Xor)
*offtopic* - ololo!
Спасибо сказали: