class RedParse::Ripper

stolen shamelessly from ripper/sexp.rb (among others. the tables came from elsewhere)

Constants

PARSER_EVENTS
PARSER_EVENT_TABLE
SCANNER_EVENTS
SCANNER_EVENT_TABLE

Attributes

column[RW]
lineno[RW]
parser[RW]

Public Class Methods

instrumentSexpBuilder(k) click to toggle source
# File lib/redparse/ripper.rb, line 40
    def self.instrumentSexpBuilder k
      events=k.instance_methods.grep(/\Aon_/)
      events.map!{|e| <<-"endcode" }
        alias noinst_#{e} #{e}
        def #{e}(*a)
          @record<<a.dup.unshift(:#{e})
          noinst_#{e}(*a)
        end
      endcode
      events<<<<-"endcode"
        alias noinst_parse parse
        def parse *a
          @record=[]
          result=[@record,(noinst_parse *a)]
          @record=nil
          return result
        end
      endcode
      k.module_eval events.join
    end
new(text,file="(eval)",line=1,options={}) click to toggle source
# File lib/redparse/ripper.rb, line 21
def initialize(text,file="(eval)",line=1,options={})
  options[:rubyversion]||=1.9
  @lineno=@column=0 #hack, for now. fix this later
  @parser=RedParse.new(text,file,line,options)
end
sexp(src, filename = '-', lineno = 1) click to toggle source
EXPERIMENTAL

Parses src and create S-exp tree. This method is for mainly developper use.

require 'ripper'
require 'pp

pp Ripper.sexp("def m(a) nil end")
  #=> [:program,
       [:stmts_add,
        [:stmts_new],
        [:def,
         [:@ident, "m", [1, 4]],
         [:paren, [:params, [[:@ident, "a", [1, 6]]], nil, nil, nil]],
         [:bodystmt,
          [:stmts_add, [:stmts_new], [:var_ref, [:@kw, "nil", [1, 9]]]],
          nil,
          nil,
          nil]]]]
# File lib/redparse/ripper_sexp.rb, line 89
def self.sexp(src, filename = '-', lineno = 1)
  SexpBuilderPP.new(src, filename, lineno).parse
end
sexp_raw(src, filename = '-', lineno = 1) click to toggle source
# File lib/redparse/ripper_sexp.rb, line 93
def self.sexp_raw(src, filename = '-', lineno = 1)
  SexpBuilder.new(src, filename, lineno).parse
end

Public Instance Methods

parse(options={}) click to toggle source
# File lib/redparse/ripper.rb, line 31
def parse options={}
  @quirks=options[:quirks]
  tree=@parser
  tree=tree.parse if tree.respond_to? :parse
  on_program tree.rip(self)
end
quirks?() click to toggle source
# File lib/redparse/ripper.rb, line 38
def quirks?; @quirks end