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