lrb 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/lrb +5 -5
  3. data/lib/lrb.rb +35 -37
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 91b1b3463d0a8c5618c45cfe15e829cdd7340ac6
4
- data.tar.gz: 2318438a0a671cc8b1e7f12adb30e35e9a5f7bac
3
+ metadata.gz: 294318f491436616cca102f561589256b103640a
4
+ data.tar.gz: a272338296524e821c4f2cfd53ce5aaf7a02dfa4
5
5
  SHA512:
6
- metadata.gz: 180ec2126d1c55a186d55c7b6ac69fdabc3f7991098d88b5b27f5cbaa7e8d54299974e5ab3f8dc2a5553da37942342c9ca1ed9e9b94c0b33feaa9af5593412b6
7
- data.tar.gz: 9839e93cc80d0cec69d4f40dcf0561d0954d3aa2e5b2aad884062b2630d2580cc222363d2f90cf6674ff6b20e17ea8ce28cb6bcf1db888b8621d4ce63fabdf64
6
+ metadata.gz: 947acff96b79c641bd39ac4ffecda87af08d5152e7a0013ddbaf83cfc0fd73f6ac09b4d09d0a1adb117ab87d7212b07e32a5220e965bb5eaf1becfff646f2812
7
+ data.tar.gz: 351ee6bee811e3fe9fe8508b61c15948040acb89ab2b317f685b7260bd7008942fe85600bcde59173acfe86840191f33dc062018cc6850067f1907db9c924ecf
data/bin/lrb CHANGED
@@ -12,20 +12,20 @@ spec = Oyster.spec do
12
12
  lrb FILE_NAME [OPTIONS]
13
13
  EOS
14
14
 
15
- flag :interactive, :desc =>
16
- 'Start an interactive Scheme session'
15
+ flag :debug, :desc => 'Start an interactive Lrb debug session'
17
16
  end
18
17
 
19
18
  require "rubygems"
20
19
 
21
20
  begin
22
21
  options = spec.parse
22
+ version = Gem.loaded_specs["lrb"].version.to_s
23
23
 
24
- if options[:interactive] or options[:unclaimed].empty?
25
- puts "lrb:repl".light_yellow
24
+ if options[:unclaimed].empty?
25
+ puts "lrb #{version} #{'DEBUG' if options[:debug]} REPL".light_yellow
26
26
  Lrb.new.repl
27
27
  else
28
- puts "lrb:compile".light_yellow
28
+ puts "lrb #{version} COMPILE".light_yellow
29
29
  lrb = Lrb.new
30
30
  lrb.eval_file File.expand_path(options[:unclaimed].first)
31
31
  end
data/lib/lrb.rb CHANGED
@@ -1,34 +1,33 @@
1
1
  require "readline"
2
2
  require "colorize"
3
3
  require "bracer"
4
- # require "sexpistol"
5
4
  require "pry"
6
5
 
7
6
  class Lrb
8
7
  attr_accessor :parser, :debug
9
8
 
10
9
  def initialize
11
- @debug = false
12
- @indent = 0
13
- @stack = Array.new
14
- @parser = Bracer.new
15
- @parser.ruby_keyword_literals = true
10
+ @_dbg = false
11
+ @_indent = 0
12
+ @_stack = Array.new
13
+ @_parser = Bracer.new
14
+ @_parser.ruby_keyword_literals = true
16
15
  readline_autocompletion
17
16
  end
18
17
 
19
18
  def parse source
20
- @parser.parse_string source
19
+ @_parser.parse_string source
21
20
  end
22
21
 
23
22
  def repl
24
23
  begin
25
24
  while line = readline_with_hist_management
26
- @stack << line
25
+ @_stack << line
27
26
  if balanced?
28
- e = eval_source @stack.join " "
27
+ e = eval_source @_stack.join " "
29
28
  puts e.to_s.blue
30
- @stack.clear
31
- @indent = 0
29
+ @_stack.clear
30
+ @_indent = 0
32
31
  end
33
32
  end
34
33
  rescue Interrupt => e
@@ -47,13 +46,13 @@ class Lrb
47
46
  e = to_ruby source
48
47
  evaluated = eval e
49
48
  rescue Exception => ex
50
- if @debug
49
+ if @_dbg
51
50
  puts ex.backtrace.join("\n").red
52
51
  binding.pry
53
52
  end
54
53
  puts ex.message.red
