HIRAUCHI Hideyuki
hira****@verys*****
2004年 7月 31日 (土) 15:24:59 JST
平内です。 LL Weekendの発表資料ですが、こんな感じにしようと思っています。 木のマッチをネタにマクロマンセーしようというのが狙いです。 何かおかしな点などありましたら、突っ込んでいただければ幸いです。 ※明日中にこの内容をPDFにして、実行委員会に提出します。 - RELAX NG http://www.kohsuke.org/relaxng/tutorial.ja.html - util.match http://www.hadaly.org/fuyuki/gauche/doc/gauche-refj_316.html#SEC350 --hira * 木のマッチ (マクロ万歳) 2004/08/08 LL Weekend hira****@verys***** * 木のマッチ - Andrew Wright のパターンマッチングマクロライブラリ - Scheme界ではポピュラー (since 1995) * パターンの記述力 (長所) ○ 木構造(入れ子)を表現できる ○ 要素毎に比較関数を設定できる ○ パターン変数に値をバインドできる (マクロパワーです) ○ 末尾要素の繰り返しが表現できる ○ パターンにand/or/notを適用できる * パターンの記述力 (短所・期待はずれな所) × 繰り返しの上限が指定できない (?が表現できない) × 途中要素の繰り返しはできない (意外と不便) × グループ化ができない (これまた不便) * 木のバリデータ(RELAX NG風)を実装してみた ○ サポートした機能 - zeroOrMore : * - oneOrMore : + - optional : ? - choice : | - group : () - attribute * 木のバリデータ(RELAX NG風)を実装してみた × サポートしなかった機能 - 途中要素の繰り返し - interleave (elementの出現順序を規定しない) - その他難しそうな機能 * 実装の勘所 - 基本的なマッチングは木のマッチで実現可能 - attributeは値バインドと失敗継続で実装 - optional,choice,groupはマクロで全展開 - 「実装してみた」と言いつつ、実はまだ何もやってない。(8/1現在) (ちゃんと実装できたかどうかは、当日までのお楽しみ) * マクロ万歳 - パターン変数による値のバインドは強力 - 言語をシームレスに拡張したと言える - こんなことが出来るのはマクロのおかげ ↓ マクロ万歳!