ruby_parser

rubynodeは古かった。探してみたら、まとめサイト発見。
http://ujihisa.blogspot.com/2009/07/parsers-around-ruby.html

ruby_parserというまんまな名前のものが見つかった。
http://parsetree.rubyforge.org/ruby_parser/

ruby-1.9.2で試してみた。

require 'ruby_parser'
#=> true
RubyParser.new.parse "1+1"
#=> s(:call, s(:lit, 1), :+, s(:arglist, s(:lit, 1)))
code = <<EOS
 # AAAA
 def foo(*args)
   puts args.inspect
 end
EOS
#=> " # AAAA\n def foo(*args)\n   puts args.inspect\n end\n"
RubyParser.new.parse code
#=> s(:defn, :foo, s(:args, :"*args"), s(:scope, s(:block, s(:call, nil, :puts, s(:arglist, s(:call, s(:lvar, :args), :inspect, s(:arglist)))))))

やっぱりコメントは失われちゃう。