Shell-скрипт, убирающий все комментарии из исходников

Маленький 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

Похожий бред:

Shell-скрипт, убирающий все комментарии из исходников: 4 комментария

    • Ну как жеж как жеж… чтобы когда исходники продаешь потом к тебе приходили и спрашивали за дополнительную деньгу — а что вот тут написано, а что вот там…

      Ваще в комментариях обычно накапливается много всякого шлака, матов и пр… А те два-три ценных коммента можно потом обратно в файл вписать.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Protected by WP Anti Spam