dagon 0.1.0

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 (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