Shell / sed Program To Remove All C and C++ Comments From Program File
Write the shell / sed program which remove all the comments from a simple C program stored in your current directory. You can assume that the c source code contains only syntactically correct comments:
+ start with // and end with a newline
+ starting with /* and ending */ (can be multiline)
+ nesting of comments is not allowed
Make sure that C source is not changed at all.
How do I use this sed script?
$ ./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
Sample sed code to remove all comments from sed
#! /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
Please note that this program is copied from public domain.
Download - Email this to a friend - Printable version
Leave a Reply
We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!
Tags: c source code, public domain, sed command, sed remove c comments, shell ~ Last updated on: May 6, 2008

