Class: DsLisp::ToRuby

Inherits:
Object show all
Defined in:
lib/dslisprb.rb

Class Method Summary collapse

Class Method Details

.convert_name(name) ⇒ Object



5
6
7
# File 'lib/dslisprb.rb', line 5

def convert_name(name)
  {:lt => "<", :ht => :>, :plus => :+, :mult => "*", :divide => "/", :minus => "-" }[name] || name[1..-1]
end

.name_convert(name) ⇒ Object



9
10
11
# File 'lib/dslisprb.rb', line 9

def name_convert(name)
  {:< => "lt", :> => "ht", :+ => "plus", :* => "mult" , :/ => "divide", :- => "minus" }[name] || "_" + name.to_s
end

.to_ruby(code) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dslisprb.rb', line 13

def to_ruby(code)
  if Array === code
    # lisp call

    function_name = code.first

    if (CommonLispOperators.methods - Class.methods).include?(function_name)
      CommonLispOperators.send(function_name, code)
    else      
      strargs = code[1..-1].map{|x| 
        "(#{to_ruby(x)})"
      }.join(",")

      "#{to_ruby(code.first)}.call(#{strargs})"
    end    
  else
    if code == :nil
      "nil"
    elsif code == :T
      "true"
    elsif Symbol === code
      "eval(\"#{name_convert(code).to_s}\")" 
    else
      code.inspect
    end  
  end
end