Class: Lrb
- Inherits:
-
Object
- Object
- Lrb
- Defined in:
- lib/lrb.rb
Instance Attribute Summary collapse
-
#debug ⇒ Object
Returns the value of attribute debug.
-
#parser ⇒ Object
Returns the value of attribute parser.
Instance Method Summary collapse
- #eval_file(path) ⇒ Object
-
#initialize ⇒ Lrb
constructor
A new instance of Lrb.
- #parse(source) ⇒ Object
- #to_ruby(source) ⇒ Object
- #transform(sexp) ⇒ Object
Constructor Details
#initialize ⇒ Lrb
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
#debug ⇒ Object
Returns the value of attribute debug.
6 7 8 |
# File 'lib/lrb.rb', line 6 def debug @debug end |
#parser ⇒ Object
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 |