rubic 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa663739b7fa978469e0da9249943c65d9ffa786
4
- data.tar.gz: c6f7a585aaefff3c18608022c100a2433e69f9e7
3
+ metadata.gz: f2bade99b079979ddaf7b42551451939fef2ada1
4
+ data.tar.gz: d9a0095e5552d69ca3a9dfade6de63c50f268642
5
5
  SHA512:
6
- metadata.gz: 77ee9b97ca0f112b8e6157791373cde32f6d7c1940aafe558269ee26e8ffd33b80e491259c1591b69ffb84248670cae5c490438bef0ccea1ec551f74bd99cd7b
7
- data.tar.gz: 610b6efcb0e4b59214fb88b54a7c49850902a1942085fbea7e8b2945e109d06faa4efe316829615be4bb5f164a0c1e9c5157308f815f7cb1dda8ff601bb37265
6
+ metadata.gz: 36af5fb982d96dc3b615587cddf10509071e3a339468a00dd05a325069bd04bfb46189f4a644f52bce1722d0271144998c760c9255e6db8d609bc9a40f139191
7
+ data.tar.gz: 77c4ab92c10839778e319241a8b7921a3ba1d1fc4dd8554ddd8ed3dbe8c1351e1ebe3ab80b38062ddda7258ffa107b47da1398e373896b67be718387cd83f029
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubic'
4
+ require 'readline'
5
+
6
+ # TODO: read the code from file when argument passed
7
+
8
+ puts "Welcome to interactive Rubic (v#{Rubic::VERSION})"
9
+ puts 'Hit ^D to exit'
10
+
11
+ rubic = Rubic::Interpreter.new
12
+
13
+ while input = Readline.readline(">> ", true)
14
+ next if input.empty?
15
+ begin
16
+ puts '=> ' + rubic.evaluate(input).inspect
17
+ rescue Rubic::RubicError => e
18
+ puts "#{e.class}: #{e.message}"
19
+ end
20
+ end
@@ -1,4 +1,8 @@
1
1
  module Rubic
2
+ class RubicError < StandardError; end
3
+ class ArgumentError < RubicError; end
4
+ class NameError < RubicError; end
5
+ class ParseError < RubicError; end
2
6
  end
3
7
 
4
8
  require 'rubic/version'
@@ -1,6 +1,4 @@
1
1
  module Rubic
2
- class RubicRuntimeError < StandardError; end
3
-
4
2
  class Environment
5
3
  def initialize(outer=nil)
6
4
  @outer = outer
@@ -17,13 +15,13 @@ module Rubic
17
15
  elsif @outer
18
16
  @outer.refvar(name)
19
17
  else
20
- raise RubicRuntimeError, "undefined variable `#{name}'"
18
+ raise Rubic::NameError, "undefined variable `#{name}'"
21
19
  end
22
20
  end
23
21
 
24
22
  def bind(params, args)
25
23
  if params.size != args.size
26
- raise RubicRuntimeError, "wrong number of arguments (#{args.size} for #{params.size})"
24
+ raise Rubic::ArgumentError, "wrong number of arguments (#{args.size} for #{params.size})"
27
25
  end
28
26
 
29
27
  params.each.with_index do |name, i|
@@ -51,7 +51,7 @@ module Rubic
51
51
  env[name] = -> (*args) do
52
52
  local = Environment.new(env)
53
53
  local.bind(params, args)
54
- body.map {|expr| execute(expr, local) }.last
54
+ execute_sequence(body, local)
55
55
  end
56
56
  return
57
57
  when :cond
@@ -77,13 +77,30 @@ module Rubic
77
77
  return true if execute(expr, env)
78
78
  end
79
79
  return false
80
+ when :lambda
81
+ _, (*params), *body = list
82
+ return -> (*args) do
83
+ local = Environment.new(env)
84
+ local.bind(params, args)
85
+ execute_sequence(body, local)
86
+ end
87
+ when :let
88
+ _, (*defs), *body = list
89
+ local = Environment.new(env)
90
+ defs.each {|name, expr| local[name] = execute(expr, env) }
91
+ return execute_sequence(body, local)
80
92
  else
81
93
  # fallthrough
82
94
  end
83
95
 
84
- # Anything else
96
+ # Procedure call
85
97
  op, *args = list.map {|e| execute(e, env) }
86
98
  op.call(*args)
87
99
  end
