AST for ruby code

Hi!
I want AST for the following code as it is given below. I have install
ruby_parser 1.0 on my system. We are able to parse string using
“RubyParser.new.parse(“1+1 = 2”)” and the result is " s(:str, “1+1=2”)".
But how I can parse the full source file(given below)?

Further, whenever I try to parse the string containing class or def in
it, it gives error (it means, it is parsing C code not ruby) I have also
attached the screenshot for this problem. Please also guide us in this
mater.

Ruby Code:
…readfile.rb

class TestClass

 def method1(a,b)
    sum = a + b
    puts sum
 end

 def method2(*c)
    l = c.length
    puts l
 end

end

Desired AST Tree:

s(:class, :TestClass, s(:const, :Object), s(:defn, :method1, s(:scope,
s(:block, s(:args, :a, :b), s(:lasgn, :sum, s(:call, s(:lvar, :a), :+,
s(:array, s(:lvar, :b)))), s(:fcall, :puts, s(:array, s(:lvar,
:sum)))))), s(:defn, :method2, s(:scope, s(:block, s(:args, :"*c"),
s(:lasgn, :l, s(:call, s(:lvar, :c), :length)), s(:fcall, :puts,
s(:array, s(:lvar, :l)))))))

On Jun 9, 2008, at 04:09 , John M. wrote:

But how I can parse the full source file(given below)?

RubyParser.new.parse(File.read(path))

Further, whenever I try to parse the string containing class or def in
it, it gives error (it means, it is parsing C code not ruby) I have
also

because you’re throwing individual lines at the parser when it expects
complete source.

RubyParser.new.parse(“class Blah”) is not valid ruby.

On Jun 9, 1:09 pm, John M. [email protected] wrote:

 def method2(*c)

s(:array, s(:lvar, :b)))), s(:fcall, :puts, s(:array, s(:lvar,
:sum)))))), s(:defn, :method2, s(:scope, s(:block, s(:args, :“*c”),
s(:lasgn, :l, s(:call, s(:lvar, :c), :length)), s(:fcall, :puts,
s(:array, s(:lvar, :l)))))))

Attachments:http://www.ruby-forum.com/attachment/2131/error.GIF

On line 14 of your sample you’re starting a block (well, not
actually), just replace the |file| just just file and see if it works.

HTH,

You are trying to parse it line by line but it won’t work in that way.
Just parse whole file:

sexp = RubyParser.new.parse(File.read(“readline.rb”))


Rados³aw Bu³at

http://radarek.jogger.pl - mój blog

Radosław Bułat wrote:

You are trying to parse it line by line but it won’t work in that way.
Just parse whole file:

sexp = RubyParser.new.parse(File.read(“readline.rb”))


Rados�aw Bu�at

http://radarek.jogger.pl - m�j blog


One more help from you that this code is working perfectly on Ruby IDE,
can u tell me how does it works on Ruby Rail. Because when i run it
using ruby on rails, it is not displaying anything and also no errors.
Even I have properly include rubygems and ruby_parser.

Even Rails server stops working

<%
require “rubygems”
require “ruby_parser”

sexpfaulty1 = RubyParser.new.parse(File.read(“faulty_0.rb”))

%>

<%= sexpfaulty1 %>