goer%sophist@GARGOYLE.UCHICAGO.EDU (Richard Goerwitz) (09/28/90)
Has anybody thought about the pathological split line literal?
tmp := []
while find("\"567_
#934.\355\\\'",read()) do # Unbelievable isn't it
put(tmp,"Field_1_
_78\'#\\\"YYY_
Continuing_String_
Literally_Pathetic#") # \\ "ack!" #\\
I confess that I hadn't thought about the split-line literal. I don't
use them myself, and generally don't like the look of code that does.
That's no excuse, though.
BTW, do you have a solution in mind?
We know that the underscore has to be the last thing on the line, except
for whitespace and comments. I'll bet it would be possible to modify the
procedures posted so that they look, not only for " and ' and \, but also
_. If the underscore is encountered, then you could tab past any spaces
and newlines (if present), and if either pos(0) or match("#") succeed,
then abort all attempts at ' and "-matching, and return &subject[1:&pos].
Just an off-the-cuff guess. If anyone cleans up our collective postings
and makes the _ thing work, could he or she please re-post the resulting
procedure?
-Richard
/alex@laguna.metaphor.COM (Bob Alexander) (09/28/90)
Wow -- the problems and solutions are coming in faster than I can
formulate a reply! Have to learn to type (and think) faster.
Another possible solution to the split-string-literal problem is simply
to make the variable that remembers the string literal delimiter
persistant (static or global). Using as an example the version I
previously posted, "delim" is the variable in question. The results
could be very wierd if the input program contains certain syntax
errors.
procedure trimcomment(s1) # s2
#
# Trim comments (and any trailing spaces) from Icon program text line "s1".
#
static delim
local c
s1 ? {
while tab(upto('"\'\\#')) do {
case c := move(1) of {
"#": if /delim then return trim(&subject[1:&pos - 1],' \t')
"\\": if \delim then {="^" ; move(1)} # in case he used "\^""
default: delim := if \delim then (if delim == c then &null) else c
}
}
}
return trim(s1,' \t')
end
-- Bob Alexander
Metaphor Computer Systems (415) 961-3600 x751 alex@metaphor.com
====^=== Mountain View, CA ...{uunet}!{decwrl,apple}!metaphor!alex