AST for ruby code

J

John Micheal

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)))))))

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

Luis Lavena

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)))))))

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,
 
R

Ryan Davis

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.
 
R

Rados³aw Bu³at

WW91IGFyZSB0cnlpbmcgdG8gcGFyc2UgaXQgbGluZSBieSBsaW5lIGJ1dCBpdCB3b24ndCB3b3Jr
IGluIHRoYXQgd2F5LgpKdXN0IHBhcnNlIHdob2xlIGZpbGU6CgpzZXhwID0gUnVieVBhcnNlci5u
ZXcucGFyc2UoRmlsZS5yZWFkKCJyZWFkbGluZS5yYiIpKQoKLS0gClJhZG9zs2F3IEJ1s2F0Cgpo
dHRwOi8vcmFkYXJlay5qb2dnZXIucGwgLSBt82ogYmxvZwo=
 
M

Michel Son

Radosław Bułat said:
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"))


------------------
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 %>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top