キャプションの番号がどこまで行ったかよくわからなくなってきた。
Ripper の仕様を昨日言ったように変更しました。
うーむ、lib/ripper/ast.rb って LGPL なのか。 これだと Ruby にはとりこめないな。
(15:38)
そういえば「Ripperとは何か」について 書いたことがないような気がするので書いておく。 一言で。
Ripper は Ruby プログラムのパーサベアボーンキットだ!
え、ベアボーンキットって知らないなあ。 あれだよあれ、自作パソコンのケースと 電源とマザーボードだけセットにして売ってるやつ。 あとは自分で CPU とメモリと HDD を買って付けるとできあがるんだよ。
Ripper も同じ。 Ruby プログラムのパーサの一番面倒でどーでもいいところが ライブラリ化されていて、あとはおいしいとこだけ作ってやれば パーサができるわけですよ。
もちっとわかってる人向けにわかってる説明をすると、 まず lex と yacc、わかるね? んで Ruby のパーサを lex と yacc で書いたとして、 そのアクション以外を提供してくれるのが Ripper。 あとはアクションを (Rubyで) 書けばいい。
そんでは、Ruby のパーサとしては他にもいろいろあるのに Ripper を選ぶ理由は何だろうか。 それは、Ripper は本物の Ruby との文法の互換性がとても高いからだ。 なぜならばパーサの根幹部分を本物の Ruby と共有しているからである。
なにい、「共有しなくても互換性くらい保てるだろヴァーカ!」だと? ふぅ―――――――ん。 ま、やるのは俺じゃないしね……やるだけやってみればいいんじゃない? その……若い頃に無駄な努力をしてあがくのって大切だと思うし! あ、それから Ruby の文法はどんどん アップデートして (複雑になって) いくことを忘れずにね。
一方 Ripper の弱点は以下のようなところだろう。
御託を並べるのはこのへんにしよう。 具体的に、Ripper ではどんなものが作れるのだろうか。 ようするに特製パーサが作れるわけだから、 Ruby プログラムをテキスト的にいじるものはだいたい何でもできる。 例えば以下のような例が挙げられる。
さて、解説を読んで Ripper を使いたくなったとしよう! どこからダウンロードできんだよーとっとと URL さらしやがれ、 と思うかもしれないが、そういうわけにはいかない。現在のところ、 Ripper を使ってみたかったら ruby の CVS HEAD を自分でインストールする必要がある。
[試験に出るポイント]
なぜ 1.8 がだめかと言うと、yacc の定義するトークン (を表す定数) が Ruby 本体のパーサと完璧に同じでないといけないからだ。 1.9 ではトークンが追加されているので 1.8 に合わせるのはけっこう大変なのである。 とは言え 1.8 の parse.y に独自に ripper extension を追加するよりはずっと簡単だ。
# なんか今日はテンション高いなー俺……
(17:13)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.