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
-