100
+
101
+ def execute_sequence(seq, env)
102
+ # execute expressions sequentially and returns the last result
103
+ seq.reduce(nil) {|res, expr| res = execute(expr, env) }
104
+ end
88
105
  end
89
106
  end
@@ -9,11 +9,10 @@ require 'racc/parser.rb'
9
9
  require 'strscan'
10
10
 
11
11
  module Rubic
12
- class UnknownCharacterError < StandardError; end
13
12
 
14
13
  class Parser < Racc::Parser
15
14
 
16
- module_eval(<<'...end parser.y/module_eval...', 'parser.y', 92)
15
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 113)
17
16
  EOT = [false, nil] # end of token
18
17
  SYM_CHARS = Regexp.escape("+-*/<>=?")
19
18
 
@@ -45,98 +44,128 @@ def next_token
45
44
  [:KW_AND, nil]
46
45
  when 'or'
47
46
  [:KW_OR, nil]
47
+ when 'lambda'
48
+ [:KW_LAMBDA, nil]
49
+ when 'let'
50
+ [:KW_LET, nil]
48
51
  else
49
52
  [:IDENT, @s[0]]
50
53
  end
51
54
  else
52
- raise UnknownCharacterError, "unknown character #{@s.getch}"
55
+ raise Rubic::ParseError, "unknown character #{@s.getch}"
53
56
  end
54
57
  end
55
58
 
59
+ def on_error(t, val, vstack)
60
+ raise Rubic::ParseError, "parse error near #{token_to_str(t)}"
61
+ end
62
+
56
63
  ...end parser.y/module_eval...
57
64
  ##### State transition tables begin ###
58
65
 
59
66
  racc_action_table = [
60
- 2, 10, 25, 11, 3, 4, 13, 14, 2, 15,
61
- 2, 16, 3, 4, 3, 4, 36, 2, 25, 2,
62
- 33, 3, 4, 3, 4, 2, 43, 2, 44, 3,
63
- 4, 3, 4, 2, 38, 2, 45, 3, 4, 3,
64
- 4, 2, 46, 47, 22, 3, 4, 2, 21, 27,
65
- 9, 3, 4, 2, 32, 29, nil, 3, 4, 2,
66
- nil, 30, 2, 3, 4, 2, 3, 4, 2, 3,
67
- 4, nil, 3, 4, 2, nil, 49, nil, 3, 4 ]
67
+ 2, 12, 38, 13, 3, 4, 15, 16, 2, 17,
68
+ 18, 19, 3, 4, 2, 57, 42, 2, 3, 4,
69
+ 2, 3, 4, 2, 3, 4, 2, 3, 4, 26,
70
+ 3, 4, 2, 25, 64, 58, 3, 4, 2, 56,
71
+ 63, 2, 3, 4, 2, 3, 4, 2, 3, 4,
72
+ 32, 3, 4, 2, 52, 33, 51, 3, 4, 2,
73
+ 29, 35, 39, 3, 4, 2, 61, 36, 2, 3,
74
+ 4, 2, 3, 4, 2, 3, 4, 31, 3, 4,
75
+ 2, 29, 66, 2, 3, 4, 2, 3, 4, 2,
76
+ 3, 4, 46, 3, 4, 54, 55, 53, 51, 20,
77
+ 11, 67 ]
68
78
 
69
79
  racc_action_check = [
70
- 2, 2, 14, 2, 2, 2, 2, 2, 25, 2,
71
- 35, 9, 25, 25, 35, 35, 25, 37, 23, 10,
72
- 23, 37, 37, 10, 10, 11, 39, 12, 39, 11,
73
- 11, 12, 12, 36, 31, 0, 40, 36, 36, 0,
74
- 0, 15, 41, 42, 13, 15, 15, 17, 13, 17,
75
- 1, 17, 17, 19, 22, 19, nil, 19, 19, 20,
76
- nil, 20, 21, 20, 20, 43, 21, 21, 26, 43,
77
- 43, nil, 26, 26, 48, nil, 48, nil, 48, 48 ]
80
+ 2, 2, 26, 2, 2, 2, 2, 2, 29, 2,
81
+ 2, 2, 29, 29, 55, 49, 29, 61, 55, 55,
82
+ 12, 61, 61, 13, 12, 12, 14, 13, 13, 15,
83
+ 14, 14, 60, 15, 60, 50, 60, 60, 59, 48,
84
+ 59, 17, 59, 59, 0, 17, 17, 53, 0, 0,
85
+ 19, 53, 53, 21, 44, 21, 44, 21, 21, 23,
86
+ 27, 23, 27, 23, 23, 24, 54, 24, 25, 24,
87
+ 24, 52, 25, 25, 43, 52, 52, 18, 43, 43,
88
+ 62, 16, 62, 41, 62, 62, 42, 41, 41, 30,
89
+ 42, 42, 37, 30, 30, 45, 47, 45, 47, 11,
90
+ 1, 65 ]
78
91
 
