前田です。 # ruby-devへ振りますが、金子さんはruby-devに入ってらっしゃる # のでしょうか。 In message "[ruby-list:7406] Re: string replace" KANEKO Naoshi <wbs01621 / mail.wbs.or.jp> wrote: |でも、\ 1バイトを確実に変換するためには \\\\ と4つ重ねなければ |いけなというのはさすがにわかりにくいと思います。 |あと、'\\' は \ に対するエスケープですが、'\a' は a に対するエスケープ |でなく、\a そのものをさすというのも曖昧ですよね。 いっそのこと'を使う時はPascal風にエスケープするのはどうでしょう。 つまり、'そのものを文字列で扱いたい時は rbc0> '''' "'" のように'を連続させるわけです。 そうすれば、\をエスケープのために使う必要がなくなりますよね。 かなり大きな変更になってしまうのが難点ですが...。 -- 前田 修吾
--- parse.y.orig Fri Apr 10 00:28:02 1998 +++ parse.y Fri Apr 10 00:30:59 1998 @@ -2039,7 +2039,8 @@ strstart = sourceline; newtok(); - while ((c = nextc()) != term) { + for (;;) { + c = nextc(); if (c == -1) { sourceline = strstart; Error("unterminated string meets end of file"); @@ -2052,25 +2053,11 @@ else if (c == '\n') { sourceline++; } - else if (c == '\\') { + else if (c == term) { c = nextc(); - switch (c) { - case '\n': - sourceline++; - continue; - - case '\\': - c = '\\'; + if (c != term) { + pushback(c); break; - - case '\'': - if (term == '\'') { - c = '\''; - break; - } - /* fall through */ - default: - tokadd('\\'); } } tokadd(c);