RipperTutorial

2004-12-02 05:51:01 +0900 (4531d); rev 3

Ripperとは

Ripper は Ruby プログラムのパーサです。 つまり Ruby スクリプトをテキスト的にいじる プログラムであればどのような用途にも使える可能性があります。

以下に Ripper を使って作れるプログラムの例を挙げます。

また Ruby Refactoring Browser は Ripper の前バージョンを使っているそうです。

Ripperのインターフェイス

Ripper には大きく分けて 3 種類の プログラミングインターフェイスがあります。

  1. トークン指向型
  2. イベントドリブン型
  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