« [Ruby] ParseTree | トップページ | [Ruby] ruby2ruby »

2009年6月24日 (水)

[Ruby] ruby_parser


2.0.3が公開された([ruby-talk:339961])。



ParseTree と同様にRuby のクラスやメソッドをパーズして Ruby の配列、文字列、シンボル、整数を使ったS式を返すライブラリ。
ParseTree と違い Pure Ruby で書かれている。



ちょっと試してみた。



$ sudo gem install ruby_parser
$ cat sample.rb
def conditional1(arg1)
if arg1 == {:a => 2} then
return 1
end
return 0
end
conditional1({:a => 1})
$ ruby_parse sample.rb
# file = sample.rb loc = 7
s(:block,
s(:defn,
:conditional1,
s(:args, :arg1),
s(:scope,
s(:block,
s(:if,
s(:call,
s(:lvar, :arg1),
:==,
s(:arglist, s(:hash, s(:lit, :a), s(:lit, 2)))),
s(:return, s(:lit, 1)),
nil),
s(:return, s(:lit, 0))))),
s(:call, nil, :conditional1, s(:arglist, s(:hash, s(:lit, :a), s(:lit, 1)))))
done


ちゃんと1.9.2devでも動作した。それでは、sample.rbをちょっと変更して



$ cat sample.rb
def conditional1(arg1)
if arg1 == {a:2} then
return 1
end
return 0
end
conditional1({:a => 1})
$ ruby_parse.rb
... #<Racc::ParseError: parse error on value ":" (tSYMBEG)>


ふーむ。"a:2" は駄目らしい。1.9系のスクリプトを完全にパーズするのはまだできないみたい。


|

« [Ruby] ParseTree | トップページ | [Ruby] ruby2ruby »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] ruby_parser:

« [Ruby] ParseTree | トップページ | [Ruby] ruby2ruby »