#! /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 ### colorized by sedsed, a debugger and code formatter for sed scripts ### original script: http://sed.sf.net/grabbag/scripts/remccoms3.sed