class Mlc::Compiler

Public Class Methods

new(code) click to toggle source
# File lib/mlc/compiler.rb, line 13
def initialize(code)
  @tree = RubyParser.new.parse(code)
end

Public Instance Methods

ensure_block(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 26
def ensure_block(sexp)
  unless sexp[0] == :block
    sexp = Sexp.new :block, sexp
  end
  parse_block(sexp)
end
parse(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 33
def parse(sexp)
  if sexp.nil?
    nil
  else
    send(('parse_' + sexp[0].to_s).to_sym, sexp)
  end
end
parse!() click to toggle source
# File lib/mlc/compiler.rb, line 17
def parse!
  puts (tree = @tree).inspect
  snip = Mlc::Abstract::Snippet.new
  if tree
    snip << ensure_block(tree)
  end
  snip
end
parse_block(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 41
def parse_block(sexp)
  block = Abstract::Block.new
  sexp[1..sexp.length].each do |el|
    block << parse(el)
  end
  block
end
parse_call(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 49
def parse_call(sexp)
  call = Abstract::Call.new
  call.object = parse(sexp[1]) || Abstract::Raw.new('self')
  call.name = sexp[2]
  sexp[3..sexp.length].each do |arg|
    call.args << parse(arg)
  end
  call
end
parse_const(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 67
def parse_const(sexp)
  Abstract::Const.new(sexp[1].to_s)
end
parse_lasgn(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 71
def parse_lasgn(sexp)
  Abstract::LAsgn.new(sexp[1], parse(sexp[2]))
end
parse_lit(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 63
def parse_lit(sexp)
  Abstract::Literal.new(sexp[1])
end
parse_lvar(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 75
def parse_lvar(sexp)
  Abstract::LVar.new(sexp[1])
end
parse_str(sexp) click to toggle source
# File lib/mlc/compiler.rb, line 59
def parse_str(sexp)
  Abstract::Literal.new(sexp[1])
end