dagon 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. data/.gitignore +2 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/README.md +86 -0
  6. data/Rakefile +40 -0
  7. data/bin/dagon +44 -0
  8. data/bin/dspec +35 -0
  9. data/bin/idg +15 -0
  10. data/bin/idgr +16 -0
  11. data/build/parser.rb +1015 -0
  12. data/build/scanner.rb +686 -0
  13. data/core/array.rb +64 -0
  14. data/core/block.rb +38 -0
  15. data/core/class.rb +91 -0
  16. data/core/false.rb +38 -0
  17. data/core/float.rb +93 -0
  18. data/core/frame.rb +24 -0
  19. data/core/hash.rb +51 -0
  20. data/core/integer.rb +98 -0
  21. data/core/object.rb +50 -0
  22. data/core/string.rb +57 -0
  23. data/core/true.rb +37 -0
  24. data/core/vm.rb +125 -0
  25. data/core/void.rb +37 -0
  26. data/dagon.gemspec +19 -0
  27. data/dagon.vim +45 -0
  28. data/dagon/ast/array_node.rb +17 -0
  29. data/dagon/ast/assignment_node.rb +21 -0
  30. data/dagon/ast/block_node.rb +19 -0
  31. data/dagon/ast/class_definition_node.rb +24 -0
  32. data/dagon/ast/constant_ref_node.rb +15 -0
  33. data/dagon/ast/frame.rb +23 -0
  34. data/dagon/ast/function_call_node.rb +33 -0
  35. data/dagon/ast/function_definition_node.rb +15 -0
  36. data/dagon/ast/function_node.rb +23 -0
  37. data/dagon/ast/hash_node.rb +16 -0
  38. data/dagon/ast/if_node.rb +20 -0
  39. data/dagon/ast/instance_init_node.rb +28 -0
  40. data/dagon/ast/instance_var_ref_node.rb +21 -0
  41. data/dagon/ast/literal_node.rb +23 -0
  42. data/dagon/ast/node.rb +22 -0
  43. data/dagon/ast/root_node.rb +19 -0
  44. data/dagon/ast/string_node.rb +16 -0
  45. data/dagon/ast/unary_function_call_node.rb +17 -0
  46. data/dagon/ast/var_ref_node.rb +19 -0
  47. data/dagon/ast/while_node.rb +17 -0
  48. data/dagon/parser.y +151 -0
  49. data/dagon/scanner.rl +143 -0
  50. data/examples/assert.dg +8 -0
  51. data/examples/assignment.dg +2 -0
  52. data/examples/block.dg +8 -0
  53. data/examples/class.dg +6 -0
  54. data/examples/conditional.dg +3 -0
  55. data/examples/conditions.dg +6 -0
  56. data/examples/equality.dg +6 -0
  57. data/examples/error.dg +1 -0
  58. data/examples/eval.dg +1 -0
  59. data/examples/fibonacci.dg +15 -0
  60. data/examples/greeter.dg +6 -0
  61. data/examples/input.dg +3 -0
  62. data/examples/instance_variables.dg +11 -0
  63. data/examples/iterate.dg +2 -0
  64. data/examples/method_call.dg +9 -0
  65. data/examples/method_definition.dg +4 -0
  66. data/examples/operators.dg +6 -0
  67. data/examples/output.dg +1 -0
  68. data/examples/require.dg +1 -0
  69. data/spec/array_spec.dg +26 -0
  70. data/spec/assertions.dg +11 -0
  71. data/spec/boolean_spec.dg +48 -0
  72. data/spec/dspec.dg +16 -0
  73. data/spec/float_spec.dg +15 -0
  74. data/spec/hash_spec.dg +6 -0
  75. data/spec/number_spec.dg +18 -0
  76. data/spec/return_spec.dg +12 -0
  77. data/spec/string_spec.dg +18 -0
  78. data/spec/void_spec.dg +9 -0
  79. data/spec/while_spec.dg +7 -0
  80. metadata +180 -0