55
54
  end
56
- if @debug
55
+ if @_dbg
57
56
  if mode == :compile
58
57
  puts "[LRB]:".light_yellow
59
58
  puts source.light_yellow
@@ -74,7 +73,7 @@ class Lrb
74
73
  def list_to_ruby ast
75
74
  ast = ast.map do |sexp|
76
75
  result = transform sexp
77
- puts result if @debug
76
+ puts result if @_dbg
78
77
  result
79
78
  end
80
79
  ast.join "\n\n"
@@ -82,17 +81,17 @@ class Lrb
82
81
 
83
82
  def to_ruby source
84
83
  ast = parse source
85
- puts "parsed: #{ast}".green if @debug
84
+ puts "parsed: #{ast}".green if @_dbg
86
85
  list_to_ruby ast
87
86
  end
88
87
 
89
88
  def transform sexp
90
- puts line if @debug
89
+ puts line if @_dbg
91
90
  if sexp.class == Array
92
91
  fun = sexp.first
93
92
  args = wrap_string sexp.drop(1)
94
93
  result = ""
95
- if @debug
94
+ if @_dbg
96
95
  puts "function: #{fun}".yellow
97
96
  puts "args: #{args}".yellow
98
97
  puts line
@@ -108,23 +107,23 @@ class Lrb
108
107
  result = compose_function fun, args
109
108
  end
110
109
 
111
- if @debug
110
+ if @_dbg
112
111
  puts result.light_green
113
112
  puts line
114
113
  end
115
114
  indent + result
116
115
  else
117
- puts "#{sexp}".yellow if @debug
116
+ puts "#{sexp}".yellow if @_dbg
118
117
  sexp
119
118
  end
120
119
  end
121
120
 
122
121
  private
123
122
  def balanced?
124
- source = @stack.join " "
123
+ source = @_stack.join " "
125
124
  @left = source.count "["
126
125
  @right = source.count "]"
127
- @indent = @left - @right if (@left - @right) > 0
126
+ @_indent = @left - @right if (@left - @right) > 0
128
127
  @left == @right
129
128
  end
130
129
 
@@ -165,13 +164,20 @@ class Lrb
165
164
  end
166
165
 
167
166
  def replace_parenthese arg
168
- if arg.to_s["("] && arg.to_s[")"]
169
- old = arg
170
- arg = arg.to_s.gsub(/\((.*)\)/, '[\1]').to_sym
171
- puts "arg: #{old} => #{arg}".light_yellow if @debug
167
+ if arg.kind_of? Array
168
+ arg = arg.map{ |element|
169
+ replace_parenthese element
170
+ }
172
171
  arg
173
172
  else
174
- arg
173
+ if arg.to_s["("] && arg.to_s[")"]
174
+ old = arg
175
+ arg = arg.to_s.gsub(/\((.*)\)/, '[\1]').to_sym
176
+ puts "arg: #{old} => #{arg}".light_yellow if @_dbg
177
+ arg
178
+ else
179
+ arg
180
+ end
175
181
  end
176
182
  end
177
183
 
@@ -191,21 +197,13 @@ class Lrb
191
197
  end
192
198
 
193
199
  def indent
194
- " " * @indent
200
+ " " * @_indent
195
201
  end
196
202
 
197
203
  def line
198
204
  "-" * 80
199
205
  end
200
206
 
201
- def push node
202
- @stack.push node
203
- end
204
-
205
- def fetch
206
- @stack.pop unless @stack.empty?
207
- end
208
-
209
207
  def operator op, args
210
208
  args = args.map do |arg|
211
209
  transform arg
@@ -283,8 +281,8 @@ class Lrb
283
281
  ].join("\n")
284
282
  },
285
283
  :debug => lambda {
286
- @debug = !@debug
287
- puts "[DEBUG = #{@debug}]".light_yellow
284
+ @_dbg = !@_dbg
285
+ puts "[DEBUG = #{@_dbg}]".light_yellow
288
286
  ""
289
287
  },
290
288
  :do => lambda {|fun, args, bodies|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Trung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-28 00:00:00.000000000 Z
11
+ date: 2015-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- description: It transform Ruby to a Lisp with braces, included REPL mode.
69
+ description: It transform Ruby to a Lisp with braces, included REPL and COMPILE mode.
70
70
  email: deulamco@gmail.com
71
71
  executables:
72
72
  - lrb