class RbParser
Attributes
to_a[R]
Public Class Methods
new(s)
click to toggle source
Calls superclass method
# File lib/rbparser.rb, line 13 def initialize(s) super() params = {} expressions(@params) @to_a = scan_lines s end
Private Instance Methods
expressions(params)
click to toggle source
# File lib/rbparser.rb, line 24 def expressions(params) parse /#(.*)/ do |comment| [:comment, comment] end parse /if (.*) then/ do |condtn| [:if, condtn] end parse /class\s+(\w+)/ do |clssnme| [:class, clssnme] end parse /end/ do [:end] end parse /def\s+(\w+)\s*\((?:\)|([^\)]+)\))/ do |mthdnme, argslst| r = [:def, mthdnme] r << argslst if argslst r end parse /(\w+)\(([^\)]+)\)/ do |mthdnme, argslst| [:method, mthdnme, argslst] end parse /case\s+(\w+)/ do |arg| [:case, arg] end parse /when\s+(.*)/ do |expression| [:when, expression] end parse /else/ do [:else] end parse /elsif\s+(.*)/ do |cndtn| [:elsif, cndtn] end parse /(\w+)\s+([^\)]+)\s+/ do |mthdnme, argslst| [:method, mthdnme, argslst] end parse /.*/ do [:blankline] end end
scan_lines(s)
click to toggle source
# File lib/rbparser.rb, line 81 def scan_lines(s) a = s.lines.inject([]) do |r,line| #puts 'line: ' + line.inspect line.strip.length > 0 ? r << scan_line(line) : r << [:blankline] end #puts 'a: ' + a.inspect treeize a end
treeize(a)
click to toggle source
# File lib/rbparser.rb, line 92 def treeize(a) r = [] while a.length > 0 do id, *remaining = stmnt = a.shift case id when :class name, baseclass = remaining r << [:class, name] r.last.concat treeize(a) when :def name, *args = remaining r << [:def, name.to_sym, args] r.last.concat treeize(a) when :case expr = remaining.first r << [:case, expr] r.last.concat treeize(a) when :when expr = remaining.first r << [:when, expr] when :method name, *args = remaining r << [:method_call, name.to_sym, args] when :end return r when :comment r << [:comment, remaining.join] when :blankline then r << [:blankline] end end r end