bakkdoor-blocktalk 0.1.1 → 0.1.2

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 (64) hide show
  1. data/LICENSE +165 -0
  2. data/README.markdown +114 -0
  3. data/TODO +9 -0
  4. data/benchmark.bt +18 -0
  5. data/evaluator.rb +19 -0
  6. data/examples/chained_method_call.bt +15 -0
  7. data/examples/classes_modules.bt +68 -0
  8. data/examples/exceptions.bt +28 -0
  9. data/examples/fac.bt +23 -0
  10. data/examples/inline_ruby.bt +20 -0
  11. data/examples/linecounter.bt +8 -0
  12. data/examples/multiple_methodcall.bt +1 -0
  13. data/examples/portscan.bt +39 -0
  14. data/examples/require.bt +8 -0
  15. data/examples/ruby_methods.bt +20 -0
  16. data/examples/string_interpol.bt +10 -0
  17. data/examples/string_test.bt +13 -0
  18. data/examples/test.bt +45 -0
  19. data/examples/test2.bt +125 -0
  20. data/examples/test3.bt +9 -0
  21. data/grammar/blocktalk.rb +5030 -0
  22. data/grammar/blocktalk.tt +463 -0
  23. data/language-spec/blocktalk-example.bt +38 -0
  24. data/language-spec/blocktalk-lang-spec.bt +232 -0
  25. data/lib/blocktalk/array.bt +60 -0
  26. data/lib/blocktalk/string.bt +9 -0
  27. data/lib/blocktalk.bt +3 -0
  28. data/lib/core.rb +12 -0
  29. data/lib/kernel/array.rb +9 -0
  30. data/lib/kernel/class.rb +46 -0
  31. data/lib/kernel/codeblock.rb +57 -0
  32. data/lib/kernel/console.rb +40 -0
  33. data/lib/kernel/error.rb +11 -0
  34. data/lib/kernel/module.rb +18 -0
  35. data/lib/kernel/object.rb +66 -0
  36. data/lib/kernel/string.rb +5 -0
  37. data/lib/kernel/system.rb +5 -0
  38. data/parser/helpers/method_definitions.rb +31 -0
  39. data/parser/helpers/methodcalls.rb +56 -0
  40. data/parser/nodes/block_literal.rb +42 -0
  41. data/parser/nodes/catch.rb +22 -0
  42. data/parser/nodes/class_method_definition.rb +15 -0
  43. data/parser/nodes/comment.rb +7 -0
  44. data/parser/nodes/ensure.rb +7 -0
  45. data/parser/nodes/expression.rb +7 -0
  46. data/parser/nodes/identifier.rb +7 -0
  47. data/parser/nodes/integer_literal.rb +7 -0
  48. data/parser/nodes/message_receiver.rb +7 -0
  49. data/parser/nodes/message_with_params.rb +8 -0
  50. data/parser/nodes/message_without_params.rb +10 -0
  51. data/parser/nodes/method_definition.rb +31 -0
  52. data/parser/nodes/methodcall.rb +37 -0
  53. data/parser/nodes/multiple_methodcall.rb +28 -0
  54. data/parser/nodes/operator_message.rb +8 -0
  55. data/parser/nodes/require.rb +25 -0
  56. data/parser/nodes/return.rb +7 -0
  57. data/parser/nodes/root.rb +15 -0
  58. data/parser/nodes/string.rb +7 -0
  59. data/parser/nodes/subexpression.rb +7 -0
  60. data/parser/nodes/super_call.rb +12 -0
  61. data/parser/nodes/try.rb +7 -0
  62. data/parser/nodes/yield.rb +18 -0
  63. data/parser/nodes.rb +29 -0
  64. metadata +70 -3
