Маленький shell/sed скриптик, который убирает все комментарии из C исходника. Сам код при этом остается нетронутым.
Перед запуском нужно удостовериться, что код содержит только синтаксически-верные комментарии:
- Начинающиеся с // и заканчивающиеся окончанием строки;
- Начинающиеся с /* и заканчивающиеся */ (могут быть многострочными);
- Вложенные комментарии запрещены.
Как им пользоваться
$ ./script.sed < input.c
$ ./script.sed < input.c > output.c
$ for c in *.c; do script.sed < $c > /tmp/zyzcc.c; /bin/cp -f /tmp/zyzcc.c $c; done
Скрипт
#! /bin/sed -nf
# Remove C and C++ comments, by Brian Hiles (brian_hiles@rocketmail.com)
# Sped up (and bugfixed to some extent) by Paolo Bonzini (bonzini@gnu.org)
# Works its way through the line, copying to hold space the text up to the
# first special character (/, ", '). The original version went exactly a
# character at a time, hence the greater speed of this one. But the concept
# and especially the trick of building the line in hold space are entirely
# merit of Brian.
:loop
# This line is sufficient to remove C++ comments!
/^/// s,.*,,
/^$/{
x
p
n
b loop
}
/^"/{
:double
/^$/{
x
p
n
/^"/b break
b double
}
H
x
s,n(.[^"]*).*,1,
x
s,.[^"]*,,
/^"/b break
/^\/{
H
x
s,n(.).*,1,
x
s/.//
}
b double
}
/^'/{
:single
/^$/{
x
p
n
/^'/b break
b single
}
H
x
s,n(.[^']*).*,1,
x
s,.[^']*,,
/^'/b break
/^\/{
H
x
s,n(.).*,1,
x
s/.//
}
b single
}
/^/*/{
s/.//
:ccom
s,^.[^*]*,,
/^$/ n
/^*//{
s/..//
b loop
}
b ccom
}
:break
H
x
s,n(.[^"'/]*).*,1,
x
s/.[^"'/]*//
b loop
А нахрена?
Что нахрена?
Комментарии зачем удалять? Чтоб интересней разбираться было?
Ну как жеж как жеж… чтобы когда исходники продаешь потом к тебе приходили и спрашивали за дополнительную деньгу — а что вот тут написано, а что вот там…
Ваще в комментариях обычно накапливается много всякого шлака, матов и пр… А те два-три ценных коммента можно потом обратно в файл вписать.