jnunemaker-siren 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,84 @@
1
+ grammar Json
2
+ rule value
3
+ space data:(object / array / string / number / true / false / null) space {
4
+ def value
5
+ data.value
6
+ end
7
+ }
8
+ end
9
+
10
+ rule object
11
+ "{" space list:( first:(key_value_pair) others:("," key_value_pair)* )? "}" {
12
+ def value
13
+ pairs = [list.first] + list.others.elements.map { |e| e.key_value_pair }
14
+ pairs.inject({}) do |hash, pair|
15
+ hash[pair.string.value] = pair.value.value
16
+ hash
17
+ end
18
+ rescue
19
+ {}
20
+ end
21
+ }
22
+ end
23
+
24
+ rule key_value_pair
25
+ space string space ":" value
26
+ end
27
+
28
+ rule array
29
+ "[" space list:( first:(value) others:("," value)* )? "]" {
30
+ def value
31
+ [list.first.value] + list.others.elements.map { |v| v.value.value }
32
+ rescue
33
+ []
34
+ end
35
+ }
36
+ end
37
+
38
+ rule string
39
+ '"' ('\\' ('"' / '\\' / '/' / 'b' / 'f' / 'n' / 'r' / 't' / 'u' hex hex hex hex) / [^\"\\])* '"' {
40
+ def value
41
+ eval(text_value)
42
+ end
43
+ }
44
+ end
45
+
46
+ rule number
47
+ "-"? ("0" / [1-9] digit*) ("." digit+)? ([eE] [+-]? digit+)? {
48
+ def value
49
+ eval(text_value)
50
+ end
51
+ }
52
+ end
53
+
54
+ rule digit
55
+ [0-9]
56
+ end
57
+
58
+ rule hex
59
+ [a-f] / digit
60
+ end
61
+
62
+ rule true
63
+ "true" {
64
+ def value; true; end
65
+ }
66
+ end
67
+
68
+ rule false
69
+ "false" {
70
+ def value; false; end
71
+ }
72
+ end
73
+
74
+ rule null
75
+ "null" {
76
+ def value; nil; end
77
+ }
78
+ end
79
+
80
+ rule space
81
+ [\s\n\t]*
82
+ end
83
+ end
84
+
@@ -0,0 +1,2045 @@
1
+ module JsonQuery
2
+ include Treetop::Runtime
3
+
4
+ def root
5
+ @root || :expression
6
+ end
7
+
8
+ def _nt_expression
9
+ start_index = index
10
+ if node_cache[:expression].has_key?(index)
11
+ cached = node_cache[:expression][index]
12
+ @index = cached.interval.end if cached
13
+ return cached
14
+ end
15
+
16
+ i0 = index
17
+ r1 = _nt_additive
18
+ if r1
19
+ r0 = r1
20
+ else
21
+ r2 = _nt_multiplicative
22
+ if r2
23
+ r0 = r2
24
+ else
25
+ r3 = _nt_atom
26
+ if r3
27
+ r0 = r3
28
+ else
29
+ self.index = i0
30
+ r0 = nil
31
+ end
32
+ end
33
+ end
34
+
35
+ node_cache[:expression][start_index] = r0
36
+
37
+ return r0
38
+ end
39
+
40
+ module Query0
41
+ def identifier
42
+ elements[0]
43
+ end
44
+
45
+ end
46
+
47
+ def _nt_query
48
+ start_index = index
49
+ if node_cache[:query].has_key?(index)
50
+ cached = node_cache[:query][index]
51
+ @index = cached.interval.end if cached
52
+ return cached
53
+ end
54
+
55
+ i0, s0 = index, []
56
+ r1 = _nt_identifier
57
+ s0 << r1
58
+ if r1
59
+ s2, i2 = [], index
60
+ loop do
61
+ r3 = _nt_filter
62
+ if r3
63
+ s2 << r3
64
+ else
65
+ break
66
+ end
67
+ end
68
+ r2 = SyntaxNode.new(input, i2...index, s2)
69
+ s0 << r2
70
+ end
71
+ if s0.last
72
+ r0 = (Query).new(input, i0...index, s0)
73
+ r0.extend(Query0)
74
+ else
75
+ self.index = i0
76
+ r0 = nil
77
+ end
78
+
79
+ node_cache[:query][start_index] = r0
80
+
81
+ return r0
82
+ end
83
+
84
+ def _nt_identifier
85
+ start_index = index
86
+ if node_cache[:identifier].has_key?(index)
87
+ cached = node_cache[:identifier][index]
88
+ @index = cached.interval.end if cached
89
+ return cached
90
+ end
91
+
92
+ i0 = index
93
+ r1 = _nt_root
94
+ if r1
95
+ r0 = r1
96
+ r0.extend(Identifier)
97
+ else
98
+ r2 = _nt_current
99
+ if r2
100
+ r0 = r2
101
+ r0.extend(Identifier)
102
+ else
103
+ r3 = _nt_symbol
104
+ if r3
105
+ r0 = r3
106
+ r0.extend(Identifier)
107
+ else
108
+ self.index = i0
109
+ r0 = nil
110
+ end
111
+ end
112
+ end
113
+
114
+ node_cache[:identifier][start_index] = r0
115
+
116
+ return r0
117
+ end
118
+
119
+ def _nt_root
120
+ start_index = index
121
+ if node_cache[:root].has_key?(index)
122
+ cached = node_cache[:root][index]
123
+ @index = cached.interval.end if cached
124
+ return cached
125
+ end
126
+
127
+ if input.index("$", index) == index
128
+ r0 = (Root).new(input, index...(index + 1))
129
+ @index += 1
130
+ else
131
+ terminal_parse_failure("$")
132
+ r0 = nil
133
+ end
134
+
135
+ node_cache[:root][start_index] = r0
136
+
137
+ return r0
138
+ end
139
+
140
+ def _nt_current
141
+ start_index = index
142
+ if node_cache[:current].has_key?(index)
143
+ cached = node_cache[:current][index]
144
+ @index = cached.interval.end if cached
145
+ return cached
146
+ end
147
+
148
+ if input.index("@", index) == index
149
+ r0 = (Current).new(input, index...(index + 1))
150
+ @index += 1
151
+ else
152
+ terminal_parse_failure("@")
153
+ r0 = nil
154
+ end
155
+
156
+ node_cache[:current][start_index] = r0
157
+
158
+ return r0
159
+ end
160
+
161
+ module Symbol0
162
+ end
163
+
164
+ def _nt_symbol
165
+ start_index = index
166
+ if node_cache[:symbol].has_key?(index)
167
+ cached = node_cache[:symbol][index]
168
+ @index = cached.interval.end if cached
169
+ return cached
170
+ end
171
+
172
+ i0, s0 = index, []
173
+ if input.index(Regexp.new('[A-Za-z$_]'), index) == index
174
+ r1 = (SyntaxNode).new(input, index...(index + 1))
175
+ @index += 1
176
+ else
177
+ r1 = nil
178
+ end
179
+ s0 << r1
180
+ if r1
181
+ s2, i2 = [], index
182
+ loop do
183
+ if input.index(Regexp.new('[A-Za-z0-9$_]'), index) == index
184
+ r3 = (SyntaxNode).new(input, index...(index + 1))
185
+ @index += 1
186
+ else
187
+ r3 = nil
188
+ end
189
+ if r3
190
+ s2 << r3
191
+ else
192
+ break
193
+ end
194
+ end
195
+ r2 = SyntaxNode.new(input, i2...index, s2)
196
+ s0 << r2
197
+ end
198
+ if s0.last
199
+ r0 = (Symbol).new(input, i0...index, s0)
200
+ r0.extend(Symbol0)
201
+ else
202
+ self.index = i0
203
+ r0 = nil
204
+ end
205
+
206
+ node_cache[:symbol][start_index] = r0
207
+
208
+ return r0
209
+ end
210
+
211
+ def _nt_filter
212
+ start_index = index
213
+ if node_cache[:filter].has_key?(index)
214
+ cached = node_cache[:filter][index]
215
+ @index = cached.interval.end if cached
216
+ return cached
217
+ end
218
+
219
+ i0 = index
220
+ r1 = _nt_field_access
221
+ if r1
222
+ r0 = r1
223
+ r0.extend(Filter)
224
+ else
225
+ r2 = _nt_boolean_filter
226
+ if r2
227
+ r0 = r2
228
+ r0.extend(Filter)
229
+ else
230
+ r3 = _nt_map_filter
231
+ if r3
232
+ r0 = r3
233
+ r0.extend(Filter)
234
+ else
235
+ r4 = _nt_sort_filter
236
+ if r4
237
+ r0 = r4
238
+ r0.extend(Filter)
239
+ else
240
+ self.index = i0
241
+ r0 = nil
242
+ end
243
+ end
244
+ end
245
+ end
246
+
247
+ node_cache[:filter][start_index] = r0
248
+
249
+ return r0
250
+ end
251
+
252
+ module FieldAccess0
253
+ end
254
+
255
+ module FieldAccess1
256
+ end
257
+
258
+ def _nt_field_access
259
+ start_index = index
260
+ if node_cache[:field_access].has_key?(index)
261
+ cached = node_cache[:field_access][index]
262
+ @index = cached.interval.end if cached
263
+ return cached
264
+ end
265
+
266
+ i0 = index
267
+ i1, s1 = index, []
268
+ if input.index(".", index) == index
269
+ r2 = (SyntaxNode).new(input, index...(index + 1))
270
+ @index += 1
271
+ else
272
+ terminal_parse_failure(".")
273
+ r2 = nil
274
+ end
275
+ s1 << r2
276
+ if r2
277
+ i3 = index
278
+ r4 = _nt_symbol
279
+ if r4
280
+ r3 = r4
281
+ else
282
+ r5 = _nt_all
283
+ if r5
284
+ r3 = r5
285
+ else
286
+ self.index = i3
287
+ r3 = nil
288
+ end
289
+ end
290
+ s1 << r3
291
+ end
292
+ if s1.last
293
+ r1 = (SyntaxNode).new(input, i1...index, s1)
294
+ r1.extend(FieldAccess0)
295
+ else
296
+ self.index = i1
297
+ r1 = nil
298
+ end
299
+ if r1
300
+ r0 = r1
301
+ r0.extend(FieldAccess)
302
+ else
303
+ i6, s6 = index, []
304
+ if input.index("[", index) == index
305
+ r7 = (SyntaxNode).new(input, index...(index + 1))
306
+ @index += 1
307
+ else
308
+ terminal_parse_failure("[")
309
+ r7 = nil
310
+ end
311
+ s6 << r7
312
+ if r7
313
+ i8 = index
314
+ r9 = _nt_field_access_expression
315
+ if r9
316
+ r8 = r9
317
+ else
318
+ r10 = _nt_all
319
+ if r10
320
+ r8 = r10
321
+ else
322
+ self.index = i8
323
+ r8 = nil
324
+ end
325
+ end
326
+ s6 << r8
327
+ if r8
328
+ if input.index("]", index) == index
329
+ r11 = (SyntaxNode).new(input, index...(index + 1))
330
+ @index += 1
331
+ else
332
+ terminal_parse_failure("]")
333
+ r11 = nil
334
+ end
335
+ s6 << r11
336
+ end
337
+ end
338
+ if s6.last
339
+ r6 = (SyntaxNode).new(input, i6...index, s6)
340
+ r6.extend(FieldAccess1)
341
+ else
342
+ self.index = i6
343
+ r6 = nil
344
+ end
345
+ if r6
346
+ r0 = r6
347
+ r0.extend(FieldAccess)
348
+ else
349
+ self.index = i0
350
+ r0 = nil
351
+ end
352
+ end
353
+
354
+ node_cache[:field_access][start_index] = r0
355
+
356
+ return r0
357
+ end
358
+
359
+ module FieldAccessExpression0
360
+ def expression
361
+ elements[1]
362
+ end
363
+ end
364
+
365
+ module FieldAccessExpression1
366
+ def first
367
+ elements[0]
368
+ end
369
+
370
+ def others
371
+ elements[1]
372
+ end
373
+ end
374
+
375
+ def _nt_field_access_expression
376
+ start_index = index
377
+ if node_cache[:field_access_expression].has_key?(index)
378
+ cached = node_cache[:field_access_expression][index]
379
+ @index = cached.interval.end if cached
380
+ return cached
381
+ end
382
+
383
+ i0, s0 = index, []
384
+ r1 = _nt_expression
385
+ s0 << r1
386
+ if r1
387
+ s2, i2 = [], index
388
+ loop do
389
+ i3, s3 = index, []
390
+ if input.index(",", index) == index
391
+ r4 = (SyntaxNode).new(input, index...(index + 1))
392
+ @index += 1
393
+ else
394
+ terminal_parse_failure(",")
395
+ r4 = nil
396
+ end
397
+ s3 << r4
398
+ if r4
399
+ r5 = _nt_expression
400
+ s3 << r5
401
+ end
402
+ if s3.last
403
+ r3 = (SyntaxNode).new(input, i3...index, s3)
404
+ r3.extend(FieldAccessExpression0)
405
+ else
406
+ self.index = i3
407
+ r3 = nil
408
+ end
409
+ if r3
410
+ s2 << r3
411
+ else
412
+ break
413
+ end
414
+ end
415
+ r2 = SyntaxNode.new(input, i2...index, s2)
416
+ s0 << r2
417
+ end
418
+ if s0.last
419
+ r0 = (FieldAccessExpression).new(input, i0...index, s0)
420
+ r0.extend(FieldAccessExpression1)
421
+ else
422
+ self.index = i0
423
+ r0 = nil
424
+ end
425
+
426
+ node_cache[:field_access_expression][start_index] = r0
427
+
428
+ return r0
429
+ end
430
+
431
+ def _nt_all
432
+ start_index = index
433
+ if node_cache[:all].has_key?(index)
434
+ cached = node_cache[:all][index]
435
+ @index = cached.interval.end if cached
436
+ return cached
437
+ end
438
+
439
+ if input.index("*", index) == index
440
+ r0 = (AllFilter).new(input, index...(index + 1))
441
+ @index += 1
442
+ else
443
+ terminal_parse_failure("*")
444
+ r0 = nil
445
+ end
446
+
447
+ node_cache[:all][start_index] = r0
448
+
449
+ return r0
450
+ end
451
+
452
+ module BooleanFilter0
453
+ def boolean_expression
454
+ elements[1]
455
+ end
456
+
457
+ end
458
+
459
+ def _nt_boolean_filter
460
+ start_index = index
461
+ if node_cache[:boolean_filter].has_key?(index)
462
+ cached = node_cache[:boolean_filter][index]
463
+ @index = cached.interval.end if cached
464
+ return cached
465
+ end
466
+
467
+ i0, s0 = index, []
468
+ if input.index("[?", index) == index
469
+ r1 = (SyntaxNode).new(input, index...(index + 2))
470
+ @index += 2
471
+ else
472
+ terminal_parse_failure("[?")
473
+ r1 = nil
474
+ end
475
+ s0 << r1
476
+ if r1
477
+ r2 = _nt_boolean_expression
478
+ s0 << r2
479
+ if r2
480
+ if input.index("]", index) == index
481
+ r3 = (SyntaxNode).new(input, index...(index + 1))
482
+ @index += 1
483
+ else
484
+ terminal_parse_failure("]")
485
+ r3 = nil
486
+ end
487
+ s0 << r3
488
+ end
489
+ end
490
+ if s0.last
491
+ r0 = (BooleanFilter).new(input, i0...index, s0)
492
+ r0.extend(BooleanFilter0)
493
+ else
494
+ self.index = i0
495
+ r0 = nil
496
+ end
497
+
498
+ node_cache[:boolean_filter][start_index] = r0
499
+
500
+ return r0
501
+ end
502
+
503
+ module MapFilter0
504
+ def expression
505
+ elements[1]
506
+ end
507
+
508
+ end
509
+
510
+ def _nt_map_filter
511
+ start_index = index
512
+ if node_cache[:map_filter].has_key?(index)
513
+ cached = node_cache[:map_filter][index]
514
+ @index = cached.interval.end if cached
515
+ return cached
516
+ end
517
+
518
+ i0, s0 = index, []
519
+ if input.index("[=", index) == index
520
+ r1 = (SyntaxNode).new(input, index...(index + 2))
521
+ @index += 2
522
+ else
523
+ terminal_parse_failure("[=")
524
+ r1 = nil
525
+ end
526
+ s0 << r1
527
+ if r1
528
+ r2 = _nt_expression
529
+ s0 << r2
530
+ if r2
531
+ if input.index("]", index) == index
532
+ r3 = (SyntaxNode).new(input, index...(index + 1))
533
+ @index += 1
534
+ else
535
+ terminal_parse_failure("]")
536
+ r3 = nil
537
+ end
538
+ s0 << r3
539
+ end
540
+ end
541
+ if s0.last
542
+ r0 = (MapFilter).new(input, i0...index, s0)
543
+ r0.extend(MapFilter0)
544
+ else
545
+ self.index = i0
546
+ r0 = nil
547
+ end
548
+
549
+ node_cache[:map_filter][start_index] = r0
550
+
551
+ return r0
552
+ end
553
+
554
+ module SortFilter0
555
+ def sorter
556
+ elements[1]
557
+ end
558
+
559
+ def expression
560
+ elements[2]
561
+ end
562
+
563
+ end
564
+
565
+ def _nt_sort_filter
566
+ start_index = index
567
+ if node_cache[:sort_filter].has_key?(index)
568
+ cached = node_cache[:sort_filter][index]
569
+ @index = cached.interval.end if cached
570
+ return cached
571
+ end
572
+
573
+ i0, s0 = index, []
574
+ if input.index("[", index) == index
575
+ r1 = (SyntaxNode).new(input, index...(index + 1))
576
+ @index += 1
577
+ else
578
+ terminal_parse_failure("[")
579
+ r1 = nil
580
+ end
581
+ s0 << r1
582
+ if r1
583
+ r2 = _nt_sorter
584
+ s0 << r2
585
+ if r2
586
+ r3 = _nt_expression
587
+ s0 << r3
588
+ if r3
589
+ if input.index("]", index) == index
590
+ r4 = (SyntaxNode).new(input, index...(index + 1))
591
+ @index += 1
592
+ else
593
+ terminal_parse_failure("]")
594
+ r4 = nil
595
+ end
596
+ s0 << r4
597
+ end
598
+ end
599
+ end
600
+ if s0.last
601
+ r0 = (SortFilter).new(input, i0...index, s0)
602
+ r0.extend(SortFilter0)
603
+ else
604
+ self.index = i0
605
+ r0 = nil
606
+ end
607
+
608
+ node_cache[:sort_filter][start_index] = r0
609
+
610
+ return r0
611
+ end
612
+
613
+ module Sorter0
614
+ def space
615
+ elements[0]
616
+ end
617
+
618
+ def space
619
+ elements[2]
620
+ end
621
+ end
622
+
623
+ def _nt_sorter
624
+ start_index = index
625
+ if node_cache[:sorter].has_key?(index)
626
+ cached = node_cache[:sorter][index]
627
+ @index = cached.interval.end if cached
628
+ return cached
629
+ end
630
+
631
+ i0, s0 = index, []
632
+ r1 = _nt_space
633
+ s0 << r1
634
+ if r1
635
+ i2 = index
636
+ if input.index("/", index) == index
637
+ r3 = (SyntaxNode).new(input, index...(index + 1))
638
+ @index += 1
639
+ else
640
+ terminal_parse_failure("/")
641
+ r3 = nil
642
+ end
643
+ if r3
644
+ r2 = r3
645
+ else
646
+ if input.index("\\", index) == index
647
+ r4 = (SyntaxNode).new(input, index...(index + 1))
648
+ @index += 1
649
+ else
650
+ terminal_parse_failure("\\")
651
+ r4 = nil
652
+ end
653
+ if r4
654
+ r2 = r4
655
+ else
656
+ self.index = i2
657
+ r2 = nil
658
+ end
659
+ end
660
+ s0 << r2
661
+ if r2
662
+ r5 = _nt_space
663
+ s0 << r5
664
+ end
665
+ end
666
+ if s0.last
667
+ r0 = (Sorter).new(input, i0...index, s0)
668
+ r0.extend(Sorter0)
669
+ else
670
+ self.index = i0
671
+ r0 = nil
672
+ end
673
+
674
+ node_cache[:sorter][start_index] = r0
675
+
676
+ return r0
677
+ end
678
+
679
+ def _nt_boolean_expression
680
+ start_index = index
681
+ if node_cache[:boolean_expression].has_key?(index)
682
+ cached = node_cache[:boolean_expression][index]
683
+ @index = cached.interval.end if cached
684
+ return cached
685
+ end
686
+
687
+ i0 = index
688
+ r1 = _nt_or_expression
689
+ if r1
690
+ r0 = r1
691
+ else
692
+ r2 = _nt_and_expression
693
+ if r2
694
+ r0 = r2
695
+ else
696
+ r3 = _nt_boolean_atom
697
+ if r3
698
+ r0 = r3
699
+ else
700
+ self.index = i0
701
+ r0 = nil
702
+ end
703
+ end
704
+ end
705
+
706
+ node_cache[:boolean_expression][start_index] = r0
707
+
708
+ return r0
709
+ end
710
+
711
+ module OrExpression0
712
+ def first
713
+ elements[0]
714
+ end
715
+
716
+ def second
717
+ elements[2]
718
+ end
719
+ end
720
+
721
+ def _nt_or_expression
722
+ start_index = index
723
+ if node_cache[:or_expression].has_key?(index)
724
+ cached = node_cache[:or_expression][index]
725
+ @index = cached.interval.end if cached
726
+ return cached
727
+ end
728
+
729
+ i0 = index
730
+ i1, s1 = index, []
731
+ r2 = _nt_and_expression
732
+ s1 << r2
733
+ if r2
734
+ if input.index("|", index) == index
735
+ r3 = (SyntaxNode).new(input, index...(index + 1))
736
+ @index += 1
737
+ else
738
+ terminal_parse_failure("|")
739
+ r3 = nil
740
+ end
741
+ s1 << r3
742
+ if r3
743
+ r4 = _nt_or_expression
744
+ s1 << r4
745
+ end
746
+ end
747
+ if s1.last
748
+ r1 = (Or).new(input, i1...index, s1)
749
+ r1.extend(OrExpression0)
750
+ else
751
+ self.index = i1
752
+ r1 = nil
753
+ end
754
+ if r1
755
+ r0 = r1
756
+ else
757
+ r5 = _nt_and_expression
758
+ if r5
759
+ r0 = r5
760
+ else
761
+ self.index = i0
762
+ r0 = nil
763
+ end
764
+ end
765
+
766
+ node_cache[:or_expression][start_index] = r0
767
+
768
+ return r0
769
+ end
770
+
771
+ module AndExpression0
772
+ def first
773
+ elements[0]
774
+ end
775
+
776
+ def second
777
+ elements[2]
778
+ end
779
+ end
780
+
781
+ def _nt_and_expression
782
+ start_index = index
783
+ if node_cache[:and_expression].has_key?(index)
784
+ cached = node_cache[:and_expression][index]
785
+ @index = cached.interval.end if cached
786
+ return cached
787
+ end
788
+
789
+ i0 = index
790
+ i1, s1 = index, []
791
+ r2 = _nt_boolean_atom
792
+ s1 << r2
793
+ if r2
794
+ if input.index("&", index) == index
795
+ r3 = (SyntaxNode).new(input, index...(index + 1))
796
+ @index += 1
797
+ else
798
+ terminal_parse_failure("&")
799
+ r3 = nil
800
+ end
801
+ s1 << r3
802
+ if r3
803
+ r4 = _nt_and_expression
804
+ s1 << r4
805
+ end
806
+ end
807
+ if s1.last
808
+ r1 = (And).new(input, i1...index, s1)
809
+ r1.extend(AndExpression0)
810
+ else
811
+ self.index = i1
812
+ r1 = nil
813
+ end
814
+ if r1
815
+ r0 = r1
816
+ else
817
+ r5 = _nt_boolean_atom
818
+ if r5
819
+ r0 = r5
820
+ else
821
+ self.index = i0
822
+ r0 = nil
823
+ end
824
+ end
825
+
826
+ node_cache[:and_expression][start_index] = r0
827
+
828
+ return r0
829
+ end
830
+
831
+ module BooleanAtom0
832
+ def boolean_expression
833
+ elements[1]
834
+ end
835
+
836
+ end
837
+
838
+ module BooleanAtom1
839
+ def first
840
+ elements[0]
841
+ end
842
+
843
+ def comparator
844
+ elements[1]
845
+ end
846
+
847
+ def second
848
+ elements[2]
849
+ end
850
+ end
851
+
852
+ module BooleanAtom2
853
+ def space
854
+ elements[0]
855
+ end
856
+
857
+ def space
858
+ elements[2]
859
+ end
860
+ end
861
+
862
+ def _nt_boolean_atom
863
+ start_index = index
864
+ if node_cache[:boolean_atom].has_key?(index)
865
+ cached = node_cache[:boolean_atom][index]
866
+ @index = cached.interval.end if cached
867
+ return cached
868
+ end
869
+
870
+ i0, s0 = index, []
871
+ r1 = _nt_space
872
+ s0 << r1
873
+ if r1
874
+ i2 = index
875
+ i3, s3 = index, []
876
+ if input.index("(", index) == index
877
+ r4 = (SyntaxNode).new(input, index...(index + 1))
878
+ @index += 1
879
+ else
880
+ terminal_parse_failure("(")
881
+ r4 = nil
882
+ end
883
+ s3 << r4
884
+ if r4
885
+ r5 = _nt_boolean_expression
886
+ s3 << r5
887
+ if r5
888
+ if input.index(")", index) == index
889
+ r6 = (SyntaxNode).new(input, index...(index + 1))
890
+ @index += 1
891
+ else
892
+ terminal_parse_failure(")")
893
+ r6 = nil
894
+ end
895
+ s3 << r6
896
+ end
897
+ end
898
+ if s3.last
899
+ r3 = (SyntaxNode).new(input, i3...index, s3)
900
+ r3.extend(BooleanAtom0)
901
+ else
902
+ self.index = i3
903
+ r3 = nil
904
+ end
905
+ if r3
906
+ r2 = r3
907
+ else
908
+ i7, s7 = index, []
909
+ r8 = _nt_expression
910
+ s7 << r8
911
+ if r8
912
+ r9 = _nt_comparator
913
+ s7 << r9
914
+ if r9
915
+ r10 = _nt_expression
916
+ s7 << r10
917
+ end
918
+ end
919
+ if s7.last
920
+ r7 = (SyntaxNode).new(input, i7...index, s7)
921
+ r7.extend(BooleanAtom1)
922
+ else
923
+ self.index = i7
924
+ r7 = nil
925
+ end
926
+ if r7
927
+ r2 = r7
928
+ else
929
+ self.index = i2
930
+ r2 = nil
931
+ end
932
+ end
933
+ s0 << r2
934
+ if r2
935
+ r11 = _nt_space
936
+ s0 << r11
937
+ end
938
+ end
939
+ if s0.last
940
+ r0 = (BooleanAtom).new(input, i0...index, s0)
941
+ r0.extend(BooleanAtom2)
942
+ else
943
+ self.index = i0
944
+ r0 = nil
945
+ end
946
+
947
+ node_cache[:boolean_atom][start_index] = r0
948
+
949
+ return r0
950
+ end
951
+
952
+ module Additive0
953
+ def first
954
+ elements[0]
955
+ end
956
+
957
+ def operator
958
+ elements[1]
959
+ end
960
+
961
+ def second
962
+ elements[2]
963
+ end
964
+ end
965
+
966
+ def _nt_additive
967
+ start_index = index
968
+ if node_cache[:additive].has_key?(index)
969
+ cached = node_cache[:additive][index]
970
+ @index = cached.interval.end if cached
971
+ return cached
972
+ end
973
+
974
+ i0 = index
975
+ i1, s1 = index, []
976
+ r2 = _nt_multiplicative
977
+ s1 << r2
978
+ if r2
979
+ i3 = index
980
+ r4 = _nt_add
981
+ if r4
982
+ r3 = r4
983
+ else
984
+ r5 = _nt_subtract
985
+ if r5
986
+ r3 = r5
987
+ else
988
+ self.index = i3
989
+ r3 = nil
990
+ end
991
+ end
992
+ s1 << r3
993
+ if r3
994
+ r6 = _nt_additive
995
+ s1 << r6
996
+ end
997
+ end
998
+ if s1.last
999
+ r1 = (Additive).new(input, i1...index, s1)
1000
+ r1.extend(Additive0)
1001
+ else
1002
+ self.index = i1
1003
+ r1 = nil
1004
+ end
1005
+ if r1
1006
+ r0 = r1
1007
+ else
1008
+ r7 = _nt_multiplicative
1009
+ if r7
1010
+ r0 = r7
1011
+ else
1012
+ self.index = i0
1013
+ r0 = nil
1014
+ end
1015
+ end
1016
+
1017
+ node_cache[:additive][start_index] = r0
1018
+
1019
+ return r0
1020
+ end
1021
+
1022
+ module Multiplicative0
1023
+ def first
1024
+ elements[0]
1025
+ end
1026
+
1027
+ def operator
1028
+ elements[1]
1029
+ end
1030
+
1031
+ def second
1032
+ elements[2]
1033
+ end
1034
+ end
1035
+
1036
+ def _nt_multiplicative
1037
+ start_index = index
1038
+ if node_cache[:multiplicative].has_key?(index)
1039
+ cached = node_cache[:multiplicative][index]
1040
+ @index = cached.interval.end if cached
1041
+ return cached
1042
+ end
1043
+
1044
+ i0 = index
1045
+ i1, s1 = index, []
1046
+ r2 = _nt_atom
1047
+ s1 << r2
1048
+ if r2
1049
+ i3 = index
1050
+ r4 = _nt_times
1051
+ if r4
1052
+ r3 = r4
1053
+ else
1054
+ r5 = _nt_divide
1055
+ if r5
1056
+ r3 = r5
1057
+ else
1058
+ self.index = i3
1059
+ r3 = nil
1060
+ end
1061
+ end
1062
+ s1 << r3
1063
+ if r3
1064
+ r6 = _nt_multiplicative
1065
+ s1 << r6
1066
+ end
1067
+ end
1068
+ if s1.last
1069
+ r1 = (Multiplicative).new(input, i1...index, s1)
1070
+ r1.extend(Multiplicative0)
1071
+ else
1072
+ self.index = i1
1073
+ r1 = nil
1074
+ end
1075
+ if r1
1076
+ r0 = r1
1077
+ else
1078
+ r7 = _nt_atom
1079
+ if r7
1080
+ r0 = r7
1081
+ else
1082
+ self.index = i0
1083
+ r0 = nil
1084
+ end
1085
+ end
1086
+
1087
+ node_cache[:multiplicative][start_index] = r0
1088
+
1089
+ return r0
1090
+ end
1091
+
1092
+ module Atom0
1093
+ def expression
1094
+ elements[1]
1095
+ end
1096
+
1097
+ end
1098
+
1099
+ module Atom1
1100
+ def space
1101
+ elements[0]
1102
+ end
1103
+
1104
+ def space
1105
+ elements[2]
1106
+ end
1107
+ end
1108
+
1109
+ def _nt_atom
1110
+ start_index = index
1111
+ if node_cache[:atom].has_key?(index)
1112
+ cached = node_cache[:atom][index]
1113
+ @index = cached.interval.end if cached
1114
+ return cached
1115
+ end
1116
+
1117
+ i0, s0 = index, []
1118
+ r1 = _nt_space
1119
+ s0 << r1
1120
+ if r1
1121
+ i2 = index
1122
+ i3, s3 = index, []
1123
+ if input.index("(", index) == index
1124
+ r4 = (SyntaxNode).new(input, index...(index + 1))
1125
+ @index += 1
1126
+ else
1127
+ terminal_parse_failure("(")
1128
+ r4 = nil
1129
+ end
1130
+ s3 << r4
1131
+ if r4
1132
+ r5 = _nt_expression
1133
+ s3 << r5
1134
+ if r5
1135
+ if input.index(")", index) == index
1136
+ r6 = (SyntaxNode).new(input, index...(index + 1))
1137
+ @index += 1
1138
+ else
1139
+ terminal_parse_failure(")")
1140
+ r6 = nil
1141
+ end
1142
+ s3 << r6
1143
+ end
1144
+ end
1145
+ if s3.last
1146
+ r3 = (SyntaxNode).new(input, i3...index, s3)
1147
+ r3.extend(Atom0)
1148
+ else
1149
+ self.index = i3
1150
+ r3 = nil
1151
+ end
1152
+ if r3
1153
+ r2 = r3
1154
+ else
1155
+ r7 = _nt_query
1156
+ if r7
1157
+ r2 = r7
1158
+ else
1159
+ r8 = _nt_number
1160
+ if r8
1161
+ r2 = r8
1162
+ else
1163
+ r9 = _nt_string
1164
+ if r9
1165
+ r2 = r9
1166
+ else
1167
+ r10 = _nt_boolean
1168
+ if r10
1169
+ r2 = r10
1170
+ else
1171
+ r11 = _nt_null
1172
+ if r11
1173
+ r2 = r11
1174
+ else
1175
+ self.index = i2
1176
+ r2 = nil
1177
+ end
1178
+ end
1179
+ end
1180
+ end
1181
+ end
1182
+ end
1183
+ s0 << r2
1184
+ if r2
1185
+ r12 = _nt_space
1186
+ s0 << r12
1187
+ end
1188
+ end
1189
+ if s0.last
1190
+ r0 = (Atom).new(input, i0...index, s0)
1191
+ r0.extend(Atom1)
1192
+ else
1193
+ self.index = i0
1194
+ r0 = nil
1195
+ end
1196
+
1197
+ node_cache[:atom][start_index] = r0
1198
+
1199
+ return r0
1200
+ end
1201
+
1202
+ def _nt_times
1203
+ start_index = index
1204
+ if node_cache[:times].has_key?(index)
1205
+ cached = node_cache[:times][index]
1206
+ @index = cached.interval.end if cached
1207
+ return cached
1208
+ end
1209
+
1210
+ if input.index("*", index) == index
1211
+ r0 = (Multiplication).new(input, index...(index + 1))
1212
+ @index += 1
1213
+ else
1214
+ terminal_parse_failure("*")
1215
+ r0 = nil
1216
+ end
1217
+
1218
+ node_cache[:times][start_index] = r0
1219
+
1220
+ return r0
1221
+ end
1222
+
1223
+ def _nt_divide
1224
+ start_index = index
1225
+ if node_cache[:divide].has_key?(index)
1226
+ cached = node_cache[:divide][index]
1227
+ @index = cached.interval.end if cached
1228
+ return cached
1229
+ end
1230
+
1231
+ if input.index("/", index) == index
1232
+ r0 = (Division).new(input, index...(index + 1))
1233
+ @index += 1
1234
+ else
1235
+ terminal_parse_failure("/")
1236
+ r0 = nil
1237
+ end
1238
+
1239
+ node_cache[:divide][start_index] = r0
1240
+
1241
+ return r0
1242
+ end
1243
+
1244
+ def _nt_add
1245
+ start_index = index
1246
+ if node_cache[:add].has_key?(index)
1247
+ cached = node_cache[:add][index]
1248
+ @index = cached.interval.end if cached
1249
+ return cached
1250
+ end
1251
+
1252
+ if input.index("+", index) == index
1253
+ r0 = (Addition).new(input, index...(index + 1))
1254
+ @index += 1
1255
+ else
1256
+ terminal_parse_failure("+")
1257
+ r0 = nil
1258
+ end
1259
+
1260
+ node_cache[:add][start_index] = r0
1261
+
1262
+ return r0
1263
+ end
1264
+
1265
+ def _nt_subtract
1266
+ start_index = index
1267
+ if node_cache[:subtract].has_key?(index)
1268
+ cached = node_cache[:subtract][index]
1269
+ @index = cached.interval.end if cached
1270
+ return cached
1271
+ end
1272
+
1273
+ if input.index("-", index) == index
1274
+ r0 = (Subtraction).new(input, index...(index + 1))
1275
+ @index += 1
1276
+ else
1277
+ terminal_parse_failure("-")
1278
+ r0 = nil
1279
+ end
1280
+
1281
+ node_cache[:subtract][start_index] = r0
1282
+
1283
+ return r0
1284
+ end
1285
+
1286
+ def _nt_comparator
1287
+ start_index = index
1288
+ if node_cache[:comparator].has_key?(index)
1289
+ cached = node_cache[:comparator][index]
1290
+ @index = cached.interval.end if cached
1291
+ return cached
1292
+ end
1293
+
1294
+ i0 = index
1295
+ r1 = _nt_not_equal
1296
+ if r1
1297
+ r0 = r1
1298
+ r0.extend(Comparator)
1299
+ else
1300
+ r2 = _nt_lte
1301
+ if r2
1302
+ r0 = r2
1303
+ r0.extend(Comparator)
1304
+ else
1305
+ r3 = _nt_gte
1306
+ if r3
1307
+ r0 = r3
1308
+ r0.extend(Comparator)
1309
+ else
1310
+ r4 = _nt_equal
1311
+ if r4
1312
+ r0 = r4
1313
+ r0.extend(Comparator)
1314
+ else
1315
+ r5 = _nt_lt
1316
+ if r5
1317
+ r0 = r5
1318
+ r0.extend(Comparator)
1319
+ else
1320
+ r6 = _nt_gt
1321
+ if r6
1322
+ r0 = r6
1323
+ r0.extend(Comparator)
1324
+ else
1325
+ self.index = i0
1326
+ r0 = nil
1327
+ end
1328
+ end
1329
+ end
1330
+ end
1331
+ end
1332
+ end
1333
+
1334
+ node_cache[:comparator][start_index] = r0
1335
+
1336
+ return r0
1337
+ end
1338
+
1339
+ def _nt_equal
1340
+ start_index = index
1341
+ if node_cache[:equal].has_key?(index)
1342
+ cached = node_cache[:equal][index]
1343
+ @index = cached.interval.end if cached
1344
+ return cached
1345
+ end
1346
+
1347
+ if input.index("=", index) == index
1348
+ r0 = (Equal).new(input, index...(index + 1))
1349
+ @index += 1
1350
+ else
1351
+ terminal_parse_failure("=")
1352
+ r0 = nil
1353
+ end
1354
+
1355
+ node_cache[:equal][start_index] = r0
1356
+
1357
+ return r0
1358
+ end
1359
+
1360
+ def _nt_not_equal
1361
+ start_index = index
1362
+ if node_cache[:not_equal].has_key?(index)
1363
+ cached = node_cache[:not_equal][index]
1364
+ @index = cached.interval.end if cached
1365
+ return cached
1366
+ end
1367
+
1368
+ if input.index("!=", index) == index
1369
+ r0 = (NotEqual).new(input, index...(index + 2))
1370
+ @index += 2
1371
+ else
1372
+ terminal_parse_failure("!=")
1373
+ r0 = nil
1374
+ end
1375
+
1376
+ node_cache[:not_equal][start_index] = r0
1377
+
1378
+ return r0
1379
+ end
1380
+
1381
+ def _nt_lt
1382
+ start_index = index
1383
+ if node_cache[:lt].has_key?(index)
1384
+ cached = node_cache[:lt][index]
1385
+ @index = cached.interval.end if cached
1386
+ return cached
1387
+ end
1388
+
1389
+ if input.index("<", index) == index
1390
+ r0 = (LessThan).new(input, index...(index + 1))
1391
+ @index += 1
1392
+ else
1393
+ terminal_parse_failure("<")
1394
+ r0 = nil
1395
+ end
1396
+
1397
+ node_cache[:lt][start_index] = r0
1398
+
1399
+ return r0
1400
+ end
1401
+
1402
+ def _nt_lte
1403
+ start_index = index
1404
+ if node_cache[:lte].has_key?(index)
1405
+ cached = node_cache[:lte][index]
1406
+ @index = cached.interval.end if cached
1407
+ return cached
1408
+ end
1409
+
1410
+ if input.index("<=", index) == index
1411
+ r0 = (LessThanOrEqual).new(input, index...(index + 2))
1412
+ @index += 2
1413
+ else
1414
+ terminal_parse_failure("<=")
1415
+ r0 = nil
1416
+ end
1417
+
1418
+ node_cache[:lte][start_index] = r0
1419
+
1420
+ return r0
1421
+ end
1422
+
1423
+ def _nt_gt
1424
+ start_index = index
1425
+ if node_cache[:gt].has_key?(index)
1426
+ cached = node_cache[:gt][index]
1427
+ @index = cached.interval.end if cached
1428
+ return cached
1429
+ end
1430
+
1431
+ if input.index(">", index) == index
1432
+ r0 = (GreaterThan).new(input, index...(index + 1))
1433
+ @index += 1
1434
+ else
1435
+ terminal_parse_failure(">")
1436
+ r0 = nil
1437
+ end
1438
+
1439
+ node_cache[:gt][start_index] = r0
1440
+
1441
+ return r0
1442
+ end
1443
+
1444
+ def _nt_gte
1445
+ start_index = index
1446
+ if node_cache[:gte].has_key?(index)
1447
+ cached = node_cache[:gte][index]
1448
+ @index = cached.interval.end if cached
1449
+ return cached
1450
+ end
1451
+
1452
+ if input.index(">=", index) == index
1453
+ r0 = (GreaterThanOrEqual).new(input, index...(index + 2))
1454
+ @index += 2
1455
+ else
1456
+ terminal_parse_failure(">=")
1457
+ r0 = nil
1458
+ end
1459
+
1460
+ node_cache[:gte][start_index] = r0
1461
+
1462
+ return r0
1463
+ end
1464
+
1465
+ module String0
1466
+ def hex
1467
+ elements[1]
1468
+ end
1469
+
1470
+ def hex
1471
+ elements[2]
1472
+ end
1473
+
1474
+ def hex
1475
+ elements[3]
1476
+ end
1477
+
1478
+ def hex
1479
+ elements[4]
1480
+ end
1481
+ end
1482
+
1483
+ module String1
1484
+ end
1485
+
1486
+ module String2
1487
+ end
1488
+
1489
+ def _nt_string
1490
+ start_index = index
1491
+ if node_cache[:string].has_key?(index)
1492
+ cached = node_cache[:string][index]
1493
+ @index = cached.interval.end if cached
1494
+ return cached
1495
+ end
1496
+
1497
+ i0, s0 = index, []
1498
+ if input.index("'", index) == index
1499
+ r1 = (SyntaxNode).new(input, index...(index + 1))
1500
+ @index += 1
1501
+ else
1502
+ terminal_parse_failure("'")
1503
+ r1 = nil
1504
+ end
1505
+ s0 << r1
1506
+ if r1
1507
+ s2, i2 = [], index
1508
+ loop do
1509
+ i3 = index
1510
+ i4, s4 = index, []
1511
+ if input.index('\\', index) == index
1512
+ r5 = (SyntaxNode).new(input, index...(index + 1))
1513
+ @index += 1
1514
+ else
1515
+ terminal_parse_failure('\\')
1516
+ r5 = nil
1517
+ end
1518
+ s4 << r5
1519
+ if r5
1520
+ i6 = index
1521
+ if input.index("'", index) == index
1522
+ r7 = (SyntaxNode).new(input, index...(index + 1))
1523
+ @index += 1
1524
+ else
1525
+ terminal_parse_failure("'")
1526
+ r7 = nil
1527
+ end
1528
+ if r7
1529
+ r6 = r7
1530
+ else
1531
+ if input.index('\\', index) == index
1532
+ r8 = (SyntaxNode).new(input, index...(index + 1))
1533
+ @index += 1
1534
+ else
1535
+ terminal_parse_failure('\\')
1536
+ r8 = nil
1537
+ end
1538
+ if r8
1539
+ r6 = r8
1540
+ else
1541
+ if input.index('/', index) == index
1542
+ r9 = (SyntaxNode).new(input, index...(index + 1))
1543
+ @index += 1
1544
+ else
1545
+ terminal_parse_failure('/')
1546
+ r9 = nil
1547
+ end
1548
+ if r9
1549
+ r6 = r9
1550
+ else
1551
+ if input.index('b', index) == index
1552
+ r10 = (SyntaxNode).new(input, index...(index + 1))
1553
+ @index += 1
1554
+ else
1555
+ terminal_parse_failure('b')
1556
+ r10 = nil
1557
+ end
1558
+ if r10
1559
+ r6 = r10
1560
+ else
1561
+ if input.index('f', index) == index
1562
+ r11 = (SyntaxNode).new(input, index...(index + 1))
1563
+ @index += 1
1564
+ else
1565
+ terminal_parse_failure('f')
1566
+ r11 = nil
1567
+ end
1568
+ if r11
1569
+ r6 = r11
1570
+ else
1571
+ if input.index('n', index) == index
1572
+ r12 = (SyntaxNode).new(input, index...(index + 1))
1573
+ @index += 1
1574
+ else
1575
+ terminal_parse_failure('n')
1576
+ r12 = nil
1577
+ end
1578
+ if r12
1579
+ r6 = r12
1580
+ else
1581
+ if input.index('r', index) == index
1582
+ r13 = (SyntaxNode).new(input, index...(index + 1))
1583
+ @index += 1
1584
+ else
1585
+ terminal_parse_failure('r')
1586
+ r13 = nil
1587
+ end
1588
+ if r13
1589
+ r6 = r13
1590
+ else
1591
+ if input.index('t', index) == index
1592
+ r14 = (SyntaxNode).new(input, index...(index + 1))
1593
+ @index += 1
1594
+ else
1595
+ terminal_parse_failure('t')
1596
+ r14 = nil
1597
+ end
1598
+ if r14
1599
+ r6 = r14
1600
+ else
1601
+ i15, s15 = index, []
1602
+ if input.index('u', index) == index
1603
+ r16 = (SyntaxNode).new(input, index...(index + 1))
1604
+ @index += 1
1605
+ else
1606
+ terminal_parse_failure('u')
1607
+ r16 = nil
1608
+ end
1609
+ s15 << r16
1610
+ if r16
1611
+ r17 = _nt_hex
1612
+ s15 << r17
1613
+ if r17
1614
+ r18 = _nt_hex
1615
+ s15 << r18
1616
+ if r18
1617
+ r19 = _nt_hex
1618
+ s15 << r19
1619
+ if r19
1620
+ r20 = _nt_hex
1621
+ s15 << r20
1622
+ end
1623
+ end
1624
+ end
1625
+ end
1626
+ if s15.last
1627
+ r15 = (SyntaxNode).new(input, i15...index, s15)
1628
+ r15.extend(String0)
1629
+ else
1630
+ self.index = i15
1631
+ r15 = nil
1632
+ end
1633
+ if r15
1634
+ r6 = r15
1635
+ else
1636
+ self.index = i6
1637
+ r6 = nil
1638
+ end
1639
+ end
1640
+ end
1641
+ end
1642
+ end
1643
+ end
1644
+ end
1645
+ end
1646
+ end
1647
+ s4 << r6
1648
+ end
1649
+ if s4.last
1650
+ r4 = (SyntaxNode).new(input, i4...index, s4)
1651
+ r4.extend(String1)
1652
+ else
1653
+ self.index = i4
1654
+ r4 = nil
1655
+ end
1656
+ if r4
1657
+ r3 = r4
1658
+ else
1659
+ if input.index(Regexp.new('[^\\\'\\\\]'), index) == index
1660
+ r21 = (SyntaxNode).new(input, index...(index + 1))
1661
+ @index += 1
1662
+ else
1663
+ r21 = nil
1664
+ end
1665
+ if r21
1666
+ r3 = r21
1667
+ else
1668
+ self.index = i3
1669
+ r3 = nil
1670
+ end
1671
+ end
1672
+ if r3
1673
+ s2 << r3
1674
+ else
1675
+ break
1676
+ end
1677
+ end
1678
+ r2 = SyntaxNode.new(input, i2...index, s2)
1679
+ s0 << r2
1680
+ if r2
1681
+ if input.index("'", index) == index
1682
+ r22 = (SyntaxNode).new(input, index...(index + 1))
1683
+ @index += 1
1684
+ else
1685
+ terminal_parse_failure("'")
1686
+ r22 = nil
1687
+ end
1688
+ s0 << r22
1689
+ end
1690
+ end
1691
+ if s0.last
1692
+ r0 = (String).new(input, i0...index, s0)
1693
+ r0.extend(String2)
1694
+ else
1695
+ self.index = i0
1696
+ r0 = nil
1697
+ end
1698
+
1699
+ node_cache[:string][start_index] = r0
1700
+
1701
+ return r0
1702
+ end
1703
+
1704
+ module Number0
1705
+ end
1706
+
1707
+ module Number1
1708
+ end
1709
+
1710
+ module Number2
1711
+ end
1712
+
1713
+ module Number3
1714
+ end
1715
+
1716
+ def _nt_number
1717
+ start_index = index
1718
+ if node_cache[:number].has_key?(index)
1719
+ cached = node_cache[:number][index]
1720
+ @index = cached.interval.end if cached
1721
+ return cached
1722
+ end
1723
+
1724
+ i0, s0 = index, []
1725
+ if input.index("-", index) == index
1726
+ r2 = (SyntaxNode).new(input, index...(index + 1))
1727
+ @index += 1
1728
+ else
1729
+ terminal_parse_failure("-")
1730
+ r2 = nil
1731
+ end
1732
+ if r2
1733
+ r1 = r2
1734
+ else
1735
+ r1 = SyntaxNode.new(input, index...index)
1736
+ end
1737
+ s0 << r1
1738
+ if r1
1739
+ i3 = index
1740
+ if input.index("0", index) == index
1741
+ r4 = (SyntaxNode).new(input, index...(index + 1))
1742
+ @index += 1
1743
+ else
1744
+ terminal_parse_failure("0")
1745
+ r4 = nil
1746
+ end
1747
+ if r4
1748
+ r3 = r4
1749
+ else
1750
+ i5, s5 = index, []
1751
+ if input.index(Regexp.new('[1-9]'), index) == index
1752
+ r6 = (SyntaxNode).new(input, index...(index + 1))
1753
+ @index += 1
1754
+ else
1755
+ r6 = nil
1756
+ end
1757
+ s5 << r6
1758
+ if r6
1759
+ s7, i7 = [], index
1760
+ loop do
1761
+ r8 = _nt_digit
1762
+ if r8
1763
+ s7 << r8
1764
+ else
1765
+ break
1766
+ end
1767
+ end
1768
+ r7 = SyntaxNode.new(input, i7...index, s7)
1769
+ s5 << r7
1770
+ end
1771
+ if s5.last
1772
+ r5 = (SyntaxNode).new(input, i5...index, s5)
1773
+ r5.extend(Number0)
1774
+ else
1775
+ self.index = i5
1776
+ r5 = nil
1777
+ end
1778
+ if r5
1779
+ r3 = r5
1780
+ else
1781
+ self.index = i3
1782
+ r3 = nil
1783
+ end
1784
+ end
1785
+ s0 << r3
1786
+ if r3
1787
+ i10, s10 = index, []
1788
+ if input.index(".", index) == index
1789
+ r11 = (SyntaxNode).new(input, index...(index + 1))
1790
+ @index += 1
1791
+ else
1792
+ terminal_parse_failure(".")
1793
+ r11 = nil
1794
+ end
1795
+ s10 << r11
1796
+ if r11
1797
+ s12, i12 = [], index
1798
+ loop do
1799
+ r13 = _nt_digit
1800
+ if r13
1801
+ s12 << r13
1802
+ else
1803
+ break
1804
+ end
1805
+ end
1806
+ if s12.empty?
1807
+ self.index = i12
1808
+ r12 = nil
1809
+ else
1810
+ r12 = SyntaxNode.new(input, i12...index, s12)
1811
+ end
1812
+ s10 << r12
1813
+ end
1814
+ if s10.last
1815
+ r10 = (SyntaxNode).new(input, i10...index, s10)
1816
+ r10.extend(Number1)
1817
+ else
1818
+ self.index = i10
1819
+ r10 = nil
1820
+ end
1821
+ if r10
1822
+ r9 = r10
1823
+ else
1824
+ r9 = SyntaxNode.new(input, index...index)
1825
+ end
1826
+ s0 << r9
1827
+ if r9
1828
+ i15, s15 = index, []
1829
+ if input.index(Regexp.new('[eE]'), index) == index
1830
+ r16 = (SyntaxNode).new(input, index...(index + 1))
1831
+ @index += 1
1832
+ else
1833
+ r16 = nil
1834
+ end
1835
+ s15 << r16
1836
+ if r16
1837
+ if input.index(Regexp.new('[+-]'), index) == index
1838
+ r18 = (SyntaxNode).new(input, index...(index + 1))
1839
+ @index += 1
1840
+ else
1841
+ r18 = nil
1842
+ end
1843
+ if r18
1844
+ r17 = r18
1845
+ else
1846
+ r17 = SyntaxNode.new(input, index...index)
1847
+ end
1848
+ s15 << r17
1849
+ if r17
1850
+ s19, i19 = [], index
1851
+ loop do
1852
+ r20 = _nt_digit
1853
+ if r20
1854
+ s19 << r20
1855
+ else
1856
+ break
1857
+ end
1858
+ end
1859
+ if s19.empty?
1860
+ self.index = i19
1861
+ r19 = nil
1862
+ else
1863
+ r19 = SyntaxNode.new(input, i19...index, s19)
1864
+ end
1865
+ s15 << r19
1866
+ end
1867
+ end
1868
+ if s15.last
1869
+ r15 = (SyntaxNode).new(input, i15...index, s15)
1870
+ r15.extend(Number2)
1871
+ else
1872
+ self.index = i15
1873
+ r15 = nil
1874
+ end
1875
+ if r15
1876
+ r14 = r15
1877
+ else
1878
+ r14 = SyntaxNode.new(input, index...index)
1879
+ end
1880
+ s0 << r14
1881
+ end
1882
+ end
1883
+ end
1884
+ if s0.last
1885
+ r0 = (Number).new(input, i0...index, s0)
1886
+ r0.extend(Number3)
1887
+ else
1888
+ self.index = i0
1889
+ r0 = nil
1890
+ end
1891
+
1892
+ node_cache[:number][start_index] = r0
1893
+
1894
+ return r0
1895
+ end
1896
+
1897
+ def _nt_digit
1898
+ start_index = index
1899
+ if node_cache[:digit].has_key?(index)
1900
+ cached = node_cache[:digit][index]
1901
+ @index = cached.interval.end if cached
1902
+ return cached
1903
+ end
1904
+
1905
+ if input.index(Regexp.new('[0-9]'), index) == index
1906
+ r0 = (SyntaxNode).new(input, index...(index + 1))
1907
+ @index += 1
1908
+ else
1909
+ r0 = nil
1910
+ end
1911
+
1912
+ node_cache[:digit][start_index] = r0
1913
+
1914
+ return r0
1915
+ end
1916
+
1917
+ def _nt_boolean
1918
+ start_index = index
1919
+ if node_cache[:boolean].has_key?(index)
1920
+ cached = node_cache[:boolean][index]
1921
+ @index = cached.interval.end if cached
1922
+ return cached
1923
+ end
1924
+
1925
+ i0 = index
1926
+ r1 = _nt_true
1927
+ if r1
1928
+ r0 = r1
1929
+ r0.extend(Boolean)
1930
+ else
1931
+ r2 = _nt_false
1932
+ if r2
1933
+ r0 = r2
1934
+ r0.extend(Boolean)
1935
+ else
1936
+ self.index = i0
1937
+ r0 = nil
1938
+ end
1939
+ end
1940
+
1941
+ node_cache[:boolean][start_index] = r0
1942
+
1943
+ return r0
1944
+ end
1945
+
1946
+ def _nt_true
1947
+ start_index = index
1948
+ if node_cache[:true].has_key?(index)
1949
+ cached = node_cache[:true][index]
1950
+ @index = cached.interval.end if cached
1951
+ return cached
1952
+ end
1953
+
1954
+ if input.index("true", index) == index
1955
+ r0 = (True).new(input, index...(index + 4))
1956
+ @index += 4
1957
+ else
1958
+ terminal_parse_failure("true")
1959
+ r0 = nil
1960
+ end
1961
+
1962
+ node_cache[:true][start_index] = r0
1963
+
1964
+ return r0
1965
+ end
1966
+
1967
+ def _nt_false
1968
+ start_index = index
1969
+ if node_cache[:false].has_key?(index)
1970
+ cached = node_cache[:false][index]
1971
+ @index = cached.interval.end if cached
1972
+ return cached
1973
+ end
1974
+
1975
+ if input.index("false", index) == index
1976
+ r0 = (False).new(input, index...(index + 5))
1977
+ @index += 5
1978
+ else
1979
+ terminal_parse_failure("false")
1980
+ r0 = nil
1981
+ end
1982
+
1983
+ node_cache[:false][start_index] = r0
1984
+
1985
+ return r0
1986
+ end
1987
+
1988
+ def _nt_null
1989
+ start_index = index
1990
+ if node_cache[:null].has_key?(index)
1991
+ cached = node_cache[:null][index]
1992
+ @index = cached.interval.end if cached
1993
+ return cached
1994
+ end
1995
+
1996
+ if input.index("null", index) == index
1997
+ r0 = (Null).new(input, index...(index + 4))
1998
+ @index += 4
1999
+ else
2000
+ terminal_parse_failure("null")
2001
+ r0 = nil
2002
+ end
2003
+
2004
+ node_cache[:null][start_index] = r0
2005
+
2006
+ return r0
2007
+ end
2008
+
2009
+ def _nt_space
2010
+ start_index = index
2011
+ if node_cache[:space].has_key?(index)
2012
+ cached = node_cache[:space][index]
2013
+ @index = cached.interval.end if cached
2014
+ return cached
2015
+ end
2016
+
2017
+ s0, i0 = [], index
2018
+ loop do
2019
+ if input.index(" ", index) == index
2020
+ r1 = (SyntaxNode).new(input, index...(index + 1))
2021
+ @index += 1
2022
+ else
2023
+ terminal_parse_failure(" ")
2024
+ r1 = nil
2025
+ end
2026
+ if r1
2027
+ s0 << r1
2028
+ else
2029
+ break
2030
+ end
2031
+ end
2032
+ r0 = SyntaxNode.new(input, i0...index, s0)
2033
+
2034
+ node_cache[:space][start_index] = r0
2035
+
2036
+ return r0
2037
+ end
2038
+
2039
+ end
2040
+
2041
+ class JsonQueryParser < Treetop::Runtime::CompiledParser
2042
+ include JsonQuery
2043
+ end
2044
+
2045
+