79
92
  racc_action_pointer = [
80
- 33, 50, -2, nil, nil, nil, nil, nil, nil, 11,
81
- 17, 23, 25, 42, 0, 39, nil, 45, nil, 51,
82
- 57, 60, 48, 16, nil, 6, 66, nil, nil, nil,
83
- nil, 30, nil, nil, nil, 8, 31, 15, nil, 22,
84
- 32, 38, 39, 63, nil, nil, nil, nil, 72, nil ]
93
+ 42, 100, -2, nil, nil, nil, nil, nil, nil, nil,
94
+ nil, 99, 18, 21, 24, 27, 79, 39, 75, 48,
95
+ nil, 51, nil, 57, 63, 66, -4, 58, nil, 6,
96
+ 87, nil, nil, nil, nil, nil, nil, 88, nil, nil,
97
+ nil, 81, 84, 72, 50, 93, nil, 92, 35, 11,
98
+ 31, nil, 69, 45, 60, 12, nil, nil, nil, 36,
99
+ 30, 15, 78, nil, nil, 97, nil, nil ]
85
100
 
86
101
  racc_action_default = [
87
- -22, -22, -22, -4, -5, -6, -7, -8, -9, -22,
88
- -22, -22, -22, -22, -22, -22, 50, -22, -10, -22,
89
- -22, -22, -22, -22, -17, -22, -22, -1, -11, -2,
90
- -3, -22, -14, -16, -18, -22, -22, -22, -12, -22,
91
- -22, -22, -22, -22, -15, -19, -20, -21, -22, -13 ]
102
+ -28, -28, -28, -4, -5, -6, -7, -8, -9, -10,
103
+ -11, -28, -28, -28, -28, -28, -28, -28, -28, -28,
104
+ 68, -28, -12, -28, -28, -28, -28, -28, -19, -28,
105
+ -28, -16, -26, -1, -13, -2, -3, -28, -16, -18,
106
+ -20, -28, -28, -28, -28, -28, -14, -28, -28, -28,
107
+ -28, -17, -28, -28, -28, -28, -21, -22, -23, -28,
108
+ -28, -28, -28, -24, -25, -28, -15, -27 ]
92
109
 
93
110
  racc_goto_table = [
94
- 1, 24, 12, 23, 39, 17, 19, 20, nil, nil,
95
- 34, nil, nil, nil, nil, 26, nil, 28, nil, 28,
96
- 28, 31, nil, nil, nil, 35, 37, nil, nil, nil,
97
- nil, nil, nil, nil, nil, 40, 41, 42, 48, nil,
98
- nil, nil, nil, nil, nil, nil, nil, nil, 28 ]
111
+ 1, 28, 14, 44, 21, 23, 24, 27, 45, nil,
112
+ 47, nil, 40, nil, nil, nil, nil, 30, nil, nil,
113
+ nil, 34, nil, 34, 34, 37, nil, nil, nil, 41,
114
+ 43, nil, nil, nil, nil, nil, nil, nil, nil, nil,
115
+ nil, 48, 49, 50, 59, 60, nil, 62, nil, nil,
116
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 34,
117
+ 34, 65, 34 ]
99
118
 
100
119
  racc_goto_check = [
101
- 1, 9, 1, 8, 7, 2, 2, 2, nil, nil,
102
- 9, nil, nil, nil, nil, 1, nil, 1, nil, 1,
103
- 1, 1, nil, nil, nil, 1, 1, nil, nil, nil,
104
- nil, nil, nil, nil, nil, 1, 1, 1, 2, nil,
105
- nil, nil, nil, nil, nil, nil, nil, nil, 1 ]
120
+ 1, 11, 1, 9, 2, 2, 2, 10, 12, nil,
121
+ 9, nil, 11, nil, nil, nil, nil, 1, nil, nil,
122
+ nil, 1, nil, 1, 1, 1, nil, nil, nil, 1,
123
+ 1, nil, nil, nil, nil, nil, nil, nil, nil, nil,
124
+ nil, 1, 1, 1, 2, 2, nil, 2, nil, nil,
125
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 1,
126
+ 1, 1, 1 ]
106
127
 