@@ -0,0 +1,686 @@
1
+
2
+ # line 1 "dagon/scanner.rl"
3
+ # vim: set syntax=ruby:
4
+
5
+ =begin
6
+
7
+ # line 61 "dagon/scanner.rl"
8
+
9
+ =end
10
+
11
+ module Dagon
12
+ class Token < Struct.new(:data, :line); end
13
+ class Scanner
14
+
15
+ def initialize
16
+
17
+ # line 18 "build/scanner.rb"
18
+ class << self
19
+ attr_accessor :_new_parser_actions
20
+ private :_new_parser_actions, :_new_parser_actions=
21
+ end
22
+ self._new_parser_actions = [
23
+ 0, 1, 0, 1, 1, 1, 2, 1,
24
+ 5, 1, 6, 1, 7, 1, 8, 1,
25
+ 9, 1, 10, 1, 11, 1, 12, 1,
26
+ 13, 1, 14, 1, 15, 1, 16, 1,
27
+ 17, 1, 18, 1, 19, 1, 20, 1,
28
+ 21, 1, 22, 1, 23, 1, 24, 1,
29
+ 25, 1, 26, 1, 27, 1, 28, 1,
30
+ 29, 1, 30, 1, 31, 1, 32, 1,
31
+ 33, 1, 34, 1, 35, 1, 36, 1,
32
+ 37, 2, 2, 3, 2, 2, 4
33
+ ]
34
+
35
+ class << self
36
+ attr_accessor :_new_parser_key_offsets
37
+ private :_new_parser_key_offsets, :_new_parser_key_offsets=
38
+ end
39
+ self._new_parser_key_offsets = [
40
+ 0, 1, 2, 3, 5, 6, 8, 9,
41
+ 11, 11, 13, 15, 46, 48, 60, 62,
42
+ 64, 65, 66, 71, 73, 78, 81, 83,
43
+ 84, 91, 97, 103, 109, 115, 121, 127,
44
+ 133, 139, 145, 151, 157, 163, 169, 175,
45
+ 181, 187
46
+ ]
47
+
48
+ class << self
49
+ attr_accessor :_new_parser_trans_keys
50
+ private :_new_parser_trans_keys, :_new_parser_trans_keys=
51
+ end
52
+ self._new_parser_trans_keys = [
53
+ 61, 32, 38, 32, 42, 32, 32, 61,
54
+ 124, 34, 92, 10, 13, 48, 57, 10,
55
+ 13, 32, 33, 34, 35, 40, 41, 44,
56
+ 45, 46, 58, 64, 91, 93, 101, 102,
57
+ 105, 116, 118, 119, 123, 125, 9, 12,
58
+ 48, 57, 65, 90, 97, 122, 10, 13,
59
+ 32, 33, 38, 42, 43, 45, 47, 61,
60
+ 94, 124, 60, 62, 34, 92, 10, 13,
61
+ 10, 32, 62, 48, 57, 97, 122, 48,
62
+ 57, 45, 48, 57, 97, 122, 46, 48,
63
+ 57, 48, 57, 32, 45, 48, 57, 65,
64
+ 90, 97, 122, 45, 108, 48, 57, 97,
65
+ 122, 45, 115, 48, 57, 97, 122, 45,
66
+ 101, 48, 57, 97, 122, 45, 105, 48,
67
+ 57, 97, 122, 45, 102, 48, 57, 97,
68
+ 122, 45, 97, 48, 57, 98, 122, 45,
69
+ 108, 48, 57, 97, 122, 45, 115, 48,
70
+ 57, 97, 122, 45, 101, 48, 57, 97,
71
+ 122, 45, 114, 48, 57, 97, 122, 45,
72
+ 117, 48, 57, 97, 122, 45, 111, 48,
73
+ 57, 97, 122, 45, 105, 48, 57, 97,
74
+ 122, 45, 100, 48, 57, 97, 122, 45,
75
+ 104, 48, 57, 97, 122, 45, 105, 48,
76
+ 57, 97, 122, 45, 108, 48, 57, 97,
77
+ 122, 0
78
+ ]
79
+
80
+ class << self
81
+ attr_accessor :_new_parser_single_lengths
82
+ private :_new_parser_single_lengths, :_new_parser_single_lengths=
83
+ end
84
+ self._new_parser_single_lengths = [
85
+ 1, 1, 1, 2, 1, 2, 1, 2,
86
+ 0, 2, 0, 23, 2, 10, 2, 2,
87
+ 1, 1, 1, 0, 1, 1, 0, 1,
88
+ 1, 2, 2, 2, 2, 2, 2, 2,
89
+ 2, 2, 2, 2, 2, 2, 2, 2,
90
+ 2, 2
91
+ ]
92
+
93
+ class << self
94
+ attr_accessor :_new_parser_range_lengths
95
+ private :_new_parser_range_lengths, :_new_parser_range_lengths=
96
+ end
97
+ self._new_parser_range_lengths = [
98
+ 0, 0, 0, 0, 0, 0, 0, 0,
99
+ 0, 0, 1, 4, 0, 1, 0, 0,
100
+ 0, 0, 2, 1, 2, 1, 1, 0,
101
+ 3, 2, 2, 2, 2, 2, 2, 2,
102
+ 2, 2, 2, 2, 2, 2, 2, 2,
103
+ 2, 2
104
+ ]
105
+
106
+ class << self
107
+ attr_accessor :_new_parser_index_offsets
108
+ private :_new_parser_index_offsets, :_new_parser_index_offsets=
109
+ end
110
+ self._new_parser_index_offsets = [
111
+ 0, 2, 4, 6, 9, 11, 14, 16,
112
+ 19, 20, 23, 25, 53, 56, 68, 71,
113
+ 74, 76, 78, 82, 84, 88, 91, 93,
114
+ 95, 100, 105, 110, 115, 120, 125, 130,
115
+ 135, 140, 145, 150, 155, 160, 165, 170,
116
+ 175, 180
117
+ ]
118
+
119
+ class << self
120
+ attr_accessor :_new_parser_indicies
121
+ private :_new_parser_indicies, :_new_parser_indicies=
122
+ end
123
+ self._new_parser_indicies = [
124
+ 1, 0, 2, 0, 1, 0, 2, 3,
125
+ 0, 4, 0, 2, 1, 0, 1, 0,
126
+ 7, 8, 6, 6, 10, 11, 9, 13,
127
+ 12, 16, 16, 17, 18, 19, 20, 21,
128
+ 22, 23, 24, 25, 27, 28, 30, 31,
129
+ 33, 34, 35, 36, 37, 38, 39, 40,
130
+ 15, 26, 29, 32, 14, 16, 16, 41,
131
+ 43, 44, 45, 46, 1, 1, 1, 1,
132
+ 1, 48, 47, 42, 7, 8, 6, 10,
133
+ 11, 9, 10, 50, 51, 49, 53, 52,
134
+ 32, 49, 52, 54, 32, 32, 32, 55,
135
+ 56, 26, 54, 13, 57, 59, 58, 29,
136
+ 29, 29, 29, 60, 32, 62, 32, 32,
137
+ 61, 32, 63, 32, 32, 61, 32, 64,
138
+ 32, 32, 61, 32, 35, 32, 32, 65,
139
+ 32, 66, 32, 32, 61, 32, 67, 32,
140
+ 32, 61, 32, 68, 32, 32, 61, 32,
141
+ 69, 32, 32, 61, 32, 66, 32, 32,
142
+ 61, 32, 70, 32, 32, 61, 32, 69,
143
+ 32, 32, 61, 32, 71, 32, 32, 61,
144
+ 32, 72, 32, 32, 61, 32, 66, 32,
145
+ 32, 61, 32, 73, 32, 32, 61, 32,
146
+ 74, 32, 32, 61, 32, 69, 32, 32,
147
+ 61, 0
148
+ ]
149
+
150
+ class << self
151
+ attr_accessor :_new_parser_trans_targs
152
+ private :_new_parser_trans_targs, :_new_parser_trans_targs=
153
+ end
154
+ self._new_parser_trans_targs = [
155
+ 11, 1, 11, 4, 11, 11, 7, 11,
156
+ 8, 9, 11, 16, 11, 22, 11, 11,
157
+ 12, 13, 11, 14, 15, 11, 11, 17,
158
+ 18, 11, 21, 23, 11, 24, 11, 11,
159
+ 20, 25, 30, 29, 34, 36, 39, 11,
160
+ 11, 11, 11, 11, 0, 2, 3, 5,
161
+ 6, 11, 11, 11, 19, 11, 11, 11,
162
+ 10, 11, 11, 11, 11, 11, 26, 27,
163
+ 28, 11, 20, 31, 32, 33, 35, 37,
164
+ 38, 40, 41
165
+ ]
166
+
167
+ class << self
168
+ attr_accessor :_new_parser_trans_actions
169
+ private :_new_parser_trans_actions, :_new_parser_trans_actions=
170
+ end
171
+ self._new_parser_trans_actions = [
172
+ 67, 0, 35, 0, 37, 69, 0, 9,
173
+ 0, 0, 7, 0, 65, 0, 43, 41,
174
+ 0, 5, 31, 5, 5, 17, 19, 0,
175
+ 0, 29, 5, 0, 33, 0, 25, 27,
176
+ 76, 0, 0, 0, 0, 0, 0, 21,
177
+ 23, 45, 61, 15, 0, 0, 0, 0,
178
+ 0, 63, 47, 39, 0, 13, 59, 71,
179
+ 0, 57, 55, 11, 51, 53, 0, 0,
180
+ 0, 49, 73, 0, 0, 0, 0, 0,
181
+ 0, 0, 0
182
+ ]
183
+
184
+ class << self
185
+ attr_accessor :_new_parser_to_state_actions
186
+ private :_new_parser_to_state_actions, :_new_parser_to_state_actions=
187
+ end
188
+ self._new_parser_to_state_actions = [
189
+ 0, 0, 0, 0, 0, 0, 0, 0,
190
+ 0, 0, 0, 1, 0, 0, 0, 0,
191
+ 0, 0, 0, 0, 0, 0, 0, 0,
192
+ 0, 0, 0, 0, 0, 0, 0, 0,
193
+ 0, 0, 0, 0, 0, 0, 0, 0,
194
+ 0, 0
195
+ ]
196
+
197
+ class << self
198
+ attr_accessor :_new_parser_from_state_actions
199
+ private :_new_parser_from_state_actions, :_new_parser_from_state_actions=
200
+ end
201
+ self._new_parser_from_state_actions = [
202
+ 0, 0, 0, 0, 0, 0, 0, 0,
203
+ 0, 0, 0, 3, 0, 0, 0, 0,
204
+ 0, 0, 0, 0, 0, 0, 0, 0,
205
+ 0, 0, 0, 0, 0, 0, 0, 0,
206
+ 0, 0, 0, 0, 0, 0, 0, 0,
207
+ 0, 0
208
+ ]
209
+
210
+ class << self
211
+ attr_accessor :_new_parser_eof_trans
212
+ private :_new_parser_eof_trans, :_new_parser_eof_trans=
213
+ end
214
+ self._new_parser_eof_trans = [
215
+ 1, 1, 1, 1, 1, 1, 1, 6,
216
+ 6, 6, 13, 0, 42, 43, 50, 50,
217
+ 51, 50, 50, 55, 56, 55, 58, 59,
218
+ 61, 62, 62, 62, 66, 62, 62, 62,
219
+ 62, 62, 62, 62, 62, 62, 62, 62,
220
+ 62, 62
221
+ ]
222
+
223
+ class << self
224
+ attr_accessor :new_parser_start
225
+ end
226
+ self.new_parser_start = 11;
227
+ class << self
228
+ attr_accessor :new_parser_first_final
229
+ end
230
+ self.new_parser_first_final = 11;
231
+ class << self
232
+ attr_accessor :new_parser_error
233
+ end
234
+ self.new_parser_error = -1;
235
+
236
+ class << self
237
+ attr_accessor :new_parser_en_main
238
+ end
239
+ self.new_parser_en_main = 11;
240
+
241
+
242
+ # line 70 "dagon/scanner.rl"
243
+ # % fix syntax highlighting
244
+ end
245
+
246
+ def emit(name, data, start_char, end_char)
247
+ handle_indents
248
+ if @tokens.last && @tokens.last[0] == :IDENTIFIER && name == :LBRACKET
249
+ @tokens << ['[', Token.new(data[start_char...end_char], @line)]
250
+ else
251
+ @tokens << [name, Token.new(data[start_char...end_char], @line)]
252
+ end
253
+ @column += end_char - start_char
254
+ end
255
+
256
+ def emit_string(data, start_char, end_char)
257
+ handle_indents
258
+ str = data[(start_char+1)...(end_char-1)]
259
+ str = eval("\"#{str}\"") # ...
260
+ @tokens << [:STRING, Token.new(str, @line)]
261
+ @column += end_char - start_char
262
+ end
263
+
264
+ def handle_indents
265
+ if @check_indents
266
+ @check_indents = false
267
+ if @indent_count > @last_indent_count
268
+ (@indent_count - @last_indent_count).times do
269
+ @tokens << [:INDENT, Token.new(" ", @line)]
270
+ end
271
+ elsif @indent_count < @last_indent_count
272
+ (@last_indent_count - @indent_count).times do
273
+ @tokens << [:DEDENT, Token.new(" ", @line)]
274
+ end
275
+ @last_indent_count = @indent_count
276
+ end
277
+ end
278
+ end
279
+
280
+ def problem(data, ts, te)
281
+ puts "Unexpected \"#{data[ts...te]}\" on line #{@line}\n" +
282
+ "#{@line}: #{@lines[@line-1]}"
283
+ exit(1)
284
+ end
285
+
286
+ def self.tokenize data, filename
287
+ new.tokenize(data, filename)
288
+ end
289
+
290
+ def reset
291
+ @line = 1
292
+ @column = 0
293
+ @tokens = []
294
+ @indent_count = 0
295
+ @last_indent_count = 0
296
+ @check_indents = true
297
+ end
298
+
299
+ def tokenize(data, filename)
300
+ @filename = filename
301
+ @data = data
302
+ @lines = data.lines.to_a
303
+ reset
304
+
305
+ # line 306 "build/scanner.rb"
306
+ begin
307
+ p ||= 0
308
+ pe ||= data.length
309
+ cs = new_parser_start
310
+ ts = nil
311
+ te = nil
312
+ act = 0
313
+ end
314
+
315
+ # line 132 "dagon/scanner.rl"
316
+ eof = data.length
317
+
318
+ # line 319 "build/scanner.rb"
319
+ begin
320
+ _klen, _trans, _keys, _acts, _nacts = nil
321
+ _goto_level = 0
322
+ _resume = 10
323
+ _eof_trans = 15
324
+ _again = 20
325
+ _test_eof = 30
326
+ _out = 40
327
+ while true
328
+ _trigger_goto = false
329
+ if _goto_level <= 0
330
+ if p == pe
331
+ _goto_level = _test_eof
332
+ next
333
+ end
334
+ end
335
+ if _goto_level <= _resume
336
+ _acts = _new_parser_from_state_actions[cs]
337
+ _nacts = _new_parser_actions[_acts]
338
+ _acts += 1
339
+ while _nacts > 0
340
+ _nacts -= 1
341
+ _acts += 1
342
+ case _new_parser_actions[_acts - 1]
343
+ when 1 then
344
+ # line 1 "NONE"
345
+ begin
346
+ ts = p
347
+ end
348
+ # line 349 "build/scanner.rb"
349
+ end # from state action switch
350
+ end
351
+ if _trigger_goto
352
+ next
353
+ end
354
+ _keys = _new_parser_key_offsets[cs]
355
+ _trans = _new_parser_index_offsets[cs]
356
+ _klen = _new_parser_single_lengths[cs]
357
+ _break_match = false
358
+
359
+ begin
360
+ if _klen > 0
361
+ _lower = _keys
362
+ _upper = _keys + _klen - 1
363
+
364
+ loop do
365
+ break if _upper < _lower
366
+ _mid = _lower + ( (_upper - _lower) >> 1 )
367
+
368
+ if data[p].ord < _new_parser_trans_keys[_mid]
369
+ _upper = _mid - 1
370
+ elsif data[p].ord > _new_parser_trans_keys[_mid]
371
+ _lower = _mid + 1
372
+ else
373
+ _trans += (_mid - _keys)
374
+ _break_match = true
375
+ break
376
+ end
377
+ end # loop
378
+ break if _break_match
379
+ _keys += _klen
380
+ _trans += _klen
381
+ end
382
+ _klen = _new_parser_range_lengths[cs]
383
+ if _klen > 0
384
+ _lower = _keys
385
+ _upper = _keys + (_klen << 1) - 2
386
+ loop do
387
+ break if _upper < _lower
388
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
389
+ if data[p].ord < _new_parser_trans_keys[_mid]
390
+ _upper = _mid - 2
391
+ elsif data[p].ord > _new_parser_trans_keys[_mid+1]
392
+ _lower = _mid + 2
393
+ else
394
+ _trans += ((_mid - _keys) >> 1)
395
+ _break_match = true
396
+ break
397
+ end
398
+ end # loop
399
+ break if _break_match
400
+ _trans += _klen
401
+ end
402
+ end while false
403
+ _trans = _new_parser_indicies[_trans]
404
+ end
405
+ if _goto_level <= _eof_trans
406
+ cs = _new_parser_trans_targs[_trans]
407
+ if _new_parser_trans_actions[_trans] != 0
408
+ _acts = _new_parser_trans_actions[_trans]
409
+ _nacts = _new_parser_actions[_acts]
410
+ _acts += 1
411
+ while _nacts > 0
412
+ _nacts -= 1
413
+ _acts += 1
414
+ case _new_parser_actions[_acts - 1]
415
+ when 2 then
416
+ # line 1 "NONE"
417
+ begin
418
+ te = p+1
419
+ end
420
+ when 3 then
421
+ # line 35 "dagon/scanner.rl"
422
+ begin
423
+ act = 3; end
424
+ when 4 then
425
+ # line 38 "dagon/scanner.rl"
426
+ begin
427
+ act = 6; end
428
+ when 5 then
429
+ # line 34 "dagon/scanner.rl"
430
+ begin
431
+ te = p+1
432
+ begin handle_indents end
433
+ end
434
+ when 6 then
435
+ # line 36 "dagon/scanner.rl"
436
+ begin
437
+ te = p+1
438
+ begin emit_string(data, ts, te) end
439
+ end
440
+ when 7 then
441
+ # line 39 "dagon/scanner.rl"
442
+ begin
443
+ te = p+1
444
+ begin emit(:ASSIGNMENT, data, ts, te-1) end
445
+ end
446
+ when 8 then
447
+ # line 40 "dagon/scanner.rl"
448
+ begin
449
+ te = p+1
450
+ begin emit(:ARROW, data, ts, te) end
451
+ end
452
+ when 9 then
453
+ # line 44 "dagon/scanner.rl"
454
+ begin
455
+ te = p+1
456
+ begin @indent_count += 1; end
457
+ end
458
+ when 10 then
459
+ # line 45 "dagon/scanner.rl"
460
+ begin
461
+ te = p+1
462
+ begin emit(:LPAREN, data, ts, te) end
463
+ end
464
+ when 11 then
465
+ # line 46 "dagon/scanner.rl"
466
+ begin
467
+ te = p+1
468
+ begin emit(:RPAREN, data, ts, te) end
469
+ end
470
+ when 12 then
471
+ # line 47 "dagon/scanner.rl"
472
+ begin
473
+ te = p+1
474
+ begin emit(:LBRACE, data, ts, te) end
475
+ end
476
+ when 13 then
477
+ # line 48 "dagon/scanner.rl"
478
+ begin
479
+ te = p+1
480
+ begin emit(:RBRACE, data, ts, te) end
481
+ end
482
+ when 14 then
483
+ # line 49 "dagon/scanner.rl"
484
+ begin
485
+ te = p+1
486
+ begin emit(:LBRACKET, data, ts, te) end
487
+ end
488
+ when 15 then
489
+ # line 50 "dagon/scanner.rl"
490
+ begin
491
+ te = p+1
492
+ begin emit(:RBRACKET, data, ts, te) end
493
+ end
494
+ when 16 then
495
+ # line 51 "dagon/scanner.rl"
496
+ begin
497
+ te = p+1
498
+ begin emit(:DOT, data, ts, te) end
499
+ end
500
+ when 17 then
501
+ # line 52 "dagon/scanner.rl"
502
+ begin
503
+ te = p+1
504
+ begin emit('!', data, ts, te) end
505
+ end
506
+ when 18 then
507
+ # line 53 "dagon/scanner.rl"
508
+ begin
509
+ te = p+1
510
+ begin emit('@', data, ts, te) end
511
+ end
512
+ when 19 then
513
+ # line 54 "dagon/scanner.rl"
514
+ begin
515
+ te = p+1
516
+ begin emit(data[(ts+1)...(te-1)], data, ts + 1, te - 1) end
517
+ end
518
+ when 20 then
519
+ # line 55 "dagon/scanner.rl"
520
+ begin
521
+ te = p+1
522
+ begin emit(:EXPONENT, data, ts + 1, te - 1) end
523
+ end
524
+ when 21 then
525
+ # line 56 "dagon/scanner.rl"
526
+ begin
527
+ te = p+1
528
+ begin emit(:COMMA, data, ts, te) end
529
+ end
530
+ when 22 then
531
+ # line 57 "dagon/scanner.rl"
532
+ begin
533
+ te = p+1
534
+ end
535
+ when 23 then
536
+ # line 59 "dagon/scanner.rl"
537
+ begin
538
+ te = p+1
539
+ begin problem(data, ts, te) end
540
+ end
541
+ when 24 then
542
+ # line 33 "dagon/scanner.rl"
543
+ begin
544
+ te = p
545
+ p = p - 1; begin @last_indent_count = @indent_count; @indent_count = 0; @line += data[ts...te].lines.count; @column = 0; @check_indents = true end
546
+ end
547
+ when 25 then
548
+ # line 34 "dagon/scanner.rl"
549
+ begin
550
+ te = p
551
+ p = p - 1; begin handle_indents end
552
+ end
553
+ when 26 then
554
+ # line 35 "dagon/scanner.rl"
555
+ begin
556
+ te = p
557
+ p = p - 1; begin emit(data[ts...te].upcase.to_sym, data, ts, te) end
558
+ end
559
+ when 27 then
560
+ # line 37 "dagon/scanner.rl"
561
+ begin
562
+ te = p
563
+ p = p - 1; begin emit(:CONSTANT, data, ts, te) end
564
+ end
565
+ when 28 then
566
+ # line 38 "dagon/scanner.rl"
567
+ begin
568
+ te = p
569
+ p = p - 1; begin emit(:IDENTIFIER, data, ts, te) end
570
+ end
571
+ when 29 then
572
+ # line 41 "dagon/scanner.rl"
573
+ begin
574
+ te = p
575
+ p = p - 1; begin emit(':', data, ts, te) end
576
+ end
577
+ when 30 then
578
+ # line 42 "dagon/scanner.rl"
579
+ begin
580
+ te = p
581
+ p = p - 1; begin emit(:FLOAT, data, ts, te) end
582
+ end
583
+ when 31 then
584
+ # line 43 "dagon/scanner.rl"
585
+ begin
586
+ te = p
587
+ p = p - 1; begin emit(:INTEGER, data, ts, te) end
588
+ end
589
+ when 32 then
590
+ # line 57 "dagon/scanner.rl"
591
+ begin
592
+ te = p
593
+ p = p - 1; end
594
+ when 33 then
595
+ # line 59 "dagon/scanner.rl"
596
+ begin
597
+ te = p
598
+ p = p - 1; begin problem(data, ts, te) end
599
+ end
600
+ when 34 then
601
+ # line 43 "dagon/scanner.rl"
602
+ begin
603
+ begin p = ((te))-1; end
604
+ begin emit(:INTEGER, data, ts, te) end
605
+ end
606
+ when 35 then
607
+ # line 57 "dagon/scanner.rl"
608
+ begin
609
+ begin p = ((te))-1; end
610
+ end
611
+ when 36 then
612
+ # line 59 "dagon/scanner.rl"
613
+ begin
614
+ begin p = ((te))-1; end
615
+ begin problem(data, ts, te) end
616
+ end
617
+ when 37 then
618
+ # line 1 "NONE"
619
+ begin
620
+ case act
621
+ when 3 then
622
+ begin begin p = ((te))-1; end
623
+ emit(data[ts...te].upcase.to_sym, data, ts, te) end
624
+ when 6 then
625
+ begin begin p = ((te))-1; end
626
+ emit(:IDENTIFIER, data, ts, te) end
627
+ end
628
+ end
629
+ # line 630 "build/scanner.rb"
630
+ end # action switch
631
+ end
632
+ end
633
+ if _trigger_goto
634
+ next
635
+ end
636
+ end
637
+ if _goto_level <= _again
638
+ _acts = _new_parser_to_state_actions[cs]
639
+ _nacts = _new_parser_actions[_acts]
640
+ _acts += 1
641
+ while _nacts > 0
642
+ _nacts -= 1
643
+ _acts += 1
644
+ case _new_parser_actions[_acts - 1]
645
+ when 0 then
646
+ # line 1 "NONE"
647
+ begin
648
+ ts = nil; end
649
+ # line 650 "build/scanner.rb"
650
+ end # to state action switch
651
+ end
652
+ if _trigger_goto
653
+ next
654
+ end
655
+ p += 1
656
+ if p != pe
657
+ _goto_level = _resume
658
+ next
659
+ end
660
+ end
661
+ if _goto_level <= _test_eof
662
+ if p == eof
663
+ if _new_parser_eof_trans[cs] > 0
664
+ _trans = _new_parser_eof_trans[cs] - 1;
665
+ _goto_level = _eof_trans
666
+ next;
667
+ end
668
+ end
669
+ end
670
+ if _goto_level <= _out
671
+ break
672
+ end
673
+ end
674
+ end
675
+
676
+ # line 134 "dagon/scanner.rl"
677
+ @check_indents = true
678
+ if @indent_count != 0
679
+ @last_indent_count = @indent_count
680
+ @indent_count = 0
681
+ end
682
+ handle_indents
683
+ @tokens
684
+ end
685
+ end
686
+ end