Class: Lrb

Inherits:
Object
  • Object
show all
Defined in:
lib/lrb.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLrb

Returns a new instance of Lrb.



8
9
10
11
12
13
14
# File 'lib/lrb.rb', line 8

def initialize
  @debug = false
  @indent = 0
  @stack = Array.new
  @parser = Bracer.new
  @parser.ruby_keyword_literals = true
end

Instance Attribute Details

#debugObject

Returns the value of attribute debug.



6
7
8
# File 'lib/lrb.rb', line 6

def debug
  @debug
end

#parserObject

Returns the value of attribute parser.



6
7
8
# File 'lib/lrb.rb', line 6

def parser
  @parser
end

Instance Method Details

#eval_file(path) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/lrb.rb', line 20

def eval_file path
  source = File.read path
  puts "[LRB]:".light_yellow
  puts source.light_yellow
      
  e = to_ruby source
  puts e.light_green
  
  puts "\n[evaluated]:".light_yellow
  puts "#{eval e}".blue
end

#parse(source) ⇒ Object



16
17
18
# File 'lib/lrb.rb', line 16

def parse source
  @parser.parse_string source 
end

#to_ruby(source) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/lrb.rb', line 32

def to_ruby source
  ast = parse source 
  puts "parsed: #{ast}".green if @debug
  ast = ast.map do |sexp|
    result = transform sexp
    puts result if @debug
    result
  end
  ast.join "\n\n"
end

#transform(sexp) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/lrb.rb', line 43

def transform sexp
  puts line if @debug
  if sexp.class == Array
    fun = sexp.first
    args = wrap_string sexp.drop(1)
    result = ""
    if @debug
      puts "function: #{fun}".yellow
      puts "args: #{args}".yellow
      puts line 
    end

    if KEYWORD.include? fun
      result = self.instance_exec *args, &KEYWORD[fun]
    else
      result = compose_function fun, args
    end

    if @debug
      puts result.light_green
      puts line
    end

    indent + result
  else
    puts "#{sexp}".yellow if @debug
    sexp.to_s
  end
end