107
128
  racc_goto_pointer = [
108
- nil, 0, -5, nil, nil, nil, nil, -28, -11, -13 ]
129
+ nil, 0, -8, nil, nil, nil, nil, nil, nil, -28,
130
+ -9, -15, -24 ]
109
131
 
110
132
  racc_goto_default = [
111
- nil, 18, nil, 5, 6, 7, 8, nil, nil, nil ]
133
+ nil, 22, nil, 5, 6, 7, 8, 9, 10, nil,
134
+ nil, nil, nil ]
112
135
 
113
136
  racc_reduce_table = [
114
137
  0, 0, :racc_error,
115
- 4, 13, :_reduce_1,
116
- 4, 13, :_reduce_2,
117
- 4, 13, :_reduce_3,
118
- 1, 13, :_reduce_none,
119
- 1, 13, :_reduce_none,
120
- 1, 13, :_reduce_none,
121
- 1, 13, :_reduce_none,
122
- 1, 13, :_reduce_none,
123
- 1, 13, :_reduce_none,
124
- 1, 14, :_reduce_10,
125
- 2, 14, :_reduce_11,
126
- 5, 15, :_reduce_12,
127
- 8, 16, :_reduce_13,
128
- 0, 19, :_reduce_14,
129
- 2, 19, :_reduce_15,
130
- 4, 17, :_reduce_16,
131
- 1, 20, :_reduce_17,
132
- 2, 20, :_reduce_18,
133
- 4, 21, :_reduce_19,
134
- 4, 21, :_reduce_20,
135
- 6, 18, :_reduce_21 ]
136
-
137
- racc_reduce_n = 22
138
-
139
- racc_shift_n = 50
138
+ 4, 15, :_reduce_1,
139
+ 4, 15, :_reduce_2,
140
+ 4, 15, :_reduce_3,
141
+ 1, 15, :_reduce_none,
142
+ 1, 15, :_reduce_none,
143
+ 1, 15, :_reduce_none,
144
+ 1, 15, :_reduce_none,
145
+ 1, 15, :_reduce_none,
146
+ 1, 15, :_reduce_none,
147
+ 1, 15, :_reduce_none,
148
+ 1, 15, :_reduce_none,
149
+ 1, 16, :_reduce_12,
150
+ 2, 16, :_reduce_13,
151
+ 5, 17, :_reduce_14,
152
+ 8, 18, :_reduce_15,
153
+ 0, 23, :_reduce_16,
154
+ 2, 23, :_reduce_17,
155
+ 4, 19, :_reduce_18,
156
+ 1, 24, :_reduce_19,
157
+ 2, 24, :_reduce_20,
158
+ 4, 25, :_reduce_21,
159
+ 4, 25, :_reduce_22,
160
+ 6, 20, :_reduce_23,
161
+ 7, 21, :_reduce_24,
162
+ 7, 22, :_reduce_25,
163
+ 0, 26, :_reduce_26,
164
+ 5, 26, :_reduce_27 ]
165
+
166
+ racc_reduce_n = 28
167
+
168
+ racc_shift_n = 68
140
169
 
141
170
  racc_token_table = {
142
171
  false => 0,
@@ -150,9 +179,11 @@ racc_token_table = {
150
179
  :KW_DEFINE => 8,
151
180
  :KW_COND => 9,
152
181
  :KW_ELSE => 10,
153
- :KW_IF => 11 }
182
+ :KW_IF => 11,
183
+ :KW_LAMBDA => 12,
184
+ :KW_LET => 13 }
154
185
 
155
- racc_nt_base = 12
186
+ racc_nt_base = 14
156
187
 
157
188
  racc_use_result_var = false
158
189
 
