7
ブロックのASTをRuby自体から取得することは可能ですか?RubyブロックからASTを抽出する
私はParseTreeとruby_parserの両方を見てきましたが、両方ともRuby 1.9.2のスケッチのサポート(私が読んだところのもの)を持っているようです。 1.9.2でうまくいくものが必要です。
ブロックのASTをRuby自体から取得することは可能ですか?RubyブロックからASTを抽出する
私はParseTreeとruby_parserの両方を見てきましたが、両方ともRuby 1.9.2のスケッチのサポート(私が読んだところのもの)を持っているようです。 1.9.2でうまくいくものが必要です。
リッパーは、MRI 1.9に同梱されています。 1.8で
ruby-1.9.2-p180 :004 > require 'ripper'
=> true
ruby-1.9.2-p180 :005 > Ripper.sexp("def a; end")
=> [:program, [[:def, [:@ident, "a", [1, 4]], [:params, nil, nil, nil, nil, nil], [:bodystmt, [[:void_stmt]], nil, nil, nil]]]]
、RubyはASTをトラバースすることによってコードを実行するので、指定されたメソッド/ブロックに対してASTを取得することが可能です。 1.9ではそうではありません。コードは最初に解析され、YARVバイトコードに変換されて実行されます。変換ステップ後にソースもASTも保持されず、後者は可逆的ではありません。したがって、1.9でブロックのASTを取得することはできません。
リッパーを使用してブロックからASTを取得するにはどうすればよいですか?私は何とかブロックのソースコードを取得しなければならないと仮定しています。 –
情報ありがとう!それが働くためには '必要なリッパー 'をする必要があるようです。 –
ああ。申し訳ありませんが、あなたの投稿をもっと慎重に読んでいたはずです。私は答えを更新しました。 – whitequark