ripper 週末クッキング その2 ripperのお勉強

まずサンプルをたぐってみる。
count-if.rbがやることがわかりやすくてよいかも。短いし、ということで読む。
わかったこと

  • Ripperを継承したクラスが基本
  • Ripperには、解析する文字列を与えてnew
  • メソッドを定義して、parseで解析開始。あとはメソッドまかせ?確かSAX的に使うという話だったので、解析結果の要素にしたがって順に対応するメソッドが呼ばれるのだろう。
  • on__kw(word)というメソッドでキーワードが拾えるらしい。wordはキーワードの種類だろう。中身は文字列かな?キーワードが来た!というイベントに対応するメソッドですね。
  • method_missingも定義されているが、こちらは何をしているかいまいちわからず。

というわけで、一番謎なmethod_missingを、引数の中身を表示させるように書きかえてみる。
実行。ぽち。
:on__spというシンボルと、空白の文字列(個数はいろいろ)がかえってきている。要は、spというイベントを発生させたいのだがそれに対応するメソッドがない、ということかな。その後のはソース中の文字列とみた。
というわけで、def on__sp(word)して、wordを表示させてみた。予想どおり空白文字がどどっと表示された。ふむ。要は空白は無視されるはずだから対応するメソッドは記述されてない、ってことかな。

てことは、Ripperが発行するイベントを全て把握すれば使えるようになるはずだな。ついでに、on__kwで補足されるwordも表示してみた。def,do,end,if,elsif等々、キーワードが文字列で拾えてますね。よし。