@@ -185,6 +216,8 @@ Racc_token_to_s_table = [
185
216
  "KW_COND",
186
217
  "KW_ELSE",
187
218
  "KW_IF",
219
+ "KW_LAMBDA",
220
+ "KW_LET",
188
221
  "$start",
189
222
  "expr",
190
223
  "seq",
@@ -192,9 +225,12 @@ Racc_token_to_s_table = [
192
225
  "define_proc",
193
226
  "cond",
194
227
  "if",
228
+ "lambda",
229
+ "let",
195
230
  "params",
196
231
  "clauses",
197
- "clause" ]
232
+ "clause",
233
+ "defs" ]
198
234
 
199
235
  Racc_debug_parser = false
200
236
 
@@ -235,90 +271,122 @@ module_eval(<<'.,.,', 'parser.y', 14)
235
271
 
236
272
  # reduce 9 omitted
237
273
 
238
- module_eval(<<'.,.,', 'parser.y', 25)
239
- def _reduce_10(val, _values)
274
+ # reduce 10 omitted
275
+
276
+ # reduce 11 omitted
277
+
278
+ module_eval(<<'.,.,', 'parser.y', 27)
279
+ def _reduce_12(val, _values)
240
280
  [val[0]]
241
281
 
242
282
  end
243
283
  .,.,
244
284
 
245
- module_eval(<<'.,.,', 'parser.y', 29)
246
- def _reduce_11(val, _values)
285
+ module_eval(<<'.,.,', 'parser.y', 31)
286
+ def _reduce_13(val, _values)
247
287
  val[0].push(val[1])
248
288
 
249
289
  end
250
290
  .,.,
251
291
 
252
- module_eval(<<'.,.,', 'parser.y', 35)
253
- def _reduce_12(val, _values)
292
+ module_eval(<<'.,.,', 'parser.y', 37)
293
+ def _reduce_14(val, _values)
254
294
  [:define, val[2], val[3]]
255
295
 
256
296
  end
257
297
  .,.,
258
298
 
259
- module_eval(<<'.,.,', 'parser.y', 41)
260
- def _reduce_13(val, _values)
299
+ module_eval(<<'.,.,', 'parser.y', 43)
300
+ def _reduce_15(val, _values)
261
301
  [:define_proc, [val[3], *val[4]], *val[6]]
262
302
 
263
303
  end
264
304
  .,.,
265
305
 
266
- module_eval(<<'.,.,', 'parser.y', 46)
267
- def _reduce_14(val, _values)
306
+ module_eval(<<'.,.,', 'parser.y', 48)
307
+ def _reduce_16(val, _values)
268
308
  []
269
309
 
270
310
  end
271
311
  .,.,
272
312
 
273
- module_eval(<<'.,.,', 'parser.y', 50)
274
- def _reduce_15(val, _values)
313
+ module_eval(<<'.,.,', 'parser.y', 52)
314
+ def _reduce_17(val, _values)
275
315
  val[0].push(val[1])
276
316
 
277
317
  end
278
318
  .,.,
279
319
 
280
- module_eval(<<'.,.,', 'parser.y', 56)
281
- def _reduce_16(val, _values)
320
+ module_eval(<<'.,.,', 'parser.y', 58)
321
+ def _reduce_18(val, _values)
282
322
  [:cond, *val[2]]
283
323
 
284
324
  end
285
325
  .,.,
286
326
 
287
- module_eval(<<'.,.,', 'parser.y', 61)
288
- def _reduce_17(val, _values)
327
+ module_eval(<<'.,.,', 'parser.y', 63)
328
+ def _reduce_19(val, _values)
289
329
  [val[0]]
290
330
 
291
331
  end
292
332
  .,.,
293
333
 
294
- module_eval(<<'.,.,', 'parser.y', 65)
295
- def _reduce_18(val, _values)
334
+ module_eval(<<'.,.,', 'parser.y', 67)
335
+ def _reduce_20(val, _values)
296
336
  val[0].push(val[1])
297
337
 
298
338
  end
299
339
  .,.,
300
340
 
301
- module_eval(<<'.,.,', 'parser.y', 70)
302
- def _reduce_19(val, _values)
341
+ module_eval(<<'.,.,', 'parser.y', 72)
342
+ def _reduce_21(val, _values)
303
343
  [val[1], val[2]]
304
344
 
305
345
  end
306
346
  .,.,
307
347
 
308
- module_eval(<<'.,.,', 'parser.y', 74)
309
- def _reduce_20(val, _values)
348
+ module_eval(<<'.,.,', 'parser.y', 76)
349
+ def _reduce_22(val, _values)
310
350
  [:else, val[2]]
311
351
 
