2004-12-02 05:51:01 +0900 (1367d); rev 3
Ripper は Ruby プログラムのパーサです。 つまり Ruby スクリプトをテキスト的にいじる プログラムであればどのような用途にも使える可能性があります。
以下に Ripper を使って作れるプログラムの例を挙げます。
また Ruby Refactoring Browser は Ripper の前バージョンを使っているそうです。
Ripper には大きく分けて 3 種類の プログラミングインターフェイスがあります。
以下、それぞれのインターフェイスの特徴と、 向いているプログラムを順番に述べます。
トークン指向型インターフェイスは、 Ruby スクリプトをトークン (単語) に分割するだけの単純なインターフェイスです。 以下にトークン指向インターフェイスの使用例を示します。
% ruby -r ripper -e 'p Ripper.tokenize("def m(a) nil end")'
["def", " ", "m", "(", "a", ")", " ", "nil", " ", "end"]
このように、空白も含めてソースコードが単語に区切られていることがわかります。
トークン指向インターフェイスは、 Ruby プログラムを純粋にテキスト的に扱い、 意味や構文を考える必要がない場合に適しています。 ソースコードに色を付けたり、 XML でタグ付けしたりするだけなら このタイプのインターフェイスで十分です。
詳細…… RipperTutorial.TokenStreamInterface
イベントドリブン型インターフェイスは、 特定の構文に出会うたびに それをイベントとして受け取るインターフェイスです。 XML パーサで言うと SAX スタイルに類似しています。
このインターフェイスでは「if 文」や「メソッド定義」 などの複雑な構文を認識できるうえ、 空白やコメントなどの情報もそれなりに得られます。 Ruby indent や irb のパーサを作るのに適しています。
詳細…… ?RipperTutorial.EventDrivenInterface
構文木型インターフェイスは、 Ruby プログラムを完全に解析して作成した 構文木を扱うインターフェイスです。 XML パーサで言うなら DOM スタイルと言えます。
Ruby 処理系やリファクタリングブラウザでは このレベルのインターフェイスが必要になるはずです。
構文木インターフェイスは 2004-11-27 時点で まだ実装されていません。
system revision 1.162