@@ -0,0 +1,5030 @@
1
+ module Blocktalk
2
+ include Treetop::Runtime
3
+
4
+ def root
5
+ @root || :blocktalk_programm
6
+ end
7
+
8
+ module BlocktalkProgramm0
9
+ def exprs
10
+ elements[1]
11
+ end
12
+
13
+ end
14
+
15
+ def _nt_blocktalk_programm
16
+ start_index = index
17
+ if node_cache[:blocktalk_programm].has_key?(index)
18
+ cached = node_cache[:blocktalk_programm][index]
19
+ @index = cached.interval.end if cached
20
+ return cached
21
+ end
22
+
23
+ i0, s0 = index, []
24
+ s1, i1 = [], index
25
+ loop do
26
+ r2 = _nt_ws
27
+ if r2
28
+ s1 << r2
29
+ else
30
+ break
31
+ end
32
+ end
33
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
34
+ s0 << r1
35
+ if r1
36
+ s3, i3 = [], index
37
+ loop do
38
+ r4 = _nt_expression
39
+ if r4
40
+ s3 << r4
41
+ else
42
+ break
43
+ end
44
+ end
45
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
46
+ s0 << r3
47
+ if r3
48
+ s5, i5 = [], index
49
+ loop do
50
+ r6 = _nt_ws
51
+ if r6
52
+ s5 << r6
53
+ else
54
+ break
55
+ end
56
+ end
57
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
58
+ s0 << r5
59
+ end
60
+ end
61
+ if s0.last
62
+ r0 = instantiate_node(RootNode,input, i0...index, s0)
63
+ r0.extend(BlocktalkProgramm0)
64
+ else
65
+ self.index = i0
66
+ r0 = nil
67
+ end
68
+
69
+ node_cache[:blocktalk_programm][start_index] = r0
70
+
71
+ return r0
72
+ end
73
+
74
+ module Comment0
75
+ end
76
+
77
+ module Comment1
78
+ end
79
+
80
+ def _nt_comment
81
+ start_index = index
82
+ if node_cache[:comment].has_key?(index)
83
+ cached = node_cache[:comment][index]
84
+ @index = cached.interval.end if cached
85
+ return cached
86
+ end
87
+
88
+ i0, s0 = index, []
89
+ if input.index('#', index) == index
90
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
91
+ @index += 1
92
+ else
93
+ terminal_parse_failure('#')
94
+ r1 = nil
95
+ end
96
+ s0 << r1
97
+ if r1
98
+ s2, i2 = [], index
99
+ loop do
100
+ i3, s3 = index, []
101
+ i4 = index
102
+ if input.index(Regexp.new('[\\n]'), index) == index
103
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
104
+ @index += 1
105
+ else
106
+ r5 = nil
107
+ end
108
+ if r5
109
+ r4 = nil
110
+ else
111
+ self.index = i4
112
+ r4 = instantiate_node(SyntaxNode,input, index...index)
113
+ end
114
+ s3 << r4
115
+ if r4
116
+ if index < input_length
117
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
118
+ @index += 1
119
+ else
120
+ terminal_parse_failure("any character")
121
+ r6 = nil
122
+ end
123
+ s3 << r6
124
+ end
125
+ if s3.last
126
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
127
+ r3.extend(Comment0)
128
+ else
129
+ self.index = i3
130
+ r3 = nil
131
+ end
132
+ if r3
133
+ s2 << r3
134
+ else
135
+ break
136
+ end
137
+ end
138
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
139
+ s0 << r2
140
+ if r2
141
+ if input.index(Regexp.new('[\\n]'), index) == index
142
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
143
+ @index += 1
144
+ else
145
+ r8 = nil
146
+ end
147
+ if r8
148
+ r7 = r8
149
+ else
150
+ r7 = instantiate_node(SyntaxNode,input, index...index)
151
+ end
152
+ s0 << r7
153
+ end
154
+ end
155
+ if s0.last
156
+ r0 = instantiate_node(CommentNode,input, i0...index, s0)
157
+ r0.extend(Comment1)
158
+ else
159
+ self.index = i0
160
+ r0 = nil
161
+ end
162
+
163
+ node_cache[:comment][start_index] = r0
164
+
165
+ return r0
166
+ end
167
+
168
+ module Expression0
169
+ end
170
+
171
+ module Expression1
172
+ def subexpr
173
+ elements[0]
174
+ end
175
+
176
+ end
177
+
178
+ def _nt_expression
179
+ start_index = index
180
+ if node_cache[:expression].has_key?(index)
181
+ cached = node_cache[:expression][index]
182
+ @index = cached.interval.end if cached
183
+ return cached
184
+ end
185
+
186
+ i0, s0 = index, []
187
+ i1 = index
188
+ r2 = _nt_method_definition
189
+ if r2
190
+ r1 = r2
191
+ else
192
+ r3 = _nt_require_statement
193
+ if r3
194
+ r1 = r3
195
+ else
196
+ r4 = _nt_return_statement
197
+ if r4
198
+ r1 = r4
199
+ else
200
+ r5 = _nt_yield_statement
201
+ if r5
202
+ r1 = r5
203
+ else
204
+ r6 = _nt_try_expression
205
+ if r6
206
+ r1 = r6
207
+ else
208
+ r7 = _nt_catch_expression
209
+ if r7
210
+ r1 = r7
211
+ else
212
+ r8 = _nt_ensure_expression
213
+ if r8
214
+ r1 = r8
215
+ else
216
+ r9 = _nt_super_call
217
+ if r9
218
+ r1 = r9
219
+ else
220
+ r10 = _nt_multiple_method_call
221
+ if r10
222
+ r1 = r10
223
+ else
224
+ r11 = _nt_method_call
225
+ if r11
226
+ r1 = r11
227
+ else
228
+ r12 = _nt_assignment
229
+ if r12
230
+ r1 = r12
231
+ else
232
+ r13 = _nt_literal
233
+ if r13
234
+ r1 = r13
235
+ else
236
+ r14 = _nt_subexpression
237
+ if r14
238
+ r1 = r14
239
+ else
240
+ r15 = _nt_inline_ruby
241
+ if r15
242
+ r1 = r15
243
+ else
244
+ r16 = _nt_comment
245
+ if r16
246
+ r1 = r16
247
+ else
248
+ self.index = i1
249
+ r1 = nil
250
+ end
251
+ end
252
+ end
253
+ end
254
+ end
255
+ end
256
+ end
257
+ end
258
+ end
259
+ end
260
+ end
261
+ end
262
+ end
263
+ end
264
+ end
265
+ s0 << r1
266
+ if r1
267
+ i17 = index
268
+ if input.index('$', index) == index
269
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
270
+ @index += 1
271
+ else
272
+ terminal_parse_failure('$')
273
+ r18 = nil
274
+ end
275
+ if r18
276
+ r17 = r18
277
+ else
278
+ i19, s19 = index, []
279
+ s20, i20 = [], index
280
+ loop do
281
+ r21 = _nt_ws
282
+ if r21
283
+ s20 << r21
284
+ else
285
+ break
286
+ end
287
+ end
288
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
289
+ s19 << r20
290
+ if r20
291
+ r23 = _nt_newline
292
+ if r23
293
+ r22 = r23
294
+ else
295
+ r22 = instantiate_node(SyntaxNode,input, index...index)
296
+ end
297
+ s19 << r22
298
+ end
299
+ if s19.last
300
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
301
+ r19.extend(Expression0)
302
+ else
303
+ self.index = i19
304
+ r19 = nil
305
+ end
306
+ if r19
307
+ r17 = r19
308
+ else
309
+ self.index = i17
310
+ r17 = nil
311
+ end
312
+ end
313
+ s0 << r17
314
+ end
315
+ if s0.last
316
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
317
+ r0.extend(Expression1)
318
+ else
319
+ self.index = i0
320
+ r0 = nil
321
+ end
322
+
323
+ node_cache[:expression][start_index] = r0
324
+
325
+ return r0
326
+ end
327
+
328
+ module MethodDefinition0
329
+ def method_name
330
+ elements[3]
331
+ end
332
+
333
+ def method_body
334
+ elements[7]
335
+ end
336
+ end
337
+
338
+ module MethodDefinition1
339
+ def method_name
340
+ elements[4]
341
+ end
342
+
343
+ def method_body
344
+ elements[8]
345
+ end
346
+ end
347
+
348
+ def _nt_method_definition
349
+ start_index = index
350
+ if node_cache[:method_definition].has_key?(index)
351
+ cached = node_cache[:method_definition][index]
352
+ @index = cached.interval.end if cached
353
+ return cached
354
+ end
355
+
356
+ i0 = index
357
+ i1, s1 = index, []
358
+ s2, i2 = [], index
359
+ loop do
360
+ r3 = _nt_spaces
361
+ if r3
362
+ s2 << r3
363
+ else
364
+ break
365
+ end
366
+ end
367
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
368
+ s1 << r2
369
+ if r2
370
+ if input.index('def', index) == index
371
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
372
+ @index += 3
373
+ else
374
+ terminal_parse_failure('def')
375
+ r4 = nil
376
+ end
377
+ s1 << r4
378
+ if r4
379
+ s5, i5 = [], index
380
+ loop do
381
+ r6 = _nt_spaces
382
+ if r6
383
+ s5 << r6
384
+ else
385
+ break
386
+ end
387
+ end
388
+ if s5.empty?
389
+ self.index = i5
390
+ r5 = nil
391
+ else
392
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
393
+ end
394
+ s1 << r5
395
+ if r5
396
+ r7 = _nt_message_name
397
+ s1 << r7
398
+ if r7
399
+ s8, i8 = [], index
400
+ loop do
401
+ r9 = _nt_ws
402
+ if r9
403
+ s8 << r9
404
+ else
405
+ break
406
+ end
407
+ end
408
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
409
+ s1 << r8
410
+ if r8
411
+ if input.index('=', index) == index
412
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
413
+ @index += 1
414
+ else
415
+ terminal_parse_failure('=')
416
+ r10 = nil
417
+ end
418
+ s1 << r10
419
+ if r10
420
+ s11, i11 = [], index
421
+ loop do
422
+ r12 = _nt_ws
423
+ if r12
424
+ s11 << r12
425
+ else
426
+ break
427
+ end
428
+ end
429
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
430
+ s1 << r11
431
+ if r11
432
+ r13 = _nt_block_literal
433
+ s1 << r13
434
+ end
435
+ end
436
+ end
437
+ end
438
+ end
439
+ end
440
+ end
441
+ if s1.last
442
+ r1 = instantiate_node(MethodDefinitionNode,input, i1...index, s1)
443
+ r1.extend(MethodDefinition0)
444
+ else
445
+ self.index = i1
446
+ r1 = nil
447
+ end
448
+ if r1
449
+ r0 = r1
450
+ else
451
+ i14, s14 = index, []
452
+ s15, i15 = [], index
453
+ loop do
454
+ r16 = _nt_spaces
455
+ if r16
456
+ s15 << r16
457
+ else
458
+ break
459
+ end
460
+ end
461
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
462
+ s14 << r15
463
+ if r15
464
+ if input.index('def', index) == index
465
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 3))
466
+ @index += 3
467
+ else
468
+ terminal_parse_failure('def')
469
+ r17 = nil
470
+ end
471
+ s14 << r17
472
+ if r17
473
+ s18, i18 = [], index
474
+ loop do
475
+ r19 = _nt_spaces
476
+ if r19
477
+ s18 << r19
478
+ else
479
+ break
480
+ end
481
+ end
482
+ if s18.empty?
483
+ self.index = i18
484
+ r18 = nil
485
+ else
486
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
487
+ end
488
+ s14 << r18
489
+ if r18
490
+ if input.index('self ', index) == index
491
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 5))
492
+ @index += 5
493
+ else
494
+ terminal_parse_failure('self ')
495
+ r20 = nil
496
+ end
497
+ s14 << r20
498
+ if r20
499
+ r21 = _nt_message_name
500
+ s14 << r21
501
+ if r21
502
+ s22, i22 = [], index
503
+ loop do
504
+ r23 = _nt_ws
505
+ if r23
506
+ s22 << r23
507
+ else
508
+ break
509
+ end
510
+ end
511
+ r22 = instantiate_node(SyntaxNode,input, i22...index, s22)
512
+ s14 << r22
513
+ if r22
514
+ if input.index('=', index) == index
515
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
516
+ @index += 1
517
+ else
518
+ terminal_parse_failure('=')
519
+ r24 = nil
520
+ end
521
+ s14 << r24
522
+ if r24
523
+ s25, i25 = [], index
524
+ loop do
525
+ r26 = _nt_ws
526
+ if r26
527
+ s25 << r26
528
+ else
529
+ break
530
+ end
531
+ end
532
+ r25 = instantiate_node(SyntaxNode,input, i25...index, s25)
533
+ s14 << r25
534
+ if r25
535
+ r27 = _nt_block_literal
536
+ s14 << r27
537
+ end
538
+ end
539
+ end
540
+ end
541
+ end
542
+ end
543
+ end
544
+ end
545
+ if s14.last
546
+ r14 = instantiate_node(ClassMethodDefinitionNode,input, i14...index, s14)
547
+ r14.extend(MethodDefinition1)
548
+ else
549
+ self.index = i14
550
+ r14 = nil
551
+ end
552
+ if r14
553
+ r0 = r14
554
+ else
555
+ self.index = i0
556
+ r0 = nil
557
+ end
558
+ end
559
+
560
+ node_cache[:method_definition][start_index] = r0
561
+
562
+ return r0
563
+ end
564
+
565
+ module RequireStatement0
566
+ def parse_file
567
+ elements[2]
568
+ end
569
+ end
570
+
571
+ def _nt_require_statement
572
+ start_index = index
573
+ if node_cache[:require_statement].has_key?(index)
574
+ cached = node_cache[:require_statement][index]
575
+ @index = cached.interval.end if cached
576
+ return cached
577
+ end
578
+
579
+ i0, s0 = index, []
580
+ if input.index('require:', index) == index
581
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 8))
582
+ @index += 8
583
+ else
584
+ terminal_parse_failure('require:')
585
+ r1 = nil
586
+ end
587
+ s0 << r1
588
+ if r1
589
+ s2, i2 = [], index
590
+ loop do
591
+ r3 = _nt_spaces
592
+ if r3
593
+ s2 << r3
594
+ else
595
+ break
596
+ end
597
+ end
598
+ if s2.empty?
599
+ self.index = i2
600
+ r2 = nil
601
+ else
602
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
603
+ end
604
+ s0 << r2
605
+ if r2
606
+ r4 = _nt_string_literal
607
+ s0 << r4
608
+ end
609
+ end
610
+ if s0.last
611
+ r0 = instantiate_node(RequireNode,input, i0...index, s0)
612
+ r0.extend(RequireStatement0)
613
+ else
614
+ self.index = i0
615
+ r0 = nil
616
+ end
617
+
618
+ node_cache[:require_statement][start_index] = r0
619
+
620
+ return r0
621
+ end
622
+
623
+ module ReturnStatement0
624
+ def ret_val
625
+ elements[3]
626
+ end
627
+ end
628
+
629
+ def _nt_return_statement
630
+ start_index = index
631
+ if node_cache[:return_statement].has_key?(index)
632
+ cached = node_cache[:return_statement][index]
633
+ @index = cached.interval.end if cached
634
+ return cached
635
+ end
636
+
637
+ i0, s0 = index, []
638
+ if input.index('return', index) == index
639
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
640
+ @index += 6
641
+ else
642
+ terminal_parse_failure('return')
643
+ r1 = nil
644
+ end
645
+ s0 << r1
646
+ if r1
647
+ if input.index(':', index) == index
648
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
649
+ @index += 1
650
+ else
651
+ terminal_parse_failure(':')
652
+ r3 = nil
653
+ end
654
+ if r3
655
+ r2 = r3
656
+ else
657
+ r2 = instantiate_node(SyntaxNode,input, index...index)
658
+ end
659
+ s0 << r2
660
+ if r2
661
+ if input.index(' ', index) == index
662
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
663
+ @index += 1
664
+ else
665
+ terminal_parse_failure(' ')
666
+ r4 = nil
667
+ end
668
+ s0 << r4
669
+ if r4
670
+ i5 = index
671
+ r6 = _nt_subexpression
672
+ if r6
673
+ r5 = r6
674
+ else
675
+ r7 = _nt_identifier
676
+ if r7
677
+ r5 = r7
678
+ else
679
+ r8 = _nt_literal
680
+ if r8
681
+ r5 = r8
682
+ else
683
+ self.index = i5
684
+ r5 = nil
685
+ end
686
+ end
687
+ end
688
+ s0 << r5
689
+ end
690
+ end
691
+ end
692
+ if s0.last
693
+ r0 = instantiate_node(ReturnNode,input, i0...index, s0)
694
+ r0.extend(ReturnStatement0)
695
+ else
696
+ self.index = i0
697
+ r0 = nil
698
+ end
699
+
700
+ node_cache[:return_statement][start_index] = r0
701
+
702
+ return r0
703
+ end
704
+
705
+ module YieldStatement0
706
+ def yieldval
707
+ elements[3]
708
+ end
709
+ end
710
+
711
+ def _nt_yield_statement
712
+ start_index = index
713
+ if node_cache[:yield_statement].has_key?(index)
714
+ cached = node_cache[:yield_statement][index]
715
+ @index = cached.interval.end if cached
716
+ return cached
717
+ end
718
+
719
+ i0, s0 = index, []
720
+ if input.index('yield', index) == index
721
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
722
+ @index += 5
723
+ else
724
+ terminal_parse_failure('yield')
725
+ r1 = nil
726
+ end
727
+ s0 << r1
728
+ if r1
729
+ if input.index(':', index) == index
730
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
731
+ @index += 1
732
+ else
733
+ terminal_parse_failure(':')
734
+ r3 = nil
735
+ end
736
+ if r3
737
+ r2 = r3
738
+ else
739
+ r2 = instantiate_node(SyntaxNode,input, index...index)
740
+ end
741
+ s0 << r2
742
+ if r2
743
+ if input.index(' ', index) == index
744
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
745
+ @index += 1
746
+ else
747
+ terminal_parse_failure(' ')
748
+ r4 = nil
749
+ end
750
+ s0 << r4
751
+ if r4
752
+ r5 = _nt_array_literal
753
+ s0 << r5
754
+ end
755
+ end
756
+ end
757
+ if s0.last
758
+ r0 = instantiate_node(YieldNode,input, i0...index, s0)
759
+ r0.extend(YieldStatement0)
760
+ else
761
+ self.index = i0
762
+ r0 = nil
763
+ end
764
+
765
+ node_cache[:yield_statement][start_index] = r0
766
+
767
+ return r0
768
+ end
769
+
770
+ module TryExpression0
771
+ def try_block
772
+ elements[2]
773
+ end
774
+ end
775
+
776
+ def _nt_try_expression
777
+ start_index = index
778
+ if node_cache[:try_expression].has_key?(index)
779
+ cached = node_cache[:try_expression][index]
780
+ @index = cached.interval.end if cached
781
+ return cached
782
+ end
783
+
784
+ i0, s0 = index, []
785
+ if input.index('try', index) == index
786
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
787
+ @index += 3
788
+ else
789
+ terminal_parse_failure('try')
790
+ r1 = nil
791
+ end
792
+ s0 << r1
793
+ if r1
794
+ if input.index(' ', index) == index
795
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
796
+ @index += 1
797
+ else
798
+ terminal_parse_failure(' ')
799
+ r3 = nil
800
+ end
801
+ if r3
802
+ r2 = r3
803
+ else
804
+ r2 = instantiate_node(SyntaxNode,input, index...index)
805
+ end
806
+ s0 << r2
807
+ if r2
808
+ r4 = _nt_block_literal
809
+ s0 << r4
810
+ end
811
+ end
812
+ if s0.last
813
+ r0 = instantiate_node(TryNode,input, i0...index, s0)
814
+ r0.extend(TryExpression0)
815
+ else
816
+ self.index = i0
817
+ r0 = nil
818
+ end
819
+
820
+ node_cache[:try_expression][start_index] = r0
821
+
822
+ return r0
823
+ end
824
+
825
+ module CatchExpression0
826
+ def identifier
827
+ elements[1]
828
+ end
829
+
830
+ end
831
+
832
+ module CatchExpression1
833
+ def error_class
834
+ elements[1]
835
+ end
836
+
837
+ def catch_block
838
+ elements[3]
839
+ end
840
+ end
841
+
842
+ def _nt_catch_expression
843
+ start_index = index
844
+ if node_cache[:catch_expression].has_key?(index)
845
+ cached = node_cache[:catch_expression][index]
846
+ @index = cached.interval.end if cached
847
+ return cached
848
+ end
849
+
850
+ i0, s0 = index, []
851
+ if input.index('catch', index) == index
852
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
853
+ @index += 5
854
+ else
855
+ terminal_parse_failure('catch')
856
+ r1 = nil
857
+ end
858
+ s0 << r1
859
+ if r1
860
+ i3, s3 = index, []
861
+ if input.index(': ', index) == index
862
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
863
+ @index += 2
864
+ else
865
+ terminal_parse_failure(': ')
866
+ r4 = nil
867
+ end
868
+ s3 << r4
869
+ if r4
870
+ r5 = _nt_identifier
871
+ s3 << r5
872
+ if r5
873
+ if input.index(' ', index) == index
874
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
875
+ @index += 1
876
+ else
877
+ terminal_parse_failure(' ')
878
+ r6 = nil
879
+ end
880
+ s3 << r6
881
+ end
882
+ end
883
+ if s3.last
884
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
885
+ r3.extend(CatchExpression0)
886
+ else
887
+ self.index = i3
888
+ r3 = nil
889
+ end
890
+ if r3
891
+ r2 = r3
892
+ else
893
+ r2 = instantiate_node(SyntaxNode,input, index...index)
894
+ end
895
+ s0 << r2
896
+ if r2
897
+ if input.index(' ', index) == index
898
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
899
+ @index += 1
900
+ else
901
+ terminal_parse_failure(' ')
902
+ r8 = nil
903
+ end
904
+ if r8
905
+ r7 = r8
906
+ else
907
+ r7 = instantiate_node(SyntaxNode,input, index...index)
908
+ end
909
+ s0 << r7
910
+ if r7
911
+ r9 = _nt_block_literal
912
+ s0 << r9
913
+ end
914
+ end
915
+ end
916
+ if s0.last
917
+ r0 = instantiate_node(CatchNode,input, i0...index, s0)
918
+ r0.extend(CatchExpression1)
919
+ else
920
+ self.index = i0
921
+ r0 = nil
922
+ end
923
+
924
+ node_cache[:catch_expression][start_index] = r0
925
+
926
+ return r0
927
+ end
928
+
929
+ module EnsureExpression0
930
+ def ensure_block
931
+ elements[2]
932
+ end
933
+ end
934
+
935
+ def _nt_ensure_expression
936
+ start_index = index
937
+ if node_cache[:ensure_expression].has_key?(index)
938
+ cached = node_cache[:ensure_expression][index]
939
+ @index = cached.interval.end if cached
940
+ return cached
941
+ end
942
+
943
+ i0, s0 = index, []
944
+ if input.index('ensure', index) == index
945
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
946
+ @index += 6
947
+ else
948
+ terminal_parse_failure('ensure')
949
+ r1 = nil
950
+ end
951
+ s0 << r1
952
+ if r1
953
+ if input.index(' ', index) == index
954
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
955
+ @index += 1
956
+ else
957
+ terminal_parse_failure(' ')
958
+ r3 = nil
959
+ end
960
+ if r3
961
+ r2 = r3
962
+ else
963
+ r2 = instantiate_node(SyntaxNode,input, index...index)
964
+ end
965
+ s0 << r2
966
+ if r2
967
+ r4 = _nt_block_literal
968
+ s0 << r4
969
+ end
970
+ end
971
+ if s0.last
972
+ r0 = instantiate_node(EnsureNode,input, i0...index, s0)
973
+ r0.extend(EnsureExpression0)
974
+ else
975
+ self.index = i0
976
+ r0 = nil
977
+ end
978
+
979
+ node_cache[:ensure_expression][start_index] = r0
980
+
981
+ return r0
982
+ end
983
+
984
+ module Subexpression0
985
+ def subexpr
986
+ elements[2]
987
+ end
988
+
989
+ end
990
+
991
+ def _nt_subexpression
992
+ start_index = index
993
+ if node_cache[:subexpression].has_key?(index)
994
+ cached = node_cache[:subexpression][index]
995
+ @index = cached.interval.end if cached
996
+ return cached
997
+ end
998
+
999
+ i0, s0 = index, []
1000
+ if input.index('(', index) == index
1001
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1002
+ @index += 1
1003
+ else
1004
+ terminal_parse_failure('(')
1005
+ r1 = nil
1006
+ end
1007
+ s0 << r1
1008
+ if r1
1009
+ s2, i2 = [], index
1010
+ loop do
1011
+ r3 = _nt_ws
1012
+ if r3
1013
+ s2 << r3
1014
+ else
1015
+ break
1016
+ end
1017
+ end
1018
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1019
+ s0 << r2
1020
+ if r2
1021
+ r4 = _nt_expression
1022
+ s0 << r4
1023
+ if r4
1024
+ s5, i5 = [], index
1025
+ loop do
1026
+ r6 = _nt_ws
1027
+ if r6
1028
+ s5 << r6
1029
+ else
1030
+ break
1031
+ end
1032
+ end
1033
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1034
+ s0 << r5
1035
+ if r5
1036
+ if input.index(')', index) == index
1037
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1038
+ @index += 1
1039
+ else
1040
+ terminal_parse_failure(')')
1041
+ r7 = nil
1042
+ end
1043
+ s0 << r7
1044
+ end
1045
+ end
1046
+ end
1047
+ end
1048
+ if s0.last
1049
+ r0 = instantiate_node(ExpressionNode,input, i0...index, s0)
1050
+ r0.extend(Subexpression0)
1051
+ else
1052
+ self.index = i0
1053
+ r0 = nil
1054
+ end
1055
+
1056
+ node_cache[:subexpression][start_index] = r0
1057
+
1058
+ return r0
1059
+ end
1060
+
1061
+ module Assignment0
1062
+ def target
1063
+ elements[0]
1064
+ end
1065
+
1066
+ def val
1067
+ elements[4]
1068
+ end
1069
+ end
1070
+
1071
+ module Assignment1
1072
+ def value
1073
+ if val.respond_to?(:subexpr)
1074
+ "#{target.value} = #{val.subexpr.value}"
1075
+ else
1076
+ "#{target.value} = #{val.value}"
1077
+ end
1078
+ end
1079
+ end
1080
+
1081
+ def _nt_assignment
1082
+ start_index = index
1083
+ if node_cache[:assignment].has_key?(index)
1084
+ cached = node_cache[:assignment][index]
1085
+ @index = cached.interval.end if cached
1086
+ return cached
1087
+ end
1088
+
1089
+ i0, s0 = index, []
1090
+ r1 = _nt_identifier
1091
+ s0 << r1
1092
+ if r1
1093
+ s2, i2 = [], index
1094
+ loop do
1095
+ r3 = _nt_ws
1096
+ if r3
1097
+ s2 << r3
1098
+ else
1099
+ break
1100
+ end
1101
+ end
1102
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1103
+ s0 << r2
1104
+ if r2
1105
+ if input.index('=', index) == index
1106
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1107
+ @index += 1
1108
+ else
1109
+ terminal_parse_failure('=')
1110
+ r4 = nil
1111
+ end
1112
+ s0 << r4
1113
+ if r4
1114
+ s5, i5 = [], index
1115
+ loop do
1116
+ r6 = _nt_ws
1117
+ if r6
1118
+ s5 << r6
1119
+ else
1120
+ break
1121
+ end
1122
+ end
1123
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1124
+ s0 << r5
1125
+ if r5
1126
+ i7 = index
1127
+ r8 = _nt_expression
1128
+ if r8
1129
+ r7 = r8
1130
+ else
1131
+ r9 = _nt_identifier
1132
+ if r9
1133
+ r7 = r9
1134
+ else
1135
+ r10 = _nt_literal
1136
+ if r10
1137
+ r7 = r10
1138
+ else
1139
+ self.index = i7
1140
+ r7 = nil
1141
+ end
1142
+ end
1143
+ end
1144
+ s0 << r7
1145
+ end
1146
+ end
1147
+ end
1148
+ end
1149
+ if s0.last
1150
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1151
+ r0.extend(Assignment0)
1152
+ r0.extend(Assignment1)
1153
+ else
1154
+ self.index = i0
1155
+ r0 = nil
1156
+ end
1157
+
1158
+ node_cache[:assignment][start_index] = r0
1159
+
1160
+ return r0
1161
+ end
1162
+
1163
+ module SuperCall0
1164
+ def params
1165
+ elements[1]
1166
+ end
1167
+ end
1168
+
1169
+ def _nt_super_call
1170
+ start_index = index
1171
+ if node_cache[:super_call].has_key?(index)
1172
+ cached = node_cache[:super_call][index]
1173
+ @index = cached.interval.end if cached
1174
+ return cached
1175
+ end
1176
+
1177
+ i0, s0 = index, []
1178
+ if input.index('super', index) == index
1179
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
1180
+ @index += 5
1181
+ else
1182
+ terminal_parse_failure('super')
1183
+ r1 = nil
1184
+ end
1185
+ s0 << r1
1186
+ if r1
1187
+ r3 = _nt_message_params
1188
+ if r3
1189
+ r2 = r3
1190
+ else
1191
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1192
+ end
1193
+ s0 << r2
1194
+ end
1195
+ if s0.last
1196
+ r0 = instantiate_node(SuperCallNode,input, i0...index, s0)
1197
+ r0.extend(SuperCall0)
1198
+ else
1199
+ self.index = i0
1200
+ r0 = nil
1201
+ end
1202
+
1203
+ node_cache[:super_call][start_index] = r0
1204
+
1205
+ return r0
1206
+ end
1207
+
1208
+ module MultipleMethodCall0
1209
+ def message
1210
+ elements[0]
1211
+ end
1212
+
1213
+ end
1214
+
1215
+ module MultipleMethodCall1
1216
+ def receiver
1217
+ elements[0]
1218
+ end
1219
+
1220
+ def messages
1221
+ elements[2]
1222
+ end
1223
+
1224
+ def final_message
1225
+ elements[3]
1226
+ end
1227
+
1228
+ end
1229
+
1230
+ def _nt_multiple_method_call
1231
+ start_index = index
1232
+ if node_cache[:multiple_method_call].has_key?(index)
1233
+ cached = node_cache[:multiple_method_call][index]
1234
+ @index = cached.interval.end if cached
1235
+ return cached
1236
+ end
1237
+
1238
+ i0, s0 = index, []
1239
+ r1 = _nt_message_receiver
1240
+ s0 << r1
1241
+ if r1
1242
+ if input.index(' ', index) == index
1243
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1244
+ @index += 1
1245
+ else
1246
+ terminal_parse_failure(' ')
1247
+ r2 = nil
1248
+ end
1249
+ s0 << r2
1250
+ if r2
1251
+ s3, i3 = [], index
1252
+ loop do
1253
+ i4, s4 = index, []
1254
+ i5 = index
1255
+ r6 = _nt_message_with_params
1256
+ if r6
1257
+ r5 = r6
1258
+ else
1259
+ r7 = _nt_message_without_params
1260
+ if r7
1261
+ r5 = r7
1262
+ else
1263
+ self.index = i5
1264
+ r5 = nil
1265
+ end
1266
+ end
1267
+ s4 << r5
1268
+ if r5
1269
+ s8, i8 = [], index
1270
+ loop do
1271
+ r9 = _nt_spaces
1272
+ if r9
1273
+ s8 << r9
1274
+ else
1275
+ break
1276
+ end
1277
+ end
1278
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1279
+ s4 << r8
1280
+ if r8
1281
+ if input.index(';', index) == index
1282
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1283
+ @index += 1
1284
+ else
1285
+ terminal_parse_failure(';')
1286
+ r10 = nil
1287
+ end
1288
+ s4 << r10
1289
+ if r10
1290
+ s11, i11 = [], index
1291
+ loop do
1292
+ r12 = _nt_ws
1293
+ if r12
1294
+ s11 << r12
1295
+ else
1296
+ break
1297
+ end
1298
+ end
1299
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
1300
+ s4 << r11
1301
+ end
1302
+ end
1303
+ end
1304
+ if s4.last
1305
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1306
+ r4.extend(MultipleMethodCall0)
1307
+ else
1308
+ self.index = i4
1309
+ r4 = nil
1310
+ end
1311
+ if r4
1312
+ s3 << r4
1313
+ else
1314
+ break
1315
+ end
1316
+ end
1317
+ if s3.empty?
1318
+ self.index = i3
1319
+ r3 = nil
1320
+ else
1321
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1322
+ end
1323
+ s0 << r3
1324
+ if r3
1325
+ i13 = index
1326
+ r14 = _nt_message_with_params
1327
+ if r14
1328
+ r13 = r14
1329
+ else
1330
+ r15 = _nt_message_without_params
1331
+ if r15
1332
+ r13 = r15
1333
+ else
1334
+ self.index = i13
1335
+ r13 = nil
1336
+ end
1337
+ end
1338
+ s0 << r13
1339
+ if r13
1340
+ s16, i16 = [], index
1341
+ loop do
1342
+ r17 = _nt_ws
1343
+ if r17
1344
+ s16 << r17
1345
+ else
1346
+ break
1347
+ end
1348
+ end
1349
+ r16 = instantiate_node(SyntaxNode,input, i16...index, s16)
1350
+ s0 << r16
1351
+ end
1352
+ end
1353
+ end
1354
+ end
1355
+ if s0.last
1356
+ r0 = instantiate_node(MultipleMethodcallNode,input, i0...index, s0)
1357
+ r0.extend(MultipleMethodCall1)
1358
+ else
1359
+ self.index = i0
1360
+ r0 = nil
1361
+ end
1362
+
1363
+ node_cache[:multiple_method_call][start_index] = r0
1364
+
1365
+ return r0
1366
+ end
1367
+
1368
+ module MethodCall0
1369
+ def block_var_name
1370
+ elements[1]
1371
+ end
1372
+ end
1373
+
1374
+ module MethodCall1
1375
+ def passed_block
1376
+ elements[1]
1377
+ end
1378
+ end
1379
+
1380
+ module MethodCall2
1381
+ def block_var_name
1382
+ elements[1]
1383
+ end
1384
+ end
1385
+
1386
+ module MethodCall3
1387
+ def passed_block
1388
+ elements[1]
1389
+ end
1390
+ end
1391
+
1392
+ module MethodCall4
1393
+ def message
1394
+ elements[1]
1395
+ end
1396
+
1397
+ def passed_block_with_ws
1398
+ elements[2]
1399
+ end
1400
+ end
1401
+
1402
+ module MethodCall5
1403
+ def receiver
1404
+ elements[0]
1405
+ end
1406
+
1407
+ def first_message
1408
+ elements[2]
1409
+ end
1410
+
1411
+ def first_passed_block_with_ws
1412
+ elements[3]
1413
+ end
1414
+
1415
+ def messages
1416
+ elements[4]
1417
+ end
1418
+ end
1419
+
1420
+ def _nt_method_call
1421
+ start_index = index
1422
+ if node_cache[:method_call].has_key?(index)
1423
+ cached = node_cache[:method_call][index]
1424
+ @index = cached.interval.end if cached
1425
+ return cached
1426
+ end
1427
+
1428
+ i0, s0 = index, []
1429
+ r1 = _nt_message_receiver
1430
+ s0 << r1
1431
+ if r1
1432
+ if input.index(' ', index) == index
1433
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1434
+ @index += 1
1435
+ else
1436
+ terminal_parse_failure(' ')
1437
+ r2 = nil
1438
+ end
1439
+ s0 << r2
1440
+ if r2
1441
+ i3 = index
1442
+ r4 = _nt_operator_message
1443
+ if r4
1444
+ r3 = r4
1445
+ else
1446
+ r5 = _nt_message_with_params
1447
+ if r5
1448
+ r3 = r5
1449
+ else
1450
+ r6 = _nt_message_without_params
1451
+ if r6
1452
+ r3 = r6
1453
+ else
1454
+ self.index = i3
1455
+ r3 = nil
1456
+ end
1457
+ end
1458
+ end
1459
+ s0 << r3
1460
+ if r3
1461
+ i8, s8 = index, []
1462
+ if input.index(' ', index) == index
1463
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1464
+ @index += 1
1465
+ else
1466
+ terminal_parse_failure(' ')
1467
+ r10 = nil
1468
+ end
1469
+ if r10
1470
+ r9 = r10
1471
+ else
1472
+ r9 = instantiate_node(SyntaxNode,input, index...index)
1473
+ end
1474
+ s8 << r9
1475
+ if r9
1476
+ i11 = index
1477
+ r12 = _nt_block_literal_do_end
1478
+ if r12
1479
+ r11 = r12
1480
+ else
1481
+ r13 = _nt_block_literal_curly_braces
1482
+ if r13
1483
+ r11 = r13
1484
+ else
1485
+ i14, s14 = index, []
1486
+ if input.index('&', index) == index
1487
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
1488
+ @index += 1
1489
+ else
1490
+ terminal_parse_failure('&')
1491
+ r15 = nil
1492
+ end
1493
+ s14 << r15
1494
+ if r15
1495
+ r16 = _nt_identifier
1496
+ s14 << r16
1497
+ end
1498
+ if s14.last
1499
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
1500
+ r14.extend(MethodCall0)
1501
+ else
1502
+ self.index = i14
1503
+ r14 = nil
1504
+ end
1505
+ if r14
1506
+ r11 = r14
1507
+ else
1508
+ self.index = i11
1509
+ r11 = nil
1510
+ end
1511
+ end
1512
+ end
1513
+ s8 << r11
1514
+ end
1515
+ if s8.last
1516
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1517
+ r8.extend(MethodCall1)
1518
+ else
1519
+ self.index = i8
1520
+ r8 = nil
1521
+ end
1522
+ if r8
1523
+ r7 = r8
1524
+ else
1525
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1526
+ end
1527
+ s0 << r7
1528
+ if r7
1529
+ s17, i17 = [], index
1530
+ loop do
1531
+ i18, s18 = index, []
1532
+ if input.index(' ', index) == index
1533
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
1534
+ @index += 1
1535
+ else
1536
+ terminal_parse_failure(' ')
1537
+ r19 = nil
1538
+ end
1539
+ s18 << r19
1540
+ if r19
1541
+ i20 = index
1542
+ r21 = _nt_message_with_params
1543
+ if r21
1544
+ r20 = r21
1545
+ else
1546
+ r22 = _nt_message_without_params
1547
+ if r22
1548
+ r20 = r22
1549
+ else
1550
+ self.index = i20
1551
+ r20 = nil
1552
+ end
1553
+ end
1554
+ s18 << r20
1555
+ if r20
1556
+ i24, s24 = index, []
1557
+ if input.index(' ', index) == index
1558
+ r26 = instantiate_node(SyntaxNode,input, index...(index + 1))
1559
+ @index += 1
1560
+ else
1561
+ terminal_parse_failure(' ')
1562
+ r26 = nil
1563
+ end
1564
+ if r26
1565
+ r25 = r26
1566
+ else
1567
+ r25 = instantiate_node(SyntaxNode,input, index...index)
1568
+ end
1569
+ s24 << r25
1570
+ if r25
1571
+ i27 = index
1572
+ r28 = _nt_block_literal_do_end
1573
+ if r28
1574
+ r27 = r28
1575
+ else
1576
+ r29 = _nt_block_literal_curly_braces
1577
+ if r29
1578
+ r27 = r29
1579
+ else
1580
+ i30, s30 = index, []
1581
+ if input.index('&', index) == index
1582
+ r31 = instantiate_node(SyntaxNode,input, index...(index + 1))
1583
+ @index += 1
1584
+ else
1585
+ terminal_parse_failure('&')
1586
+ r31 = nil
1587
+ end
1588
+ s30 << r31
1589
+ if r31
1590
+ r32 = _nt_identifier
1591
+ s30 << r32
1592
+ end
1593
+ if s30.last
1594
+ r30 = instantiate_node(SyntaxNode,input, i30...index, s30)
1595
+ r30.extend(MethodCall2)
1596
+ else
1597
+ self.index = i30
1598
+ r30 = nil
1599
+ end
1600
+ if r30
1601
+ r27 = r30
1602
+ else
1603
+ self.index = i27
1604
+ r27 = nil
1605
+ end
1606
+ end
1607
+ end
1608
+ s24 << r27
1609
+ end
1610
+ if s24.last
1611
+ r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
1612
+ r24.extend(MethodCall3)
1613
+ else
1614
+ self.index = i24
1615
+ r24 = nil
1616
+ end
1617
+ if r24
1618
+ r23 = r24
1619
+ else
1620
+ r23 = instantiate_node(SyntaxNode,input, index...index)
1621
+ end
1622
+ s18 << r23
1623
+ end
1624
+ end
1625
+ if s18.last
1626
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
1627
+ r18.extend(MethodCall4)
1628
+ else
1629
+ self.index = i18
1630
+ r18 = nil
1631
+ end
1632
+ if r18
1633
+ s17 << r18
1634
+ else
1635
+ break
1636
+ end
1637
+ end
1638
+ r17 = instantiate_node(SyntaxNode,input, i17...index, s17)
1639
+ s0 << r17
1640
+ end
1641
+ end
1642
+ end
1643
+ end
1644
+ if s0.last
1645
+ r0 = instantiate_node(MethodcallNode,input, i0...index, s0)
1646
+ r0.extend(MethodCall5)
1647
+ else
1648
+ self.index = i0
1649
+ r0 = nil
1650
+ end
1651
+
1652
+ node_cache[:method_call][start_index] = r0
1653
+
1654
+ return r0
1655
+ end
1656
+
1657
+ def _nt_message_receiver
1658
+ start_index = index
1659
+ if node_cache[:message_receiver].has_key?(index)
1660
+ cached = node_cache[:message_receiver][index]
1661
+ @index = cached.interval.end if cached
1662
+ return cached
1663
+ end
1664
+
1665
+ i0 = index
1666
+ i1 = index
1667
+ r2 = _nt_literal
1668
+ if r2
1669
+ r1 = r2
1670
+ else
1671
+ r3 = _nt_identifier
1672
+ if r3
1673
+ r1 = r3
1674
+ else
1675
+ self.index = i1
1676
+ r1 = nil
1677
+ end
1678
+ end
1679
+ if r1
1680
+ r0 = r1
1681
+ else
1682
+ r4 = _nt_subexpression
1683
+ if r4
1684
+ r0 = r4
1685
+ else
1686
+ self.index = i0
1687
+ r0 = nil
1688
+ end
1689
+ end
1690
+
1691
+ node_cache[:message_receiver][start_index] = r0
1692
+
1693
+ return r0
1694
+ end
1695
+
1696
+ module MessageWithParams0
1697
+ def message
1698
+ elements[0]
1699
+ end
1700
+
1701
+ def params
1702
+ elements[1]
1703
+ end
1704
+ end
1705
+
1706
+ def _nt_message_with_params
1707
+ start_index = index
1708
+ if node_cache[:message_with_params].has_key?(index)
1709
+ cached = node_cache[:message_with_params][index]
1710
+ @index = cached.interval.end if cached
1711
+ return cached
1712
+ end
1713
+
1714
+ i0, s0 = index, []
1715
+ r1 = _nt_message_name
1716
+ s0 << r1
1717
+ if r1
1718
+ r2 = _nt_message_params
1719
+ s0 << r2
1720
+ end
1721
+ if s0.last
1722
+ r0 = instantiate_node(MessageWithParamsNode,input, i0...index, s0)
1723
+ r0.extend(MessageWithParams0)
1724
+ else
1725
+ self.index = i0
1726
+ r0 = nil
1727
+ end
1728
+
1729
+ node_cache[:message_with_params][start_index] = r0
1730
+
1731
+ return r0
1732
+ end
1733
+
1734
+ module MessageWithoutParams0
1735
+ def message
1736
+ elements[0]
1737
+ end
1738
+
1739
+ end
1740
+
1741
+ def _nt_message_without_params
1742
+ start_index = index
1743
+ if node_cache[:message_without_params].has_key?(index)
1744
+ cached = node_cache[:message_without_params][index]
1745
+ @index = cached.interval.end if cached
1746
+ return cached
1747
+ end
1748
+
1749
+ i0, s0 = index, []
1750
+ r1 = _nt_message_name
1751
+ s0 << r1
1752
+ if r1
1753
+ i2 = index
1754
+ r3 = _nt_message_params
1755
+ if r3
1756
+ r2 = nil
1757
+ else
1758
+ self.index = i2
1759
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1760
+ end
1761
+ s0 << r2
1762
+ end
1763
+ if s0.last
1764
+ r0 = instantiate_node(MessageWithoutParamsNode,input, i0...index, s0)
1765
+ r0.extend(MessageWithoutParams0)
1766
+ else
1767
+ self.index = i0
1768
+ r0 = nil
1769
+ end
1770
+
1771
+ node_cache[:message_without_params][start_index] = r0
1772
+
1773
+ return r0
1774
+ end
1775
+
1776
+ module OperatorMessage0
1777
+ def operator_name
1778
+ elements[0]
1779
+ end
1780
+
1781
+ def param_value
1782
+ elements[2]
1783
+ end
1784
+
1785
+ end
1786
+
1787
+ def _nt_operator_message
1788
+ start_index = index
1789
+ if node_cache[:operator_message].has_key?(index)
1790
+ cached = node_cache[:operator_message][index]
1791
+ @index = cached.interval.end if cached
1792
+ return cached
1793
+ end
1794
+
1795
+ i0, s0 = index, []
1796
+ r1 = _nt_operator
1797
+ s0 << r1
1798
+ if r1
1799
+ if input.index(' ', index) == index
1800
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1801
+ @index += 1
1802
+ else
1803
+ terminal_parse_failure(' ')
1804
+ r2 = nil
1805
+ end
1806
+ s0 << r2
1807
+ if r2
1808
+ r3 = _nt_param_value
1809
+ s0 << r3
1810
+ if r3
1811
+ i4 = index
1812
+ r5 = _nt_message_params
1813
+ if r5
1814
+ r4 = nil
1815
+ else
1816
+ self.index = i4
1817
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1818
+ end
1819
+ s0 << r4
1820
+ end
1821
+ end
1822
+ end
1823
+ if s0.last
1824
+ r0 = instantiate_node(OperatorMessageNode,input, i0...index, s0)
1825
+ r0.extend(OperatorMessage0)
1826
+ else
1827
+ self.index = i0
1828
+ r0 = nil
1829
+ end
1830
+
1831
+ node_cache[:operator_message][start_index] = r0
1832
+
1833
+ return r0
1834
+ end
1835
+
1836
+ module MessageParams0
1837
+ def parameter
1838
+ elements[1]
1839
+ end
1840
+ end
1841
+
1842
+ module MessageParams1
1843
+ def first_param
1844
+ elements[0]
1845
+ end
1846
+
1847
+ def rest_params
1848
+ elements[1]
1849
+ end
1850
+ end
1851
+
1852
+ module MessageParams2
1853
+ def value
1854
+ [first_param.value] + rest_params.elements.map do |space_and_param|
1855
+ space_and_param.parameter.value
1856
+ end
1857
+ end
1858
+ end
1859
+
1860
+ def _nt_message_params
1861
+ start_index = index
1862
+ if node_cache[:message_params].has_key?(index)
1863
+ cached = node_cache[:message_params][index]
1864
+ @index = cached.interval.end if cached
1865
+ return cached
1866
+ end
1867
+
1868
+ i0, s0 = index, []
1869
+ r1 = _nt_first_param
1870
+ s0 << r1
1871
+ if r1
1872
+ s2, i2 = [], index
1873
+ loop do
1874
+ i3, s3 = index, []
1875
+ if input.index(' ', index) == index
1876
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1877
+ @index += 1
1878
+ else
1879
+ terminal_parse_failure(' ')
1880
+ r4 = nil
1881
+ end
1882
+ s3 << r4
1883
+ if r4
1884
+ r5 = _nt_param
1885
+ s3 << r5
1886
+ end
1887
+ if s3.last
1888
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1889
+ r3.extend(MessageParams0)
1890
+ else
1891
+ self.index = i3
1892
+ r3 = nil
1893
+ end
1894
+ if r3
1895
+ s2 << r3
1896
+ else
1897
+ break
1898
+ end
1899
+ end
1900
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1901
+ s0 << r2
1902
+ end
1903
+ if s0.last
1904
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1905
+ r0.extend(MessageParams1)
1906
+ r0.extend(MessageParams2)
1907
+ else
1908
+ self.index = i0
1909
+ r0 = nil
1910
+ end
1911
+
1912
+ node_cache[:message_params][start_index] = r0
1913
+
1914
+ return r0
1915
+ end
1916
+
1917
+ module FirstParam0
1918
+ def first_param_value
1919
+ elements[2]
1920
+ end
1921
+ end
1922
+
1923
+ module FirstParam1
1924
+ def value
1925
+ {:name => nil, :value => first_param_value.value}
1926
+ end
1927
+ end
1928
+
1929
+ def _nt_first_param
1930
+ start_index = index
1931
+ if node_cache[:first_param].has_key?(index)
1932
+ cached = node_cache[:first_param][index]
1933
+ @index = cached.interval.end if cached
1934
+ return cached
1935
+ end
1936
+
1937
+ i0, s0 = index, []
1938
+ if input.index(':', index) == index
1939
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1940
+ @index += 1
1941
+ else
1942
+ terminal_parse_failure(':')
1943
+ r1 = nil
1944
+ end
1945
+ s0 << r1
1946
+ if r1
1947
+ if input.index(' ', index) == index
1948
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1949
+ @index += 1
1950
+ else
1951
+ terminal_parse_failure(' ')
1952
+ r2 = nil
1953
+ end
1954
+ s0 << r2
1955
+ if r2
1956
+ r3 = _nt_param_value
1957
+ s0 << r3
1958
+ end
1959
+ end
1960
+ if s0.last
1961
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1962
+ r0.extend(FirstParam0)
1963
+ r0.extend(FirstParam1)
1964
+ else
1965
+ self.index = i0
1966
+ r0 = nil
1967
+ end
1968
+
1969
+ node_cache[:first_param][start_index] = r0
1970
+
1971
+ return r0
1972
+ end
1973
+
1974
+ module Param0
1975
+ def param_name
1976
+ elements[0]
1977
+ end
1978
+
1979
+ def param_value
1980
+ elements[2]
1981
+ end
1982
+ end
1983
+
1984
+ module Param1
1985
+ def value
1986
+ #[param_name.value, param_value.value]
1987
+ #param_value
1988
+ {:name => param_name.value, :value => param_value.value}
1989
+ end
1990
+ end
1991
+
1992
+ def _nt_param
1993
+ start_index = index
1994
+ if node_cache[:param].has_key?(index)
1995
+ cached = node_cache[:param][index]
1996
+ @index = cached.interval.end if cached
1997
+ return cached
1998
+ end
1999
+
2000
+ i0, s0 = index, []
2001
+ r1 = _nt_param_name
2002
+ s0 << r1
2003
+ if r1
2004
+ if input.index(' ', index) == index
2005
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2006
+ @index += 1
2007
+ else
2008
+ terminal_parse_failure(' ')
2009
+ r2 = nil
2010
+ end
2011
+ s0 << r2
2012
+ if r2
2013
+ r3 = _nt_param_value
2014
+ s0 << r3
2015
+ end
2016
+ end
2017
+ if s0.last
2018
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2019
+ r0.extend(Param0)
2020
+ r0.extend(Param1)
2021
+ else
2022
+ self.index = i0
2023
+ r0 = nil
2024
+ end
2025
+
2026
+ node_cache[:param][start_index] = r0
2027
+
2028
+ return r0
2029
+ end
2030
+
2031
+ module ParamName0
2032
+ def identifier
2033
+ elements[0]
2034
+ end
2035
+
2036
+ end
2037
+
2038
+ module ParamName1
2039
+ def value
2040
+ identifier.value
2041
+ end
2042
+ end
2043
+
2044
+ def _nt_param_name
2045
+ start_index = index
2046
+ if node_cache[:param_name].has_key?(index)
2047
+ cached = node_cache[:param_name][index]
2048
+ @index = cached.interval.end if cached
2049
+ return cached
2050
+ end
2051
+
2052
+ i0, s0 = index, []
2053
+ r1 = _nt_identifier
2054
+ s0 << r1
2055
+ if r1
2056
+ if input.index(':', index) == index
2057
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2058
+ @index += 1
2059
+ else
2060
+ terminal_parse_failure(':')
2061
+ r2 = nil
2062
+ end
2063
+ s0 << r2
2064
+ end
2065
+ if s0.last
2066
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2067
+ r0.extend(ParamName0)
2068
+ r0.extend(ParamName1)
2069
+ else
2070
+ self.index = i0
2071
+ r0 = nil
2072
+ end
2073
+
2074
+ node_cache[:param_name][start_index] = r0
2075
+
2076
+ return r0
2077
+ end
2078
+
2079
+ def _nt_param_value
2080
+ start_index = index
2081
+ if node_cache[:param_value].has_key?(index)
2082
+ cached = node_cache[:param_value][index]
2083
+ @index = cached.interval.end if cached
2084
+ return cached
2085
+ end
2086
+
2087
+ i0 = index
2088
+ r1 = _nt_literal
2089
+ if r1
2090
+ r0 = r1
2091
+ else
2092
+ r2 = _nt_identifier
2093
+ if r2
2094
+ r0 = r2
2095
+ else
2096
+ r3 = _nt_subexpression
2097
+ if r3
2098
+ r0 = r3
2099
+ else
2100
+ self.index = i0
2101
+ r0 = nil
2102
+ end
2103
+ end
2104
+ end
2105
+
2106
+ node_cache[:param_value][start_index] = r0
2107
+
2108
+ return r0
2109
+ end
2110
+
2111
+ def _nt_literal
2112
+ start_index = index
2113
+ if node_cache[:literal].has_key?(index)
2114
+ cached = node_cache[:literal][index]
2115
+ @index = cached.interval.end if cached
2116
+ return cached
2117
+ end
2118
+
2119
+ i0 = index
2120
+ r1 = _nt_string_literal
2121
+ if r1
2122
+ r0 = r1
2123
+ else
2124
+ r2 = _nt_symbol_literal
2125
+ if r2
2126
+ r0 = r2
2127
+ else
2128
+ r3 = _nt_float_literal
2129
+ if r3
2130
+ r0 = r3
2131
+ else
2132
+ r4 = _nt_int_literal
2133
+ if r4
2134
+ r0 = r4
2135
+ else
2136
+ r5 = _nt_char_literal
2137
+ if r5
2138
+ r0 = r5
2139
+ else
2140
+ r6 = _nt_array_literal
2141
+ if r6
2142
+ r0 = r6
2143
+ else
2144
+ r7 = _nt_hash_literal
2145
+ if r7
2146
+ r0 = r7
2147
+ else
2148
+ r8 = _nt_block_literal
2149
+ if r8
2150
+ r0 = r8
2151
+ else
2152
+ r9 = _nt_regex_literal
2153
+ if r9
2154
+ r0 = r9
2155
+ else
2156
+ self.index = i0
2157
+ r0 = nil
2158
+ end
2159
+ end
2160
+ end
2161
+ end
2162
+ end
2163
+ end
2164
+ end
2165
+ end
2166
+ end
2167
+
2168
+ node_cache[:literal][start_index] = r0
2169
+
2170
+ return r0
2171
+ end
2172
+
2173
+ module StringLiteral0
2174
+ def string_val
2175
+ elements[1]
2176
+ end
2177
+
2178
+ end
2179
+
2180
+ module StringLiteral1
2181
+ def string_val
2182
+ elements[1]
2183
+ end
2184
+
2185
+ end
2186
+
2187
+ def _nt_string_literal
2188
+ start_index = index
2189
+ if node_cache[:string_literal].has_key?(index)
2190
+ cached = node_cache[:string_literal][index]
2191
+ @index = cached.interval.end if cached
2192
+ return cached
2193
+ end
2194
+
2195
+ i0 = index
2196
+ i1, s1 = index, []
2197
+ if input.index('"', index) == index
2198
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2199
+ @index += 1
2200
+ else
2201
+ terminal_parse_failure('"')
2202
+ r2 = nil
2203
+ end
2204
+ s1 << r2
2205
+ if r2
2206
+ s3, i3 = [], index
2207
+ loop do
2208
+ i4 = index
2209
+ r5 = _nt_string_interpolation
2210
+ if r5
2211
+ r4 = r5
2212
+ else
2213
+ r6 = _nt_string_char
2214
+ if r6
2215
+ r4 = r6
2216
+ else
2217
+ self.index = i4
2218
+ r4 = nil
2219
+ end
2220
+ end
2221
+ if r4
2222
+ s3 << r4
2223
+ else
2224
+ break
2225
+ end
2226
+ end
2227
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2228
+ s1 << r3
2229
+ if r3
2230
+ if input.index('"', index) == index
2231
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2232
+ @index += 1
2233
+ else
2234
+ terminal_parse_failure('"')
2235
+ r7 = nil
2236
+ end
2237
+ s1 << r7
2238
+ end
2239
+ end
2240
+ if s1.last
2241
+ r1 = instantiate_node(StringLiteralNode,input, i1...index, s1)
2242
+ r1.extend(StringLiteral0)
2243
+ else
2244
+ self.index = i1
2245
+ r1 = nil
2246
+ end
2247
+ if r1
2248
+ r0 = r1
2249
+ else
2250
+ i8, s8 = index, []
2251
+ if input.index("'", index) == index
2252
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2253
+ @index += 1
2254
+ else
2255
+ terminal_parse_failure("'")
2256
+ r9 = nil
2257
+ end
2258
+ s8 << r9
2259
+ if r9
2260
+ s10, i10 = [], index
2261
+ loop do
2262
+ i11 = index
2263
+ r12 = _nt_string_interpolation
2264
+ if r12
2265
+ r11 = r12
2266
+ else
2267
+ r13 = _nt_string_char_single_quote
2268
+ if r13
2269
+ r11 = r13
2270
+ else
2271
+ self.index = i11
2272
+ r11 = nil
2273
+ end
2274
+ end
2275
+ if r11
2276
+ s10 << r11
2277
+ else
2278
+ break
2279
+ end
2280
+ end
2281
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
2282
+ s8 << r10
2283
+ if r10
2284
+ if input.index("'", index) == index
2285
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
2286
+ @index += 1
2287
+ else
2288
+ terminal_parse_failure("'")
2289
+ r14 = nil
2290
+ end
2291
+ s8 << r14
2292
+ end
2293
+ end
2294
+ if s8.last
2295
+ r8 = instantiate_node(StringLiteralNode,input, i8...index, s8)
2296
+ r8.extend(StringLiteral1)
2297
+ else
2298
+ self.index = i8
2299
+ r8 = nil
2300
+ end
2301
+ if r8
2302
+ r0 = r8
2303
+ else
2304
+ self.index = i0
2305
+ r0 = nil
2306
+ end
2307
+ end
2308
+
2309
+ node_cache[:string_literal][start_index] = r0
2310
+
2311
+ return r0
2312
+ end
2313
+
2314
+ module StringChar0
2315
+ def char
2316
+ elements[1]
2317
+ end
2318
+ end
2319
+
2320
+ module StringChar1
2321
+ def value
2322
+ self.char.text_value
2323
+ end
2324
+ end
2325
+
2326
+ def _nt_string_char
2327
+ start_index = index
2328
+ if node_cache[:string_char].has_key?(index)
2329
+ cached = node_cache[:string_char][index]
2330
+ @index = cached.interval.end if cached
2331
+ return cached
2332
+ end
2333
+
2334
+ i0, s0 = index, []
2335
+ i1 = index
2336
+ if input.index('"', index) == index
2337
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2338
+ @index += 1
2339
+ else
2340
+ terminal_parse_failure('"')
2341
+ r2 = nil
2342
+ end
2343
+ if r2
2344
+ r1 = nil
2345
+ else
2346
+ self.index = i1
2347
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2348
+ end
2349
+ s0 << r1
2350
+ if r1
2351
+ if index < input_length
2352
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2353
+ @index += 1
2354
+ else
2355
+ terminal_parse_failure("any character")
2356
+ r3 = nil
2357
+ end
2358
+ s0 << r3
2359
+ end
2360
+ if s0.last
2361
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2362
+ r0.extend(StringChar0)
2363
+ r0.extend(StringChar1)
2364
+ else
2365
+ self.index = i0
2366
+ r0 = nil
2367
+ end
2368
+
2369
+ node_cache[:string_char][start_index] = r0
2370
+
2371
+ return r0
2372
+ end
2373
+
2374
+ module StringCharSingleQuote0
2375
+ def char
2376
+ elements[1]
2377
+ end
2378
+ end
2379
+
2380
+ module StringCharSingleQuote1
2381
+ def value
2382
+ self.char.text_value
2383
+ end
2384
+ end
2385
+
2386
+ def _nt_string_char_single_quote
2387
+ start_index = index
2388
+ if node_cache[:string_char_single_quote].has_key?(index)
2389
+ cached = node_cache[:string_char_single_quote][index]
2390
+ @index = cached.interval.end if cached
2391
+ return cached
2392
+ end
2393
+
2394
+ i0, s0 = index, []
2395
+ i1 = index
2396
+ if input.index("'", index) == index
2397
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2398
+ @index += 1
2399
+ else
2400
+ terminal_parse_failure("'")
2401
+ r2 = nil
2402
+ end
2403
+ if r2
2404
+ r1 = nil
2405
+ else
2406
+ self.index = i1
2407
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2408
+ end
2409
+ s0 << r1
2410
+ if r1
2411
+ if index < input_length
2412
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2413
+ @index += 1
2414
+ else
2415
+ terminal_parse_failure("any character")
2416
+ r3 = nil
2417
+ end
2418
+ s0 << r3
2419
+ end
2420
+ if s0.last
2421
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2422
+ r0.extend(StringCharSingleQuote0)
2423
+ r0.extend(StringCharSingleQuote1)
2424
+ else
2425
+ self.index = i0
2426
+ r0 = nil
2427
+ end
2428
+
2429
+ node_cache[:string_char_single_quote][start_index] = r0
2430
+
2431
+ return r0
2432
+ end
2433
+
2434
+ module StringInterpolation0
2435
+ def expr
2436
+ elements[2]
2437
+ end
2438
+
2439
+ end
2440
+
2441
+ module StringInterpolation1
2442
+ def value
2443
+ val = "\#\{"
2444
+ val += expr.respond_to?(:value) ? expr.value : expr.subexpr.value
2445
+ val += "\}"
2446
+ end
2447
+ end
2448
+
2449
+ def _nt_string_interpolation
2450
+ start_index = index
2451
+ if node_cache[:string_interpolation].has_key?(index)
2452
+ cached = node_cache[:string_interpolation][index]
2453
+ @index = cached.interval.end if cached
2454
+ return cached
2455
+ end
2456
+
2457
+ i0, s0 = index, []
2458
+ if input.index('#{', index) == index
2459
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
2460
+ @index += 2
2461
+ else
2462
+ terminal_parse_failure('#{')
2463
+ r1 = nil
2464
+ end
2465
+ s0 << r1
2466
+ if r1
2467
+ s2, i2 = [], index
2468
+ loop do
2469
+ r3 = _nt_spaces
2470
+ if r3
2471
+ s2 << r3
2472
+ else
2473
+ break
2474
+ end
2475
+ end
2476
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2477
+ s0 << r2
2478
+ if r2
2479
+ i4 = index
2480
+ r5 = _nt_expression
2481
+ if r5
2482
+ r4 = r5
2483
+ else
2484
+ r6 = _nt_identifier
2485
+ if r6
2486
+ r4 = r6
2487
+ else
2488
+ r7 = _nt_literal
2489
+ if r7
2490
+ r4 = r7
2491
+ else
2492
+ self.index = i4
2493
+ r4 = nil
2494
+ end
2495
+ end
2496
+ end
2497
+ s0 << r4
2498
+ if r4
2499
+ s8, i8 = [], index
2500
+ loop do
2501
+ r9 = _nt_spaces
2502
+ if r9
2503
+ s8 << r9
2504
+ else
2505
+ break
2506
+ end
2507
+ end
2508
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2509
+ s0 << r8
2510
+ if r8
2511
+ if input.index('}', index) == index
2512
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2513
+ @index += 1
2514
+ else
2515
+ terminal_parse_failure('}')
2516
+ r10 = nil
2517
+ end
2518
+ s0 << r10
2519
+ end
2520
+ end
2521
+ end
2522
+ end
2523
+ if s0.last
2524
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2525
+ r0.extend(StringInterpolation0)
2526
+ r0.extend(StringInterpolation1)
2527
+ else
2528
+ self.index = i0
2529
+ r0 = nil
2530
+ end
2531
+
2532
+ node_cache[:string_interpolation][start_index] = r0
2533
+
2534
+ return r0
2535
+ end
2536
+
2537
+ module SymbolLiteral0
2538
+ def identifier
2539
+ elements[1]
2540
+ end
2541
+ end
2542
+
2543
+ module SymbolLiteral1
2544
+ def symbol_name
2545
+ elements[1]
2546
+ end
2547
+ end
2548
+
2549
+ module SymbolLiteral2
2550
+ def value
2551
+ (':' + symbol_name.text_value).to_sym
2552
+ end
2553
+ end
2554
+
2555
+ def _nt_symbol_literal
2556
+ start_index = index
2557
+ if node_cache[:symbol_literal].has_key?(index)
2558
+ cached = node_cache[:symbol_literal][index]
2559
+ @index = cached.interval.end if cached
2560
+ return cached
2561
+ end
2562
+
2563
+ i0, s0 = index, []
2564
+ if input.index(':', index) == index
2565
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2566
+ @index += 1
2567
+ else
2568
+ terminal_parse_failure(':')
2569
+ r1 = nil
2570
+ end
2571
+ s0 << r1
2572
+ if r1
2573
+ i2, s2 = index, []
2574
+ i3 = index
2575
+ if input.index(':', index) == index
2576
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2577
+ @index += 1
2578
+ else
2579
+ terminal_parse_failure(':')
2580
+ r4 = nil
2581
+ end
2582
+ if r4
2583
+ r3 = nil
2584
+ else
2585
+ self.index = i3
2586
+ r3 = instantiate_node(SyntaxNode,input, index...index)
2587
+ end
2588
+ s2 << r3
2589
+ if r3
2590
+ r5 = _nt_identifier
2591
+ s2 << r5
2592
+ end
2593
+ if s2.last
2594
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2595
+ r2.extend(SymbolLiteral0)
2596
+ else
2597
+ self.index = i2
2598
+ r2 = nil
2599
+ end
2600
+ s0 << r2
2601
+ end
2602
+ if s0.last
2603
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2604
+ r0.extend(SymbolLiteral1)
2605
+ r0.extend(SymbolLiteral2)
2606
+ else
2607
+ self.index = i0
2608
+ r0 = nil
2609
+ end
2610
+
2611
+ node_cache[:symbol_literal][start_index] = r0
2612
+
2613
+ return r0
2614
+ end
2615
+
2616
+ module IntLiteral0
2617
+ def non_zero_digit
2618
+ elements[1]
2619
+ end
2620
+
2621
+ end
2622
+
2623
+ def _nt_int_literal
2624
+ start_index = index
2625
+ if node_cache[:int_literal].has_key?(index)
2626
+ cached = node_cache[:int_literal][index]
2627
+ @index = cached.interval.end if cached
2628
+ return cached
2629
+ end
2630
+
2631
+ i0 = index
2632
+ i1, s1 = index, []
2633
+ r3 = _nt_sign
2634
+ if r3
2635
+ r2 = r3
2636
+ else
2637
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2638
+ end
2639
+ s1 << r2
2640
+ if r2
2641
+ r4 = _nt_non_zero_digit
2642
+ s1 << r4
2643
+ if r4
2644
+ s5, i5 = [], index
2645
+ loop do
2646
+ r6 = _nt_digit
2647
+ if r6
2648
+ s5 << r6
2649
+ else
2650
+ break
2651
+ end
2652
+ end
2653
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2654
+ s1 << r5
2655
+ end
2656
+ end
2657
+ if s1.last
2658
+ r1 = instantiate_node(IntegerLiteralNode,input, i1...index, s1)
2659
+ r1.extend(IntLiteral0)
2660
+ else
2661
+ self.index = i1
2662
+ r1 = nil
2663
+ end
2664
+ if r1
2665
+ r0 = r1
2666
+ else
2667
+ if input.index(Regexp.new('[0]'), index) == index
2668
+ r7 = instantiate_node(IntegerLiteralNode,input, index...(index + 1))
2669
+ @index += 1
2670
+ else
2671
+ r7 = nil
2672
+ end
2673
+ if r7
2674
+ r0 = r7
2675
+ else
2676
+ self.index = i0
2677
+ r0 = nil
2678
+ end
2679
+ end
2680
+
2681
+ node_cache[:int_literal][start_index] = r0
2682
+
2683
+ return r0
2684
+ end
2685
+
2686
+ module FloatLiteral0
2687
+ end
2688
+
2689
+ module FloatLiteral1
2690
+ def value
2691
+ self.text_value.to_f
2692
+ end
2693
+ end
2694
+
2695
+ def _nt_float_literal
2696
+ start_index = index
2697
+ if node_cache[:float_literal].has_key?(index)
2698
+ cached = node_cache[:float_literal][index]
2699
+ @index = cached.interval.end if cached
2700
+ return cached
2701
+ end
2702
+
2703
+ i0, s0 = index, []
2704
+ r2 = _nt_sign
2705
+ if r2
2706
+ r1 = r2
2707
+ else
2708
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2709
+ end
2710
+ s0 << r1
2711
+ if r1
2712
+ s3, i3 = [], index
2713
+ loop do
2714
+ r4 = _nt_digit
2715
+ if r4
2716
+ s3 << r4
2717
+ else
2718
+ break
2719
+ end
2720
+ end
2721
+ if s3.empty?
2722
+ self.index = i3
2723
+ r3 = nil
2724
+ else
2725
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2726
+ end
2727
+ s0 << r3
2728
+ if r3
2729
+ if input.index('.', index) == index
2730
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2731
+ @index += 1
2732
+ else
2733
+ terminal_parse_failure('.')
2734
+ r5 = nil
2735
+ end
2736
+ s0 << r5
2737
+ if r5
2738
+ s6, i6 = [], index
2739
+ loop do
2740
+ r7 = _nt_digit
2741
+ if r7
2742
+ s6 << r7
2743
+ else
2744
+ break
2745
+ end
2746
+ end
2747
+ if s6.empty?
2748
+ self.index = i6
2749
+ r6 = nil
2750
+ else
2751
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2752
+ end
2753
+ s0 << r6
2754
+ end
2755
+ end
2756
+ end
2757
+ if s0.last
2758
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2759
+ r0.extend(FloatLiteral0)
2760
+ r0.extend(FloatLiteral1)
2761
+ else
2762
+ self.index = i0
2763
+ r0 = nil
2764
+ end
2765
+
2766
+ node_cache[:float_literal][start_index] = r0
2767
+
2768
+ return r0
2769
+ end
2770
+
2771
+ module CharLiteral0
2772
+ def val
2773
+ elements[1]
2774
+ end
2775
+ end
2776
+
2777
+ module CharLiteral1
2778
+ def value
2779
+ val.each_byte{|b| b}
2780
+ end
2781
+ end
2782
+
2783
+ def _nt_char_literal
2784
+ start_index = index
2785
+ if node_cache[:char_literal].has_key?(index)
2786
+ cached = node_cache[:char_literal][index]
2787
+ @index = cached.interval.end if cached
2788
+ return cached
2789
+ end
2790
+
2791
+ i0, s0 = index, []
2792
+ if input.index('?', index) == index
2793
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2794
+ @index += 1
2795
+ else
2796
+ terminal_parse_failure('?')
2797
+ r1 = nil
2798
+ end
2799
+ s0 << r1
2800
+ if r1
2801
+ if input.index(Regexp.new('[a-zA-Z0-9_]'), index) == index
2802
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2803
+ @index += 1
2804
+ else
2805
+ r2 = nil
2806
+ end
2807
+ s0 << r2
2808
+ end
2809
+ if s0.last
2810
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2811
+ r0.extend(CharLiteral0)
2812
+ r0.extend(CharLiteral1)
2813
+ else
2814
+ self.index = i0
2815
+ r0 = nil
2816
+ end
2817
+
2818
+ node_cache[:char_literal][start_index] = r0
2819
+
2820
+ return r0
2821
+ end
2822
+
2823
+ module ArrayLiteral0
2824
+ def item
2825
+ elements[2]
2826
+ end
2827
+ end
2828
+
2829
+ module ArrayLiteral1
2830
+ def first_item
2831
+ elements[2]
2832
+ end
2833
+
2834
+ def rest_items
2835
+ elements[4]
2836
+ end
2837
+
2838
+ end
2839
+
2840
+ module ArrayLiteral2
2841
+ def value
2842
+ if self.text_value =~ /\[\s*\]/
2843
+ "[]"
2844
+ else
2845
+ #[first_item.value] + rest_items.elements.collect{ |ws_and_items| ws_and_items.item.value }
2846
+ array_str = "[#{first_item.value},"
2847
+ rest_items.elements.each do |ws_and_items|
2848
+ array_str += "#{ws_and_items.item.value},"
2849
+ end
2850
+ array_str += "]"
2851
+ return array_str
2852
+ end
2853
+ end
2854
+ end
2855
+
2856
+ def _nt_array_literal
2857
+ start_index = index
2858
+ if node_cache[:array_literal].has_key?(index)
2859
+ cached = node_cache[:array_literal][index]
2860
+ @index = cached.interval.end if cached
2861
+ return cached
2862
+ end
2863
+
2864
+ i0, s0 = index, []
2865
+ if input.index('[', index) == index
2866
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2867
+ @index += 1
2868
+ else
2869
+ terminal_parse_failure('[')
2870
+ r1 = nil
2871
+ end
2872
+ s0 << r1
2873
+ if r1
2874
+ s2, i2 = [], index
2875
+ loop do
2876
+ r3 = _nt_ws
2877
+ if r3
2878
+ s2 << r3
2879
+ else
2880
+ break
2881
+ end
2882
+ end
2883
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2884
+ s0 << r2
2885
+ if r2
2886
+ i5 = index
2887
+ r6 = _nt_literal
2888
+ if r6
2889
+ r5 = r6
2890
+ else
2891
+ r7 = _nt_identifier
2892
+ if r7
2893
+ r5 = r7
2894
+ else
2895
+ self.index = i5
2896
+ r5 = nil
2897
+ end
2898
+ end
2899
+ if r5
2900
+ r4 = r5
2901
+ else
2902
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2903
+ end
2904
+ s0 << r4
2905
+ if r4
2906
+ s8, i8 = [], index
2907
+ loop do
2908
+ r9 = _nt_ws
2909
+ if r9
2910
+ s8 << r9
2911
+ else
2912
+ break
2913
+ end
2914
+ end
2915
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2916
+ s0 << r8
2917
+ if r8
2918
+ s10, i10 = [], index
2919
+ loop do
2920
+ i11, s11 = index, []
2921
+ if input.index(',', index) == index
2922
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
2923
+ @index += 1
2924
+ else
2925
+ terminal_parse_failure(',')
2926
+ r12 = nil
2927
+ end
2928
+ s11 << r12
2929
+ if r12
2930
+ s13, i13 = [], index
2931
+ loop do
2932
+ r14 = _nt_ws
2933
+ if r14
2934
+ s13 << r14
2935
+ else
2936
+ break
2937
+ end
2938
+ end
2939
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
2940
+ s11 << r13
2941
+ if r13
2942
+ i15 = index
2943
+ r16 = _nt_literal
2944
+ if r16
2945
+ r15 = r16
2946
+ else
2947
+ r17 = _nt_identifier
2948
+ if r17
2949
+ r15 = r17
2950
+ else
2951
+ self.index = i15
2952
+ r15 = nil
2953
+ end
2954
+ end
2955
+ s11 << r15
2956
+ end
2957
+ end
2958
+ if s11.last
2959
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
2960
+ r11.extend(ArrayLiteral0)
2961
+ else
2962
+ self.index = i11
2963
+ r11 = nil
2964
+ end
2965
+ if r11
2966
+ s10 << r11
2967
+ else
2968
+ break
2969
+ end
2970
+ end
2971
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
2972
+ s0 << r10
2973
+ if r10
2974
+ s18, i18 = [], index
2975
+ loop do
2976
+ r19 = _nt_ws
2977
+ if r19
2978
+ s18 << r19
2979
+ else
2980
+ break
2981
+ end
2982
+ end
2983
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
2984
+ s0 << r18
2985
+ if r18
2986
+ if input.index(']', index) == index
2987
+ r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
2988
+ @index += 1
2989
+ else
2990
+ terminal_parse_failure(']')
2991
+ r20 = nil
2992
+ end
2993
+ s0 << r20
2994
+ end
2995
+ end
2996
+ end
2997
+ end
2998
+ end
2999
+ end
3000
+ if s0.last
3001
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3002
+ r0.extend(ArrayLiteral1)
3003
+ r0.extend(ArrayLiteral2)
3004
+ else
3005
+ self.index = i0
3006
+ r0 = nil
3007
+ end
3008
+
3009
+ node_cache[:array_literal][start_index] = r0
3010
+
3011
+ return r0
3012
+ end
3013
+
3014
+ module HashLiteral0
3015
+ def pair
3016
+ elements[2]
3017
+ end
3018
+ end
3019
+
3020
+ module HashLiteral1
3021
+ def first_entry
3022
+ elements[2]
3023
+ end
3024
+
3025
+ def rest_pairs
3026
+ elements[4]
3027
+ end
3028
+
3029
+ end
3030
+
3031
+ module HashLiteral2
3032
+ def value
3033
+ if self.text_value =~ /\{\s*\}/
3034
+ return "{}"
3035
+ else
3036
+ hash_str = "{"
3037
+ first_pair = first_entry.value
3038
+ hash_str += "#{first_pair[0]} => #{first_pair[1]},"
3039
+ rest_pairs.elements.each do |ws_and_pair|
3040
+ pair = ws_and_pair.pair
3041
+ hash_str += "#{pair[0]} => #{pair[1]},"
3042
+ end
3043
+ hash_str += "}"
3044
+
3045
+ return hash_str
3046
+ end
3047
+ end
3048
+ end
3049
+
3050
+ def _nt_hash_literal
3051
+ start_index = index
3052
+ if node_cache[:hash_literal].has_key?(index)
3053
+ cached = node_cache[:hash_literal][index]
3054
+ @index = cached.interval.end if cached
3055
+ return cached
3056
+ end
3057
+
3058
+ i0, s0 = index, []
3059
+ if input.index('{', index) == index
3060
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3061
+ @index += 1
3062
+ else
3063
+ terminal_parse_failure('{')
3064
+ r1 = nil
3065
+ end
3066
+ s0 << r1
3067
+ if r1
3068
+ s2, i2 = [], index
3069
+ loop do
3070
+ r3 = _nt_ws
3071
+ if r3
3072
+ s2 << r3
3073
+ else
3074
+ break
3075
+ end
3076
+ end
3077
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3078
+ s0 << r2
3079
+ if r2
3080
+ r5 = _nt_hash_entry
3081
+ if r5
3082
+ r4 = r5
3083
+ else
3084
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3085
+ end
3086
+ s0 << r4
3087
+ if r4
3088
+ s6, i6 = [], index
3089
+ loop do
3090
+ r7 = _nt_ws
3091
+ if r7
3092
+ s6 << r7
3093
+ else
3094
+ break
3095
+ end
3096
+ end
3097
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3098
+ s0 << r6
3099
+ if r6
3100
+ s8, i8 = [], index
3101
+ loop do
3102
+ i9, s9 = index, []
3103
+ if input.index(',', index) == index
3104
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3105
+ @index += 1
3106
+ else
3107
+ terminal_parse_failure(',')
3108
+ r10 = nil
3109
+ end
3110
+ s9 << r10
3111
+ if r10
3112
+ s11, i11 = [], index
3113
+ loop do
3114
+ r12 = _nt_ws
3115
+ if r12
3116
+ s11 << r12
3117
+ else
3118
+ break
3119
+ end
3120
+ end
3121
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
3122
+ s9 << r11
3123
+ if r11
3124
+ r13 = _nt_hash_entry
3125
+ s9 << r13
3126
+ end
3127
+ end
3128
+ if s9.last
3129
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
3130
+ r9.extend(HashLiteral0)
3131
+ else
3132
+ self.index = i9
3133
+ r9 = nil
3134
+ end
3135
+ if r9
3136
+ s8 << r9
3137
+ else
3138
+ break
3139
+ end
3140
+ end
3141
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
3142
+ s0 << r8
3143
+ if r8
3144
+ s14, i14 = [], index
3145
+ loop do
3146
+ r15 = _nt_ws
3147
+ if r15
3148
+ s14 << r15
3149
+ else
3150
+ break
3151
+ end
3152
+ end
3153
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
3154
+ s0 << r14
3155
+ if r14
3156
+ if input.index('}', index) == index
3157
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
3158
+ @index += 1
3159
+ else
3160
+ terminal_parse_failure('}')
3161
+ r16 = nil
3162
+ end
3163
+ s0 << r16
3164
+ end
3165
+ end
3166
+ end
3167
+ end
3168
+ end
3169
+ end
3170
+ if s0.last
3171
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3172
+ r0.extend(HashLiteral1)
3173
+ r0.extend(HashLiteral2)
3174
+ else
3175
+ self.index = i0
3176
+ r0 = nil
3177
+ end
3178
+
3179
+ node_cache[:hash_literal][start_index] = r0
3180
+
3181
+ return r0
3182
+ end
3183
+
3184
+ module HashEntry0
3185
+ def key
3186
+ elements[0]
3187
+ end
3188
+
3189
+ def val
3190
+ elements[4]
3191
+ end
3192
+ end
3193
+
3194
+ module HashEntry1
3195
+ def value
3196
+ [key.value, val.value]
3197
+ end
3198
+ end
3199
+
3200
+ def _nt_hash_entry
3201
+ start_index = index
3202
+ if node_cache[:hash_entry].has_key?(index)
3203
+ cached = node_cache[:hash_entry][index]
3204
+ @index = cached.interval.end if cached
3205
+ return cached
3206
+ end
3207
+
3208
+ i0, s0 = index, []
3209
+ i1 = index
3210
+ r2 = _nt_literal
3211
+ if r2
3212
+ r1 = r2
3213
+ else
3214
+ r3 = _nt_identifier
3215
+ if r3
3216
+ r1 = r3
3217
+ else
3218
+ self.index = i1
3219
+ r1 = nil
3220
+ end
3221
+ end
3222
+ s0 << r1
3223
+ if r1
3224
+ s4, i4 = [], index
3225
+ loop do
3226
+ r5 = _nt_ws
3227
+ if r5
3228
+ s4 << r5
3229
+ else
3230
+ break
3231
+ end
3232
+ end
3233
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
3234
+ s0 << r4
3235
+ if r4
3236
+ if input.index('=>', index) == index
3237
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
3238
+ @index += 2
3239
+ else
3240
+ terminal_parse_failure('=>')
3241
+ r6 = nil
3242
+ end
3243
+ s0 << r6
3244
+ if r6
3245
+ s7, i7 = [], index
3246
+ loop do
3247
+ r8 = _nt_ws
3248
+ if r8
3249
+ s7 << r8
3250
+ else
3251
+ break
3252
+ end
3253
+ end
3254
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3255
+ s0 << r7
3256
+ if r7
3257
+ i9 = index
3258
+ r10 = _nt_literal
3259
+ if r10
3260
+ r9 = r10
3261
+ else
3262
+ r11 = _nt_identifier
3263
+ if r11
3264
+ r9 = r11
3265
+ else
3266
+ self.index = i9
3267
+ r9 = nil
3268
+ end
3269
+ end
3270
+ s0 << r9
3271
+ end
3272
+ end
3273
+ end
3274
+ end
3275
+ if s0.last
3276
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3277
+ r0.extend(HashEntry0)
3278
+ r0.extend(HashEntry1)
3279
+ else
3280
+ self.index = i0
3281
+ r0 = nil
3282
+ end
3283
+
3284
+ node_cache[:hash_entry][start_index] = r0
3285
+
3286
+ return r0
3287
+ end
3288
+
3289
+ def _nt_block_literal
3290
+ start_index = index
3291
+ if node_cache[:block_literal].has_key?(index)
3292
+ cached = node_cache[:block_literal][index]
3293
+ @index = cached.interval.end if cached
3294
+ return cached
3295
+ end
3296
+
3297
+ i0 = index
3298
+ r1 = _nt_block_literal_do_end
3299
+ if r1
3300
+ r0 = r1
3301
+ else
3302
+ r2 = _nt_block_literal_curly_braces
3303
+ if r2
3304
+ r0 = r2
3305
+ else
3306
+ self.index = i0
3307
+ r0 = nil
3308
+ end
3309
+ end
3310
+
3311
+ node_cache[:block_literal][start_index] = r0
3312
+
3313
+ return r0
3314
+ end
3315
+
3316
+ module BlockLiteralDoEnd0
3317
+ def do_keyword
3318
+ elements[0]
3319
+ end
3320
+
3321
+ def params
3322
+ elements[4]
3323
+ end
3324
+
3325
+ def body
3326
+ elements[6]
3327
+ end
3328
+
3329
+ def end_keyword
3330
+ elements[8]
3331
+ end
3332
+ end
3333
+
3334
+ def _nt_block_literal_do_end
3335
+ start_index = index
3336
+ if node_cache[:block_literal_do_end].has_key?(index)
3337
+ cached = node_cache[:block_literal_do_end][index]
3338
+ @index = cached.interval.end if cached
3339
+ return cached
3340
+ end
3341
+
3342
+ i0, s0 = index, []
3343
+ r1 = _nt_do_keyword
3344
+ s0 << r1
3345
+ if r1
3346
+ s2, i2 = [], index
3347
+ loop do
3348
+ r3 = _nt_ws
3349
+ if r3
3350
+ s2 << r3
3351
+ else
3352
+ break
3353
+ end
3354
+ end
3355
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3356
+ s0 << r2
3357
+ if r2
3358
+ i4 = index
3359
+ r5 = _nt_hash_entry
3360
+ if r5
3361
+ r4 = nil
3362
+ else
3363
+ self.index = i4
3364
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3365
+ end
3366
+ s0 << r4
3367
+ if r4
3368
+ s6, i6 = [], index
3369
+ loop do
3370
+ r7 = _nt_ws
3371
+ if r7
3372
+ s6 << r7
3373
+ else
3374
+ break
3375
+ end
3376
+ end
3377
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3378
+ s0 << r6
3379
+ if r6
3380
+ r9 = _nt_block_params
3381
+ if r9
3382
+ r8 = r9
3383
+ else
3384
+ r8 = instantiate_node(SyntaxNode,input, index...index)
3385
+ end
3386
+ s0 << r8
3387
+ if r8
3388
+ s10, i10 = [], index
3389
+ loop do
3390
+ r11 = _nt_ws
3391
+ if r11
3392
+ s10 << r11
3393
+ else
3394
+ break
3395
+ end
3396
+ end
3397
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
3398
+ s0 << r10
3399
+ if r10
3400
+ r12 = _nt_block_body
3401
+ s0 << r12
3402
+ if r12
3403
+ s13, i13 = [], index
3404
+ loop do
3405
+ r14 = _nt_ws
3406
+ if r14
3407
+ s13 << r14
3408
+ else
3409
+ break
3410
+ end
3411
+ end
3412
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
3413
+ s0 << r13
3414
+ if r13
3415
+ r15 = _nt_end_keyword
3416
+ s0 << r15
3417
+ end
3418
+ end
3419
+ end
3420
+ end
3421
+ end
3422
+ end
3423
+ end
3424
+ end
3425
+ if s0.last
3426
+ r0 = instantiate_node(BlockLiteralNode,input, i0...index, s0)
3427
+ r0.extend(BlockLiteralDoEnd0)
3428
+ else
3429
+ self.index = i0
3430
+ r0 = nil
3431
+ end
3432
+
3433
+ node_cache[:block_literal_do_end][start_index] = r0
3434
+
3435
+ return r0
3436
+ end
3437
+
3438
+ module BlockLiteralCurlyBraces0
3439
+ def params
3440
+ elements[4]
3441
+ end
3442
+
3443
+ def body
3444
+ elements[6]
3445
+ end
3446
+
3447
+ end
3448
+
3449
+ def _nt_block_literal_curly_braces
3450
+ start_index = index
3451
+ if node_cache[:block_literal_curly_braces].has_key?(index)
3452
+ cached = node_cache[:block_literal_curly_braces][index]
3453
+ @index = cached.interval.end if cached
3454
+ return cached
3455
+ end
3456
+
3457
+ i0, s0 = index, []
3458
+ if input.index('{', index) == index
3459
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3460
+ @index += 1
3461
+ else
3462
+ terminal_parse_failure('{')
3463
+ r1 = nil
3464
+ end
3465
+ s0 << r1
3466
+ if r1
3467
+ s2, i2 = [], index
3468
+ loop do
3469
+ r3 = _nt_ws
3470
+ if r3
3471
+ s2 << r3
3472
+ else
3473
+ break
3474
+ end
3475
+ end
3476
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3477
+ s0 << r2
3478
+ if r2
3479
+ i4 = index
3480
+ r5 = _nt_hash_entry
3481
+ if r5
3482
+ r4 = nil
3483
+ else
3484
+ self.index = i4
3485
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3486
+ end
3487
+ s0 << r4
3488
+ if r4
3489
+ s6, i6 = [], index
3490
+ loop do
3491
+ r7 = _nt_ws
3492
+ if r7
3493
+ s6 << r7
3494
+ else
3495
+ break
3496
+ end
3497
+ end
3498
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3499
+ s0 << r6
3500
+ if r6
3501
+ r9 = _nt_block_params
3502
+ if r9
3503
+ r8 = r9
3504
+ else
3505
+ r8 = instantiate_node(SyntaxNode,input, index...index)
3506
+ end
3507
+ s0 << r8
3508
+ if r8
3509
+ s10, i10 = [], index
3510
+ loop do
3511
+ r11 = _nt_ws
3512
+ if r11
3513
+ s10 << r11
3514
+ else
3515
+ break
3516
+ end
3517
+ end
3518
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
3519
+ s0 << r10
3520
+ if r10
3521
+ r12 = _nt_block_body
3522
+ s0 << r12
3523
+ if r12
3524
+ s13, i13 = [], index
3525
+ loop do
3526
+ r14 = _nt_ws
3527
+ if r14
3528
+ s13 << r14
3529
+ else
3530
+ break
3531
+ end
3532
+ end
3533
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
3534
+ s0 << r13
3535
+ if r13
3536
+ if input.index('}', index) == index
3537
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
3538
+ @index += 1
3539
+ else
3540
+ terminal_parse_failure('}')
3541
+ r15 = nil
3542
+ end
3543
+ s0 << r15
3544
+ end
3545
+ end
3546
+ end
3547
+ end
3548
+ end
3549
+ end
3550
+ end
3551
+ end
3552
+ if s0.last
3553
+ r0 = instantiate_node(BlockLiteralNode,input, i0...index, s0)
3554
+ r0.extend(BlockLiteralCurlyBraces0)
3555
+ else
3556
+ self.index = i0
3557
+ r0 = nil
3558
+ end
3559
+
3560
+ node_cache[:block_literal_curly_braces][start_index] = r0
3561
+
3562
+ return r0
3563
+ end
3564
+
3565
+ module BlockBody0
3566
+ def exprs
3567
+ elements[1]
3568
+ end
3569
+
3570
+ end
3571
+
3572
+ module BlockBody1
3573
+ def value
3574
+ body_str = ""
3575
+ body_str += exprs.elements.collect{|e| e.elements[0].value}.join(";")
3576
+ return body_str
3577
+ end
3578
+ end
3579
+
3580
+ def _nt_block_body
3581
+ start_index = index
3582
+ if node_cache[:block_body].has_key?(index)
3583
+ cached = node_cache[:block_body][index]
3584
+ @index = cached.interval.end if cached
3585
+ return cached
3586
+ end
3587
+
3588
+ i0, s0 = index, []
3589
+ s1, i1 = [], index
3590
+ loop do
3591
+ r2 = _nt_ws
3592
+ if r2
3593
+ s1 << r2
3594
+ else
3595
+ break
3596
+ end
3597
+ end
3598
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3599
+ s0 << r1
3600
+ if r1
3601
+ s3, i3 = [], index
3602
+ loop do
3603
+ r4 = _nt_expression
3604
+ if r4
3605
+ s3 << r4
3606
+ else
3607
+ break
3608
+ end
3609
+ end
3610
+ if s3.empty?
3611
+ self.index = i3
3612
+ r3 = nil
3613
+ else
3614
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3615
+ end
3616
+ s0 << r3
3617
+ if r3
3618
+ s5, i5 = [], index
3619
+ loop do
3620
+ r6 = _nt_ws
3621
+ if r6
3622
+ s5 << r6
3623
+ else
3624
+ break
3625
+ end
3626
+ end
3627
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3628
+ s0 << r5
3629
+ end
3630
+ end
3631
+ if s0.last
3632
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3633
+ r0.extend(BlockBody0)
3634
+ r0.extend(BlockBody1)
3635
+ else
3636
+ self.index = i0
3637
+ r0 = nil
3638
+ end
3639
+
3640
+ node_cache[:block_body][start_index] = r0
3641
+
3642
+ return r0
3643
+ end
3644
+
3645
+ module BlockParams0
3646
+ def params
3647
+ elements[1]
3648
+ end
3649
+
3650
+ end
3651
+
3652
+ module BlockParams1
3653
+ def value
3654
+ # block_param_str = "|"
3655
+ # block_param_str += params.elements.collect{|param| param.value}.join(",")
3656
+ # block_param_str += "| "
3657
+ # return block_param_str
3658
+ params.elements.collect{|param| param.value}
3659
+ end
3660
+ end
3661
+
3662
+ def _nt_block_params
3663
+ start_index = index
3664
+ if node_cache[:block_params].has_key?(index)
3665
+ cached = node_cache[:block_params][index]
3666
+ @index = cached.interval.end if cached
3667
+ return cached
3668
+ end
3669
+
3670
+ i0, s0 = index, []
3671
+ if input.index('|', index) == index
3672
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3673
+ @index += 1
3674
+ else
3675
+ terminal_parse_failure('|')
3676
+ r1 = nil
3677
+ end
3678
+ s0 << r1
3679
+ if r1
3680
+ s2, i2 = [], index
3681
+ loop do
3682
+ r3 = _nt_block_param
3683
+ if r3
3684
+ s2 << r3
3685
+ else
3686
+ break
3687
+ end
3688
+ end
3689
+ if s2.empty?
3690
+ self.index = i2
3691
+ r2 = nil
3692
+ else
3693
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3694
+ end
3695
+ s0 << r2
3696
+ if r2
3697
+ if input.index('|', index) == index
3698
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3699
+ @index += 1
3700
+ else
3701
+ terminal_parse_failure('|')
3702
+ r4 = nil
3703
+ end
3704
+ s0 << r4
3705
+ end
3706
+ end
3707
+ if s0.last
3708
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3709
+ r0.extend(BlockParams0)
3710
+ r0.extend(BlockParams1)
3711
+ else
3712
+ self.index = i0
3713
+ r0 = nil
3714
+ end
3715
+
3716
+ node_cache[:block_params][start_index] = r0
3717
+
3718
+ return r0
3719
+ end
3720
+
3721
+ module BlockParam0
3722
+ def identifier
3723
+ elements[0]
3724
+ end
3725
+
3726
+ end
3727
+
3728
+ module BlockParam1
3729
+ def param_name
3730
+ elements[1]
3731
+ end
3732
+
3733
+ def param_name_val
3734
+ elements[3]
3735
+ end
3736
+
3737
+ end
3738
+
3739
+ module BlockParam2
3740
+ def param_name_val
3741
+ elements[1]
3742
+ end
3743
+ end
3744
+
3745
+ module BlockParam3
3746
+ def value
3747
+ # holds param name (if given) with param value (the identifier in the body of the block)
3748
+ name_identifier_pair = {}
3749
+ if param_name.text_value =~ /\S+\:/
3750
+ # return the param-name as a symbol (start with a colon)
3751
+ # without the final colon & space, since it's not part of the name
3752
+ name_identifier_pair[:name] = ":#{param_name.text_value[0..-2]}"
3753
+ end
3754
+ name_identifier_pair[:identifier] = param_name_val.value
3755
+ return name_identifier_pair
3756
+ end
3757
+ end
3758
+
3759
+ def _nt_block_param
3760
+ start_index = index
3761
+ if node_cache[:block_param].has_key?(index)
3762
+ cached = node_cache[:block_param][index]
3763
+ @index = cached.interval.end if cached
3764
+ return cached
3765
+ end
3766
+
3767
+ i0 = index
3768
+ i1, s1 = index, []
3769
+ s2, i2 = [], index
3770
+ loop do
3771
+ r3 = _nt_ws
3772
+ if r3
3773
+ s2 << r3
3774
+ else
3775
+ break
3776
+ end
3777
+ end
3778
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3779
+ s1 << r2
3780
+ if r2
3781
+ i5, s5 = index, []
3782
+ r6 = _nt_identifier
3783
+ s5 << r6
3784
+ if r6
3785
+ if input.index(':', index) == index
3786
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
3787
+ @index += 1
3788
+ else
3789
+ terminal_parse_failure(':')
3790
+ r7 = nil
3791
+ end
3792
+ s5 << r7
3793
+ end
3794
+ if s5.last
3795
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3796
+ r5.extend(BlockParam0)
3797
+ else
3798
+ self.index = i5
3799
+ r5 = nil
3800
+ end
3801
+ if r5
3802
+ r4 = r5
3803
+ else
3804
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3805
+ end
3806
+ s1 << r4
3807
+ if r4
3808
+ s8, i8 = [], index
3809
+ loop do
3810
+ if input.index(' ', index) == index
3811
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3812
+ @index += 1
3813
+ else
3814
+ terminal_parse_failure(' ')
3815
+ r9 = nil
3816
+ end
3817
+ if r9
3818
+ s8 << r9
3819
+ else
3820
+ break
3821
+ end
3822
+ end
3823
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
3824
+ s1 << r8
3825
+ if r8
3826
+ r10 = _nt_identifier
3827
+ s1 << r10
3828
+ if r10
3829
+ s11, i11 = [], index
3830
+ loop do
3831
+ r12 = _nt_ws
3832
+ if r12
3833
+ s11 << r12
3834
+ else
3835
+ break
3836
+ end
3837
+ end
3838
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
3839
+ s1 << r11
3840
+ end
3841
+ end
3842
+ end
3843
+ end
3844
+ if s1.last
3845
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3846
+ r1.extend(BlockParam1)
3847
+ else
3848
+ self.index = i1
3849
+ r1 = nil
3850
+ end
3851
+ if r1
3852
+ r0 = r1
3853
+ r0.extend(BlockParam3)
3854
+ else
3855
+ i13, s13 = index, []
3856
+ s14, i14 = [], index
3857
+ loop do
3858
+ r15 = _nt_ws
3859
+ if r15
3860
+ s14 << r15
3861
+ else
3862
+ break
3863
+ end
3864
+ end
3865
+ if s14.empty?
3866
+ self.index = i14
3867
+ r14 = nil
3868
+ else
3869
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
3870
+ end
3871
+ s13 << r14
3872
+ if r14
3873
+ r16 = _nt_identifier
3874
+ s13 << r16
3875
+ end
3876
+ if s13.last
3877
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
3878
+ r13.extend(BlockParam2)
3879
+ else
3880
+ self.index = i13
3881
+ r13 = nil
3882
+ end
3883
+ if r13
3884
+ r0 = r13
3885
+ r0.extend(BlockParam3)
3886
+ else
3887
+ self.index = i0
3888
+ r0 = nil
3889
+ end
3890
+ end
3891
+
3892
+ node_cache[:block_param][start_index] = r0
3893
+
3894
+ return r0
3895
+ end
3896
+
3897
+ module RegexLiteral0
3898
+ end
3899
+
3900
+ module RegexLiteral1
3901
+ end
3902
+
3903
+ module RegexLiteral2
3904
+ def value
3905
+ self.text_value
3906
+ end
3907
+ end
3908
+
3909
+ def _nt_regex_literal
3910
+ start_index = index
3911
+ if node_cache[:regex_literal].has_key?(index)
3912
+ cached = node_cache[:regex_literal][index]
3913
+ @index = cached.interval.end if cached
3914
+ return cached
3915
+ end
3916
+
3917
+ i0, s0 = index, []
3918
+ if input.index('/', index) == index
3919
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3920
+ @index += 1
3921
+ else
3922
+ terminal_parse_failure('/')
3923
+ r1 = nil
3924
+ end
3925
+ s0 << r1
3926
+ if r1
3927
+ s2, i2 = [], index
3928
+ loop do
3929
+ i3, s3 = index, []
3930
+ i4 = index
3931
+ if input.index('/', index) == index
3932
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3933
+ @index += 1
3934
+ else
3935
+ terminal_parse_failure('/')
3936
+ r5 = nil
3937
+ end
3938
+ if r5
3939
+ r4 = nil
3940
+ else
3941
+ self.index = i4
3942
+ r4 = instantiate_node(SyntaxNode,input, index...index)
3943
+ end
3944
+ s3 << r4
3945
+ if r4
3946
+ if index < input_length
3947
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
3948
+ @index += 1
3949
+ else
3950
+ terminal_parse_failure("any character")
3951
+ r6 = nil
3952
+ end
3953
+ s3 << r6
3954
+ end
3955
+ if s3.last
3956
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3957
+ r3.extend(RegexLiteral0)
3958
+ else
3959
+ self.index = i3
3960
+ r3 = nil
3961
+ end
3962
+ if r3
3963
+ s2 << r3
3964
+ else
3965
+ break
3966
+ end
3967
+ end
3968
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3969
+ s0 << r2
3970
+ if r2
3971
+ if input.index('/', index) == index
3972
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
3973
+ @index += 1
3974
+ else
3975
+ terminal_parse_failure('/')
3976
+ r7 = nil
3977
+ end
3978
+ s0 << r7
3979
+ end
3980
+ end
3981
+ if s0.last
3982
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3983
+ r0.extend(RegexLiteral1)
3984
+ r0.extend(RegexLiteral2)
3985
+ else
3986
+ self.index = i0
3987
+ r0 = nil
3988
+ end
3989
+
3990
+ node_cache[:regex_literal][start_index] = r0
3991
+
3992
+ return r0
3993
+ end
3994
+
3995
+ module InlineRuby0
3996
+ end
3997
+
3998
+ module InlineRuby1
3999
+ def ruby_code
4000
+ elements[4]
4001
+ end
4002
+
4003
+ end
4004
+
4005
+ module InlineRuby2
4006
+ def value
4007
+ return_val = ""
4008
+ ruby_code.elements.each do |e|
4009
+ unless e.respond_to?(:value) # when NOT a comment
4010
+ return_val += e.text_value.gsub(/[\n\t]/, ";").gsub(/\s+/, " ")
4011
+ else
4012
+ # check if its actually a comment, or just a string
4013
+ # interpolation - I know, it's ugly :(
4014
+ if e.text_value =~ /#\{\S*\}/
4015
+ # if it's just a string interpolation, also return it
4016
+ return_val += e.text_value + ";"
4017
+ end
4018
+ end
4019
+ end
4020
+ return_val
4021
+ end
4022
+ end
4023
+
4024
+ def _nt_inline_ruby
4025
+ start_index = index
4026
+ if node_cache[:inline_ruby].has_key?(index)
4027
+ cached = node_cache[:inline_ruby][index]
4028
+ @index = cached.interval.end if cached
4029
+ return cached
4030
+ end
4031
+
4032
+ i0, s0 = index, []
4033
+ if input.index('%ruby', index) == index
4034
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
4035
+ @index += 5
4036
+ else
4037
+ terminal_parse_failure('%ruby')
4038
+ r1 = nil
4039
+ end
4040
+ s0 << r1
4041
+ if r1
4042
+ s2, i2 = [], index
4043
+ loop do
4044
+ r3 = _nt_ws
4045
+ if r3
4046
+ s2 << r3
4047
+ else
4048
+ break
4049
+ end
4050
+ end
4051
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
4052
+ s0 << r2
4053
+ if r2
4054
+ if input.index('{', index) == index
4055
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4056
+ @index += 1
4057
+ else
4058
+ terminal_parse_failure('{')
4059
+ r4 = nil
4060
+ end
4061
+ s0 << r4
4062
+ if r4
4063
+ s5, i5 = [], index
4064
+ loop do
4065
+ r6 = _nt_ws
4066
+ if r6
4067
+ s5 << r6
4068
+ else
4069
+ break
4070
+ end
4071
+ end
4072
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
4073
+ s0 << r5
4074
+ if r5
4075
+ s7, i7 = [], index
4076
+ loop do
4077
+ i8 = index
4078
+ r9 = _nt_comment
4079
+ if r9
4080
+ r8 = r9
4081
+ else
4082
+ i10, s10 = index, []
4083
+ i11 = index
4084
+ if input.index('}%', index) == index
4085
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 2))
4086
+ @index += 2
4087
+ else
4088
+ terminal_parse_failure('}%')
4089
+ r12 = nil
4090
+ end
4091
+ if r12
4092
+ r11 = nil
4093
+ else
4094
+ self.index = i11
4095
+ r11 = instantiate_node(SyntaxNode,input, index...index)
4096
+ end
4097
+ s10 << r11
4098
+ if r11
4099
+ if index < input_length
4100
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
4101
+ @index += 1
4102
+ else
4103
+ terminal_parse_failure("any character")
4104
+ r13 = nil
4105
+ end
4106
+ s10 << r13
4107
+ end
4108
+ if s10.last
4109
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
4110
+ r10.extend(InlineRuby0)
4111
+ else
4112
+ self.index = i10
4113
+ r10 = nil
4114
+ end
4115
+ if r10
4116
+ r8 = r10
4117
+ else
4118
+ self.index = i8
4119
+ r8 = nil
4120
+ end
4121
+ end
4122
+ if r8
4123
+ s7 << r8
4124
+ else
4125
+ break
4126
+ end
4127
+ end
4128
+ if s7.empty?
4129
+ self.index = i7
4130
+ r7 = nil
4131
+ else
4132
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
4133
+ end
4134
+ s0 << r7
4135
+ if r7
4136
+ if input.index('}%', index) == index
4137
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 2))
4138
+ @index += 2
4139
+ else
4140
+ terminal_parse_failure('}%')
4141
+ r14 = nil
4142
+ end
4143
+ s0 << r14
4144
+ end
4145
+ end
4146
+ end
4147
+ end
4148
+ end
4149
+ if s0.last
4150
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4151
+ r0.extend(InlineRuby1)
4152
+ r0.extend(InlineRuby2)
4153
+ else
4154
+ self.index = i0
4155
+ r0 = nil
4156
+ end
4157
+
4158
+ node_cache[:inline_ruby][start_index] = r0
4159
+
4160
+ return r0
4161
+ end
4162
+
4163
+ module Identifier0
4164
+ end
4165
+
4166
+ module Identifier1
4167
+ end
4168
+
4169
+ def _nt_identifier
4170
+ start_index = index
4171
+ if node_cache[:identifier].has_key?(index)
4172
+ cached = node_cache[:identifier][index]
4173
+ @index = cached.interval.end if cached
4174
+ return cached
4175
+ end
4176
+
4177
+ i0, s0 = index, []
4178
+ i2 = index
4179
+ if input.index('@', index) == index
4180
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4181
+ @index += 1
4182
+ else
4183
+ terminal_parse_failure('@')
4184
+ r3 = nil
4185
+ end
4186
+ if r3
4187
+ r2 = r3
4188
+ else
4189
+ if input.index('@@', index) == index
4190
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
4191
+ @index += 2
4192
+ else
4193
+ terminal_parse_failure('@@')
4194
+ r4 = nil
4195
+ end
4196
+ if r4
4197
+ r2 = r4
4198
+ else
4199
+ self.index = i2
4200
+ r2 = nil
4201
+ end
4202
+ end
4203
+ if r2
4204
+ r1 = r2
4205
+ else
4206
+ r1 = instantiate_node(SyntaxNode,input, index...index)
4207
+ end
4208
+ s0 << r1
4209
+ if r1
4210
+ i5 = index
4211
+ s6, i6 = [], index
4212
+ loop do
4213
+ if input.index(Regexp.new('[a-zA-Z]'), index) == index
4214
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
4215
+ @index += 1
4216
+ else
4217
+ r7 = nil
4218
+ end
4219
+ if r7
4220
+ s6 << r7
4221
+ else
4222
+ break
4223
+ end
4224
+ end
4225
+ if s6.empty?
4226
+ self.index = i6
4227
+ r6 = nil
4228
+ else
4229
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
4230
+ end
4231
+ if r6
4232
+ r5 = r6
4233
+ else
4234
+ i8, s8 = index, []
4235
+ if input.index('$', index) == index
4236
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
4237
+ @index += 1
4238
+ else
4239
+ terminal_parse_failure('$')
4240
+ r9 = nil
4241
+ end
4242
+ s8 << r9
4243
+ if r9
4244
+ if input.index(Regexp.new('[0-9]'), index) == index
4245
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
4246
+ @index += 1
4247
+ else
4248
+ r10 = nil
4249
+ end
4250
+ s8 << r10
4251
+ end
4252
+ if s8.last
4253
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
4254
+ r8.extend(Identifier0)
4255
+ else
4256
+ self.index = i8
4257
+ r8 = nil
4258
+ end
4259
+ if r8
4260
+ r5 = r8
4261
+ else
4262
+ self.index = i5
4263
+ r5 = nil
4264
+ end
4265
+ end
4266
+ s0 << r5
4267
+ if r5
4268
+ s11, i11 = [], index
4269
+ loop do
4270
+ if input.index(Regexp.new('[a-zA-Z0-9_]'), index) == index
4271
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
4272
+ @index += 1
4273
+ else
4274
+ r12 = nil
4275
+ end
4276
+ if r12
4277
+ s11 << r12
4278
+ else
4279
+ break
4280
+ end
4281
+ end
4282
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
4283
+ s0 << r11
4284
+ end
4285
+ end
4286
+ if s0.last
4287
+ r0 = instantiate_node(IdentifierNode,input, i0...index, s0)
4288
+ r0.extend(Identifier1)
4289
+ else
4290
+ self.index = i0
4291
+ r0 = nil
4292
+ end
4293
+
4294
+ node_cache[:identifier][start_index] = r0
4295
+
4296
+ return r0
4297
+ end
4298
+
4299
+ module MessageName0
4300
+ end
4301
+
4302
+ module MessageName1
4303
+ def value
4304
+ self.text_value
4305
+ end
4306
+ end
4307
+
4308
+ def _nt_message_name
4309
+ start_index = index
4310
+ if node_cache[:message_name].has_key?(index)
4311
+ cached = node_cache[:message_name][index]
4312
+ @index = cached.interval.end if cached
4313
+ return cached
4314
+ end
4315
+
4316
+ i0, s0 = index, []
4317
+ s1, i1 = [], index
4318
+ loop do
4319
+ if input.index(Regexp.new('[a-zA-Z]'), index) == index
4320
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
4321
+ @index += 1
4322
+ else
4323
+ r2 = nil
4324
+ end
4325
+ if r2
4326
+ s1 << r2
4327
+ else
4328
+ break
4329
+ end
4330
+ end
4331
+ if s1.empty?
4332
+ self.index = i1
4333
+ r1 = nil
4334
+ else
4335
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4336
+ end
4337
+ s0 << r1
4338
+ if r1
4339
+ s3, i3 = [], index
4340
+ loop do
4341
+ if input.index(Regexp.new('[a-zA-Z0-9_]'), index) == index
4342
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4343
+ @index += 1
4344
+ else
4345
+ r4 = nil
4346
+ end
4347
+ if r4
4348
+ s3 << r4
4349
+ else
4350
+ break
4351
+ end
4352
+ end
4353
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4354
+ s0 << r3
4355
+ if r3
4356
+ i6 = index
4357
+ if input.index('?', index) == index
4358
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
4359
+ @index += 1
4360
+ else
4361
+ terminal_parse_failure('?')
4362
+ r7 = nil
4363
+ end
4364
+ if r7
4365
+ r6 = r7
4366
+ else
4367
+ if input.index('!', index) == index
4368
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
4369
+ @index += 1
4370
+ else
4371
+ terminal_parse_failure('!')
4372
+ r8 = nil
4373
+ end
4374
+ if r8
4375
+ r6 = r8
4376
+ else
4377
+ if input.index('=', index) == index
4378
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
4379
+ @index += 1
4380
+ else
4381
+ terminal_parse_failure('=')
4382
+ r9 = nil
4383
+ end
4384
+ if r9
4385
+ r6 = r9
4386
+ else
4387
+ self.index = i6
4388
+ r6 = nil
4389
+ end
4390
+ end
4391
+ end
4392
+ if r6
4393
+ r5 = r6
4394
+ else
4395
+ r5 = instantiate_node(SyntaxNode,input, index...index)
4396
+ end
4397
+ s0 << r5
4398
+ end
4399
+ end
4400
+ if s0.last
4401
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4402
+ r0.extend(MessageName0)
4403
+ r0.extend(MessageName1)
4404
+ else
4405
+ self.index = i0
4406
+ r0 = nil
4407
+ end
4408
+
4409
+ node_cache[:message_name][start_index] = r0
4410
+
4411
+ return r0
4412
+ end
4413
+
4414
+ module Operator0
4415
+ end
4416
+
4417
+ module Operator1
4418
+ def operator_symbol
4419
+ elements[0]
4420
+ end
4421
+
4422
+ end
4423
+
4424
+ module Operator2
4425
+ def value
4426
+ self.text_value
4427
+ end
4428
+ end
4429
+
4430
+ def _nt_operator
4431
+ start_index = index
4432
+ if node_cache[:operator].has_key?(index)
4433
+ cached = node_cache[:operator][index]
4434
+ @index = cached.interval.end if cached
4435
+ return cached
4436
+ end
4437
+
4438
+ i0 = index
4439
+ i1, s1 = index, []
4440
+ if input.index('=', index) == index
4441
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
4442
+ @index += 1
4443
+ else
4444
+ terminal_parse_failure('=')
4445
+ r2 = nil
4446
+ end
4447
+ s1 << r2
4448
+ if r2
4449
+ s3, i3 = [], index
4450
+ loop do
4451
+ r4 = _nt_operator_symbol
4452
+ if r4
4453
+ s3 << r4
4454
+ else
4455
+ break
4456
+ end
4457
+ end
4458
+ if s3.empty?
4459
+ self.index = i3
4460
+ r3 = nil
4461
+ else
4462
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
4463
+ end
4464
+ s1 << r3
4465
+ end
4466
+ if s1.last
4467
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
4468
+ r1.extend(Operator0)
4469
+ else
4470
+ self.index = i1
4471
+ r1 = nil
4472
+ end
4473
+ if r1
4474
+ r0 = r1
4475
+ else
4476
+ i5, s5 = index, []
4477
+ r6 = _nt_operator_symbol
4478
+ s5 << r6
4479
+ if r6
4480
+ if input.index('=', index) == index
4481
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
4482
+ @index += 1
4483
+ else
4484
+ terminal_parse_failure('=')
4485
+ r7 = nil
4486
+ end
4487
+ s5 << r7
4488
+ if r7
4489
+ s8, i8 = [], index
4490
+ loop do
4491
+ r9 = _nt_operator_symbol
4492
+ if r9
4493
+ s8 << r9
4494
+ else
4495
+ break
4496
+ end
4497
+ end
4498
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
4499
+ s5 << r8
4500
+ end
4501
+ end
4502
+ if s5.last
4503
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
4504
+ r5.extend(Operator1)
4505
+ else
4506
+ self.index = i5
4507
+ r5 = nil
4508
+ end
4509
+ if r5
4510
+ r0 = r5
4511
+ else
4512
+ s10, i10 = [], index
4513
+ loop do
4514
+ r11 = _nt_operator_symbol
4515
+ if r11
4516
+ s10 << r11
4517
+ else
4518
+ break
4519
+ end
4520
+ end
4521
+ if s10.empty?
4522
+ self.index = i10
4523
+ r10 = nil
4524
+ else
4525
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
4526
+ r10.extend(Operator2)
4527
+ end
4528
+ if r10
4529
+ r0 = r10
4530
+ else
4531
+ self.index = i0
4532
+ r0 = nil
4533
+ end
4534
+ end
4535
+ end
4536
+
4537
+ node_cache[:operator][start_index] = r0
4538
+
4539
+ return r0
4540
+ end
4541
+
4542
+ def _nt_operator_symbol
4543
+ start_index = index
4544
+ if node_cache[:operator_symbol].has_key?(index)
4545
+ cached = node_cache[:operator_symbol][index]
4546
+ @index = cached.interval.end if cached
4547
+ return cached
4548
+ end
4549
+
4550
+ i0 = index
4551
+ if input.index('<=', index) == index
4552
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
4553
+ @index += 2
4554
+ else
4555
+ terminal_parse_failure('<=')
4556
+ r1 = nil
4557
+ end
4558
+ if r1
4559
+ r0 = r1
4560
+ else
4561
+ if input.index('>=', index) == index
4562
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
4563
+ @index += 2
4564
+ else
4565
+ terminal_parse_failure('>=')
4566
+ r2 = nil
4567
+ end
4568
+ if r2
4569
+ r0 = r2
4570
+ else
4571
+ if input.index('<', index) == index
4572
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4573
+ @index += 1
4574
+ else
4575
+ terminal_parse_failure('<')
4576
+ r3 = nil
4577
+ end
4578
+ if r3
4579
+ r0 = r3
4580
+ else
4581
+ if input.index('>', index) == index
4582
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
4583
+ @index += 1
4584
+ else
4585
+ terminal_parse_failure('>')
4586
+ r4 = nil
4587
+ end
4588
+ if r4
4589
+ r0 = r4
4590
+ else
4591
+ if input.index('==', index) == index
4592
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 2))
4593
+ @index += 2
4594
+ else
4595
+ terminal_parse_failure('==')
4596
+ r5 = nil
4597
+ end
4598
+ if r5
4599
+ r0 = r5
4600
+ else
4601
+ if input.index('!=', index) == index
4602
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
4603
+ @index += 2
4604
+ else
4605
+ terminal_parse_failure('!=')
4606
+ r6 = nil
4607
+ end
4608
+ if r6
4609
+ r0 = r6
4610
+ else
4611
+ if input.index('+=', index) == index
4612
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
4613
+ @index += 2
4614
+ else
4615
+ terminal_parse_failure('+=')
4616
+ r7 = nil
4617
+ end
4618
+ if r7
4619
+ r0 = r7
4620
+ else
4621
+ if input.index('-=', index) == index
4622
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
4623
+ @index += 2
4624
+ else
4625
+ terminal_parse_failure('-=')
4626
+ r8 = nil
4627
+ end
4628
+ if r8
4629
+ r0 = r8
4630
+ else
4631
+ if input.index('&', index) == index
4632
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
4633
+ @index += 1
4634
+ else
4635
+ terminal_parse_failure('&')
4636
+ r9 = nil
4637
+ end
4638
+ if r9
4639
+ r0 = r9
4640
+ else
4641
+ if input.index('.', index) == index
4642
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
4643
+ @index += 1
4644
+ else
4645
+ terminal_parse_failure('.')
4646
+ r10 = nil
4647
+ end
4648
+ if r10
4649
+ r0 = r10
4650
+ else
4651
+ if input.index('+', index) == index
4652
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
4653
+ @index += 1
4654
+ else
4655
+ terminal_parse_failure('+')
4656
+ r11 = nil
4657
+ end
4658
+ if r11
4659
+ r0 = r11
4660
+ else
4661
+ if input.index('-', index) == index
4662
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
4663
+ @index += 1
4664
+ else
4665
+ terminal_parse_failure('-')
4666
+ r12 = nil
4667
+ end
4668
+ if r12
4669
+ r0 = r12
4670
+ else
4671
+ if input.index('/', index) == index
4672
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
4673
+ @index += 1
4674
+ else
4675
+ terminal_parse_failure('/')
4676
+ r13 = nil
4677
+ end
4678
+ if r13
4679
+ r0 = r13
4680
+ else
4681
+ if input.index('*', index) == index
4682
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
4683
+ @index += 1
4684
+ else
4685
+ terminal_parse_failure('*')
4686
+ r14 = nil
4687
+ end
4688
+ if r14
4689
+ r0 = r14
4690
+ else
4691
+ if input.index('|', index) == index
4692
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
4693
+ @index += 1
4694
+ else
4695
+ terminal_parse_failure('|')
4696
+ r15 = nil
4697
+ end
4698
+ if r15
4699
+ r0 = r15
4700
+ else
4701
+ if input.index('=~', index) == index
4702
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 2))
4703
+ @index += 2
4704
+ else
4705
+ terminal_parse_failure('=~')
4706
+ r16 = nil
4707
+ end
4708
+ if r16
4709
+ r0 = r16
4710
+ else
4711
+ self.index = i0
4712
+ r0 = nil
4713
+ end
4714
+ end
4715
+ end
4716
+ end
4717
+ end
4718
+ end
4719
+ end
4720
+ end
4721
+ end
4722
+ end
4723
+ end
4724
+ end
4725
+ end
4726
+ end
4727
+ end
4728
+ end
4729
+
4730
+ node_cache[:operator_symbol][start_index] = r0
4731
+
4732
+ return r0
4733
+ end
4734
+
4735
+ def _nt_ws
4736
+ start_index = index
4737
+ if node_cache[:ws].has_key?(index)
4738
+ cached = node_cache[:ws][index]
4739
+ @index = cached.interval.end if cached
4740
+ return cached
4741
+ end
4742
+
4743
+ s0, i0 = [], index
4744
+ loop do
4745
+ if input.index(Regexp.new('[\\n\\s\\t]'), index) == index
4746
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4747
+ @index += 1
4748
+ else
4749
+ r1 = nil
4750
+ end
4751
+ if r1
4752
+ s0 << r1
4753
+ else
4754
+ break
4755
+ end
4756
+ end
4757
+ if s0.empty?
4758
+ self.index = i0
4759
+ r0 = nil
4760
+ else
4761
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4762
+ end
4763
+
4764
+ node_cache[:ws][start_index] = r0
4765
+
4766
+ return r0
4767
+ end
4768
+
4769
+ def _nt_spaces
4770
+ start_index = index
4771
+ if node_cache[:spaces].has_key?(index)
4772
+ cached = node_cache[:spaces][index]
4773
+ @index = cached.interval.end if cached
4774
+ return cached
4775
+ end
4776
+
4777
+ s0, i0 = [], index
4778
+ loop do
4779
+ if input.index(Regexp.new('[\\s\\t]'), index) == index
4780
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4781
+ @index += 1
4782
+ else
4783
+ r1 = nil
4784
+ end
4785
+ if r1
4786
+ s0 << r1
4787
+ else
4788
+ break
4789
+ end
4790
+ end
4791
+ if s0.empty?
4792
+ self.index = i0
4793
+ r0 = nil
4794
+ else
4795
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4796
+ end
4797
+
4798
+ node_cache[:spaces][start_index] = r0
4799
+
4800
+ return r0
4801
+ end
4802
+
4803
+ def _nt_newline
4804
+ start_index = index
4805
+ if node_cache[:newline].has_key?(index)
4806
+ cached = node_cache[:newline][index]
4807
+ @index = cached.interval.end if cached
4808
+ return cached
4809
+ end
4810
+
4811
+ s0, i0 = [], index
4812
+ loop do
4813
+ if input.index(Regexp.new('[\\n]'), index) == index
4814
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4815
+ @index += 1
4816
+ else
4817
+ r1 = nil
4818
+ end
4819
+ if r1
4820
+ s0 << r1
4821
+ else
4822
+ break
4823
+ end
4824
+ end
4825
+ if s0.empty?
4826
+ self.index = i0
4827
+ r0 = nil
4828
+ else
4829
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4830
+ end
4831
+
4832
+ node_cache[:newline][start_index] = r0
4833
+
4834
+ return r0
4835
+ end
4836
+
4837
+ module DoKeyword0
4838
+ end
4839
+
4840
+ def _nt_do_keyword
4841
+ start_index = index
4842
+ if node_cache[:do_keyword].has_key?(index)
4843
+ cached = node_cache[:do_keyword][index]
4844
+ @index = cached.interval.end if cached
4845
+ return cached
4846
+ end
4847
+
4848
+ i0, s0 = index, []
4849
+ if input.index('do', index) == index
4850
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 2))
4851
+ @index += 2
4852
+ else
4853
+ terminal_parse_failure('do')
4854
+ r1 = nil
4855
+ end
4856
+ s0 << r1
4857
+ if r1
4858
+ i2 = index
4859
+ if input.index(Regexp.new('[a-zA-Z0-9_]'), index) == index
4860
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4861
+ @index += 1
4862
+ else
4863
+ r3 = nil
4864
+ end
4865
+ if r3
4866
+ r2 = nil
4867
+ else
4868
+ self.index = i2
4869
+ r2 = instantiate_node(SyntaxNode,input, index...index)
4870
+ end
4871
+ s0 << r2
4872
+ if r2
4873
+ i4 = index
4874
+ r5 = _nt_ws
4875
+ if r5
4876
+ self.index = i4
4877
+ r4 = instantiate_node(SyntaxNode,input, index...index)
4878
+ else
4879
+ r4 = nil
4880
+ end
4881
+ s0 << r4
4882
+ end
4883
+ end
4884
+ if s0.last
4885
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4886
+ r0.extend(DoKeyword0)
4887
+ else
4888
+ self.index = i0
4889
+ r0 = nil
4890
+ end
4891
+
4892
+ node_cache[:do_keyword][start_index] = r0
4893
+
4894
+ return r0
4895
+ end
4896
+
4897
+ module EndKeyword0
4898
+ end
4899
+
4900
+ def _nt_end_keyword
4901
+ start_index = index
4902
+ if node_cache[:end_keyword].has_key?(index)
4903
+ cached = node_cache[:end_keyword][index]
4904
+ @index = cached.interval.end if cached
4905
+ return cached
4906
+ end
4907
+
4908
+ i0, s0 = index, []
4909
+ if input.index('end', index) == index
4910
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
4911
+ @index += 3
4912
+ else
4913
+ terminal_parse_failure('end')
4914
+ r1 = nil
4915
+ end
4916
+ s0 << r1
4917
+ if r1
4918
+ i2 = index
4919
+ if input.index(Regexp.new('[a-zA-Z0-9_]'), index) == index
4920
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
4921
+ @index += 1
4922
+ else
4923
+ r3 = nil
4924
+ end
4925
+ if r3
4926
+ r2 = nil
4927
+ else
4928
+ self.index = i2
4929
+ r2 = instantiate_node(SyntaxNode,input, index...index)
4930
+ end
4931
+ s0 << r2
4932
+ end
4933
+ if s0.last
4934
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
4935
+ r0.extend(EndKeyword0)
4936
+ else
4937
+ self.index = i0
4938
+ r0 = nil
4939
+ end
4940
+
4941
+ node_cache[:end_keyword][start_index] = r0
4942
+
4943
+ return r0
4944
+ end
4945
+
4946
+ def _nt_non_zero_digit
4947
+ start_index = index
4948
+ if node_cache[:non_zero_digit].has_key?(index)
4949
+ cached = node_cache[:non_zero_digit][index]
4950
+ @index = cached.interval.end if cached
4951
+ return cached
4952
+ end
4953
+
4954
+ if input.index(Regexp.new('[1-9]'), index) == index
4955
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4956
+ @index += 1
4957
+ else
4958
+ r0 = nil
4959
+ end
4960
+
4961
+ node_cache[:non_zero_digit][start_index] = r0
4962
+
4963
+ return r0
4964
+ end
4965
+
4966
+ def _nt_digit
4967
+ start_index = index
4968
+ if node_cache[:digit].has_key?(index)
4969
+ cached = node_cache[:digit][index]
4970
+ @index = cached.interval.end if cached
4971
+ return cached
4972
+ end
4973
+
4974
+ if input.index(Regexp.new('[0-9]'), index) == index
4975
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4976
+ @index += 1
4977
+ else
4978
+ r0 = nil
4979
+ end
4980
+
4981
+ node_cache[:digit][start_index] = r0
4982
+
4983
+ return r0
4984
+ end
4985
+
4986
+ def _nt_sign
4987
+ start_index = index
4988
+ if node_cache[:sign].has_key?(index)
4989
+ cached = node_cache[:sign][index]
4990
+ @index = cached.interval.end if cached
4991
+ return cached
4992
+ end
4993
+
4994
+ i0 = index
4995
+ if input.index('+', index) == index
4996
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
4997
+ @index += 1
4998
+ else
4999
+ terminal_parse_failure('+')
5000
+ r1 = nil
5001
+ end
5002
+ if r1
5003
+ r0 = r1
5004
+ else
5005
+ if input.index('-', index) == index
5006
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
5007
+ @index += 1
5008
+ else
5009
+ terminal_parse_failure('-')
5010
+ r2 = nil
5011
+ end
5012
+ if r2
5013
+ r0 = r2
5014
+ else
5015
+ self.index = i0
5016
+ r0 = nil
5017
+ end
5018
+ end
5019
+
5020
+ node_cache[:sign][start_index] = r0
5021
+
5022
+ return r0
5023
+ end
5024
+
5025
+ end
5026
+
5027
+ class BlocktalkParser < Treetop::Runtime::CompiledParser
5028
+ include Blocktalk
5029
+ end
5030
+