2011-02-02 4 views
6

リッパーは、Ruby 1.9に付属する解析ライブラリです。このASTを取ると、Rubyのコードに戻ってそれを変換するためのライブラリがありますリッパーのASTをRubyコードに再コンパイルするにはどうすればよいですか?

pp Ripper.sexp("def foo; yield :a; return 1 end") 

#=> 

[:program, 
[[:def, 
    [:@ident, "foo", [1, 4]], 
    [:params, nil, nil, nil, nil, nil], 
    [:bodystmt, 
    [[:yield, 
     [:args_add_block, 
     [[:symbol_literal, [:symbol, [:@ident, "a", [1, 16]]]]], 
     false]], 
    [:return, [:args_add_block, [[:@int, "1", [1, 26]]], false]]], 
    nil, 
    nil, 
    nil]]]] 

:それはそうのように、ASTにRubyコードを変換しますか?

ruby_parser and ruby2rubyこれを使用していましたが、リッパーをパーサーとして使用したいと思います。 (Ruby 1.9はそのようなライブラリと共に出荷されることもありますが、私はRipper自体でもドキュメントを見つけるのに苦労しています)

+0

http://www.artweb-design.de/2009/7/5/ripper2ruby-modify-and-recompile-your-ruby-codeでhttps://github.com/svenfuchs/ripper2rubyで遊んでいましたNoMethodError:#の未定義メソッド 'to_ruby 'で亡くなりました。そこからどこへ行くかわからない。 –

+0

私はある時点でそれを見つけましたが、信頼できるとは思われませんでした。あなたの経験を提供してくれてありがとう。 –

答えて

4

Sorcerer」を参照してください。これはうまくいくが、メソッドの解析時にバグが見つかった。ファイル "lib/sorcerer/resource.rb"の行301の下にsrc.emit("; ")を追加すると、これは修正されます。しかし、あなたがこれを使用することに決めたら、もっと多くを見つけるかもしれません。がんばろう。

+0

ありがとうございます - これは現時点で最高のもののように見えます! –

関連する問題