312
352
  end
313
353
  .,.,
314
354
 
315
- module_eval(<<'.,.,', 'parser.y', 80)
316
- def _reduce_21(val, _values)
355
+ module_eval(<<'.,.,', 'parser.y', 82)
356
+ def _reduce_23(val, _values)
317
357
  [:if, val[2], val[3], val[4]]
318
358
 
319
359
  end
320
360
  .,.,
321
361
 
362
+ module_eval(<<'.,.,', 'parser.y', 88)
363
+ def _reduce_24(val, _values)
364
+ [:lambda, val[3], *val[5]]
365
+
366
+ end
367
+ .,.,
368
+
369
+ module_eval(<<'.,.,', 'parser.y', 94)
370
+ def _reduce_25(val, _values)
371
+ [:let, val[3], *val[5]]
372
+
373
+ end
374
+ .,.,
375
+
376
+ module_eval(<<'.,.,', 'parser.y', 98)
377
+ def _reduce_26(val, _values)
378
+ []
379
+
380
+ end
381
+ .,.,
382
+
383
+ module_eval(<<'.,.,', 'parser.y', 102)
384
+ def _reduce_27(val, _values)
385
+ val[0].push([val[2], val[3]])
386
+
387
+ end
388
+ .,.,
389
+
322
390
  def _reduce_none(val, _values)
323
391
  val[0]
324
392
  end
@@ -20,6 +20,8 @@ rule
20
20
  | define_proc
21
21
  | cond
22
22
  | if
23
+ | lambda
24
+ | let
23
25
 
24
26
  seq : expr
25
27
  {
@@ -80,13 +82,32 @@ rule
80
82
  {
81
83
  [:if, val[2], val[3], val[4]]
82
84
  }
85
+
86
+ /* lambda expression */
87
+ lambda : '(' KW_LAMBDA '(' params ')' seq ')'
88
+ {
89
+ [:lambda, val[3], *val[5]]
90
+ }
91
+
92
+ /* let expression */
93
+ let : '(' KW_LET '(' defs ')' seq ')'
94
+ {
95
+ [:let, val[3], *val[5]]
96
+ }
97
+ defs : /* empty */
98
+ {
99
+ []
100
+ }
101
+ | defs '(' IDENT expr ')'
102
+ {
103
+ val[0].push([val[2], val[3]])
104
+ }
83
105
  end
84
106
 
85
107
  ---- header
86
108
  require 'strscan'
87
109
 
88
110
  module Rubic
89
- class UnknownCharacterError < StandardError; end
90
111
 
91
112
  ---- inner
92
113
  EOT = [false, nil] # end of token
@@ -120,13 +141,21 @@ def next_token
120
141
  [:KW_AND, nil]
121
142
  when 'or'
122
143
  [:KW_OR, nil]
144
+ when 'lambda'
145
+ [:KW_LAMBDA, nil]
146
+ when 'let'
147
+ [:KW_LET, nil]
123
148
  else
124
149
  [:IDENT, @s[0]]
125
150
  end
126
151
  else
127
- raise UnknownCharacterError, "unknown character #{@s.getch}"
152
+ raise Rubic::ParseError, "unknown character #{@s.getch}"
128
153
  end
129
154
  end
130
155
 
156
+ def on_error(t, val, vstack)
157
+ raise Rubic::ParseError, "parse error near #{token_to_str(t)}"
158
+ end
159
+
131
160
  ---- footer
132
161
  end # of module Rubic
@@ -1,3 +1,3 @@
1
1
  module Rubic
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
18
  spec.require_paths = ["lib"]
19
+ spec.executables = ['rubic']
19
20
 
20
21
  spec.add_development_dependency "bundler", "~> 1.9"
21
22
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - notozeki
@@ -69,7 +69,8 @@ dependencies:
69
69
  description: Rubic is a very simple Scheme interpreter written in Ruby.
70
70
  email:
71
71
  - notozeki@gmail.com
72
- executables: []
72
+ executables:
73
+ - rubic
73
74
  extensions: []
74
75
  extra_rdoc_files: []
75
76
  files:
@@ -80,6 +81,7 @@ files:
80
81
  - README.md
81
82
  - Rakefile
82
83
  - bin/console
84
+ - bin/rubic
83
85
  - bin/setup
84
86
  - lib/rubic.rb
85
87
  - lib/rubic/environment.rb