goer%sophist@GARGOYLE.UCHICAGO.EDU (Richard Goerwitz) (09/28/90)
I just tried compiling
write("hel_ # this is a partial comment
lo")
and it didn't work. It seems obvious why. What a nightmare to parse!
Anyway, that makes our comment-stripping that much easier. How about
something like:
procedure strip_comments(s)
#######
#
# Commented-out portions of Icon code - strip 'em. Fails on lines
# which, either stripped or otherwise, come out as an empty string.
#
# I'd expect strip_comments to be used typically as follows:
#
# every write(strip_comments(!&input))
#
#######
local i, j, c, c2
s ? {
tab(many(' \t'))
find("#") | (return trim(tab(0),' \t'))
match("#") & fail
(s2 <- tab(find("#"))) ? {
c2 := &null
while tab(upto('_\\"\'')) do {
case c := move(1) of {
"\\" : {
if match("^")
then move(2)
else move(1)
}
"_" : {
if c2 == "\"" &
tab(many(' \t')) | &null &
pos(0)
then return trim(&subject, ' \t')
}
default: {
if \c2
then (c == c2, c2 := &null)
else c2 := c
}
}
}
/c2
}
return "" ~== trim((\s2 | tab(0)) \ 1, ' \t')
}
end
-Richard L. Goerwitz goer%sophist@uchicago.bitnet
goer@sophist.uchicago.edu rutgers!oddjob!gide!sophist!goer