In article <20030328080008J.maki / rubycolor.org>, TAKAHASHI Masayoshi <maki / rubycolor.org> writes: > 人間が脳内構文解析を行う場合、計算機のように一文字ずつ字句解析 > →tokenごとに構文解析、という流れで行ってはいないように思います。 > むしろ、Prologのように;-)、なんらかの条件によるマッチングを > 行い、それができる場合は先に進めたり、場合によっては後戻りを > したり、という風に進めていっているように感じます。 > # もちろん人間はProlog処理系ではないので、上から順にパターン > # を適用していくわけではないです。Guardの記述力が強力で、 > # できるだけ分岐しないようなGuarded Horn Clauseみたいな感じ?(謎) とりあえず pattern match 時に juxtaposition が associative である必要 はありそうですが、あまりよくわかりません。 ちょっと Ruby で実装してみて頂けませんか? (嘘) > さて、正規表現を解釈していく場合、個々の文字を見る前に、 > まず丸カッコ「()」やカギカッコ「[]」によって、おおざっぱな > tokenizeを行いたくなる気がします。この時、カッコの前に > 「\」がついていれば、それはこの段階のtokenizeに使うカッコ > ではない、ということになります。 もしかしたら、エスケープされた x を探すのに単純に /\\x/ と書いてしまう という間違いを時おり見掛けるのはそのせいなのかも知れないですねぇ。実際 には abc\xdef の中のは正しく見つけられても、abc\\xdef の中のも間違って 見つけちゃうのに。 > さらに、「()」は入れ子になる > が、「[]」は入れ子にならない、というルールも脳内に働いて > います。 > ここで「[a-z-]]」という記号列があったとします。この場合、 > 「[a-z-]」と「[a-z-]]」とでルールが適用される条件が複数ある > ので、どっちのルールを適用するかを迷ってしまいます。これが > 「ちかちかする」という表現の意味、でしょうか。 ふむ。character class 外の ] も警告したほうがいいかも。 > 次に「[a-z-]」が与えられた場合、「[]」の中を見ていくわけです > が、この場合に「]」はすでに使われているので、「z-]」という > 範囲指定は考慮されません。いや、バックトラックする可能性も > ありますが、「先頭と末尾の-は別扱い」という脳内ルールが > ストレスなく適用されるので、この場合はバックトラックしません。 なるほど。 > とはいえ、空白sensitiveな文法や多重代入での教訓から、「凝りはじめると > どんどん複雑になる(のでほどほどにしておいた方がいいかも)」というのも、 > (弱気な)Ruby使いの立場に感じます。 そうですか? やはり Ruby は Ruby らしく Ruby のやりかたを極めてもらわないと。 > YEN SIGN そのものの字面はともかく、YEN SIGN がそれ以外の文字に > 紛れて多数入っていると、読みにくさが増すようです。 それは REVERSE SOLIDUS でも同じように思います。REVERSE SOLIDUS と YEN SIGN の違いによる影響は別の原因なんじゃないでしょうか。 > 上の説明が説明になっているといいんですが。 > 「欲する」というのはルールに感情移入している見方でちょっと > わかりにくそうだったので、上記説明ではそういうのは排して > 記述してみました。 うーむ。算術式における優先順位に似たものではないんですか? ... + x * ... という式で、+ が右の要素を取り込む力と * が左の要素を取 り込む力を比較すると、* の力の方が強いので x は * の引数になるわけです。 そういうような力じゃないんでしょうか? > 左右ですか? それはないです。「[」の右に「^」があるケースは > 別ルールになってます。が、それは「[]」のルールが適用された > 後に適用されます。 ふぅむ。 > [^-] は別にいいんですが、[^-a] はちょっと見づらいですね。 > 「[-」と「-]」という文字列の場合のみ例外、というつもりになって > いるのかも。 では、[--:] と [#--] については? > 「点がついた <, =, >」って「・>」みたいなやつでしたっけ。 はい、そうです。 > parse戦略が違う(演算子順位行列や順位関数を作っているわけ > ではない)ので関連はなさそうな気もしますが、気がするだけ > かもしれません。 どこがくっついてどこがくっつかないのか、という判断基準という意味で関連 があるような気がしたんですが。 > (↑読みにくい) > [abcd-f-hijk] > [^-abc] > [-abc], [^-], [abc-] > (↓読みやすい) > > です。やっぱり「-」は「[」か「]」にくっついていてほしい。 なるほど。では、 [--abc] [ab%--] も入れるとどういう順序になりますか? -- [田中 哲][たなか あきら][Tanaka Akira]