rasti-db 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/README.md +8 -0
  4. data/lib/rasti/db.rb +9 -18
  5. data/lib/rasti/db/collection.rb +1 -1
  6. data/lib/rasti/db/nql/invalid_expression_error.rb +19 -0
  7. data/lib/rasti/db/nql/nodes/binary_node.rb +25 -0
  8. data/lib/rasti/db/nql/nodes/comparisons/base.rb +17 -0
  9. data/lib/rasti/db/nql/nodes/comparisons/equal.rb +17 -0
  10. data/lib/rasti/db/nql/nodes/comparisons/greater_than.rb +17 -0
  11. data/lib/rasti/db/nql/nodes/comparisons/greater_than_or_equal.rb +17 -0
  12. data/lib/rasti/db/nql/nodes/comparisons/include.rb +17 -0
  13. data/lib/rasti/db/nql/nodes/comparisons/less_than.rb +17 -0
  14. data/lib/rasti/db/nql/nodes/comparisons/less_than_or_equal.rb +17 -0
  15. data/lib/rasti/db/nql/nodes/comparisons/like.rb +17 -0
  16. data/lib/rasti/db/nql/nodes/comparisons/not_equal.rb +17 -0
  17. data/lib/rasti/db/nql/nodes/comparisons/not_include.rb +17 -0
  18. data/lib/rasti/db/nql/nodes/conjunction.rb +15 -0
  19. data/lib/rasti/db/nql/nodes/constants/false.rb +17 -0
  20. data/lib/rasti/db/nql/nodes/constants/float.rb +17 -0
  21. data/lib/rasti/db/nql/nodes/constants/integer.rb +17 -0
  22. data/lib/rasti/db/nql/nodes/constants/literal_string.rb +17 -0
  23. data/lib/rasti/db/nql/nodes/constants/string.rb +17 -0
  24. data/lib/rasti/db/nql/nodes/constants/time.rb +23 -0
  25. data/lib/rasti/db/nql/nodes/constants/true.rb +17 -0
  26. data/lib/rasti/db/nql/nodes/disjunction.rb +15 -0
  27. data/lib/rasti/db/nql/nodes/field.rb +23 -0
  28. data/lib/rasti/db/nql/nodes/parenthesis_sentence.rb +19 -0
  29. data/lib/rasti/db/nql/nodes/sentence.rb +19 -0
  30. data/lib/rasti/db/nql/syntax.rb +2266 -0
  31. data/lib/rasti/db/nql/syntax.treetop +168 -0
  32. data/lib/rasti/db/query.rb +15 -0
  33. data/lib/rasti/db/relations/graph_builder.rb +3 -3
  34. data/lib/rasti/db/version.rb +1 -1
  35. data/rasti-db.gemspec +3 -1
  36. data/spec/coverage_helper.rb +5 -1
  37. data/spec/nql/dependency_tables_spec.rb +35 -0
  38. data/spec/nql/filter_condition_spec.rb +146 -0
  39. data/spec/nql/syntax_parser_spec.rb +209 -0
  40. data/spec/query_spec.rb +53 -0
  41. metadata +68 -2
@@ -0,0 +1,17 @@
1
+ module Rasti
2
+ module DB
3
+ module NQL
4
+ module Nodes
5
+ module Constants
6
+ class True < Treetop::Runtime::SyntaxNode
7
+
8
+ def value
9
+ true
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Rasti
2
+ module DB
3
+ module NQL
4
+ module Nodes
5
+ class Disjunction < BinaryNode
6
+
7
+ def filter_condition
8
+ Sequel.|(*values.map(&:filter_condition))
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ module Rasti
2
+ module DB
3
+ module NQL
4
+ module Nodes
5
+ class Field < Treetop::Runtime::SyntaxNode
6
+
7
+ def identifier
8
+ tables.empty? ? Sequel[column.to_sym] : Sequel[tables.join('__').to_sym][column.to_sym]
9
+ end
10
+
11
+ def tables
12
+ _tables.elements.map{ |e| e.table.text_value }
13
+ end
14
+
15
+ def column
16
+ _column.text_value
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ module Rasti
2
+ module DB
3
+ module NQL
4
+ module Nodes
5
+ class ParenthesisSentence < Treetop::Runtime::SyntaxNode
6
+
7
+ def dependency_tables
8
+ sentence.dependency_tables
9
+ end
10
+
11
+ def filter_condition
12
+ sentence.filter_condition
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Rasti
2
+ module DB
3
+ module NQL
4
+ module Nodes
5
+ class Sentence < Treetop::Runtime::SyntaxNode
6
+
7
+ def dependency_tables
8
+ proposition.dependency_tables
9
+ end
10
+
11
+ def filter_condition
12
+ proposition.filter_condition
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,2266 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Rasti
5
+ module DB
6
+ module NQL
7
+ module Syntax
8
+ include Treetop::Runtime
9
+
10
+ def root
11
+ @root ||= :sentence
12
+ end
13
+
14
+ module Sentence0
15
+ def proposition
16
+ elements[1]
17
+ end
18
+
19
+ end
20
+
21
+ def _nt_sentence
22
+ start_index = index
23
+ if node_cache[:sentence].has_key?(index)
24
+ cached = node_cache[:sentence][index]
25
+ if cached
26
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
27
+ @index = cached.interval.end
28
+ end
29
+ return cached
30
+ end
31
+
32
+ i0, s0 = index, []
33
+ s1, i1 = [], index
34
+ loop do
35
+ r2 = _nt_space
36
+ if r2
37
+ s1 << r2
38
+ else
39
+ break
40
+ end
41
+ end
42
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
43
+ s0 << r1
44
+ if r1
45
+ r3 = _nt_proposition
46
+ s0 << r3
47
+ if r3
48
+ s4, i4 = [], index
49
+ loop do
50
+ r5 = _nt_space
51
+ if r5
52
+ s4 << r5
53
+ else
54
+ break
55
+ end
56
+ end
57
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
58
+ s0 << r4
59
+ end
60
+ end
61
+ if s0.last
62
+ r0 = instantiate_node(Nodes::Sentence,input, i0...index, s0)
63
+ r0.extend(Sentence0)
64
+ else
65
+ @index = i0
66
+ r0 = nil
67
+ end
68
+
69
+ node_cache[:sentence][start_index] = r0
70
+
71
+ r0
72
+ end
73
+
74
+ def _nt_proposition
75
+ start_index = index
76
+ if node_cache[:proposition].has_key?(index)
77
+ cached = node_cache[:proposition][index]
78
+ if cached
79
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
80
+ @index = cached.interval.end
81
+ end
82
+ return cached
83
+ end
84
+
85
+ i0 = index
86
+ r1 = _nt_disjunction
87
+ if r1
88
+ r0 = r1
89
+ else
90
+ r2 = _nt_conjunction
91
+ if r2
92
+ r0 = r2
93
+ else
94
+ r3 = _nt_statement
95
+ if r3
96
+ r0 = r3
97
+ else
98
+ @index = i0
99
+ r0 = nil
100
+ end
101
+ end
102
+ end
103
+
104
+ node_cache[:proposition][start_index] = r0
105
+
106
+ r0
107
+ end
108
+
109
+ module Disjunction0
110
+ def left
111
+ elements[0]
112
+ end
113
+
114
+ def right
115
+ elements[4]
116
+ end
117
+ end
118
+
119
+ def _nt_disjunction
120
+ start_index = index
121
+ if node_cache[:disjunction].has_key?(index)
122
+ cached = node_cache[:disjunction][index]
123
+ if cached
124
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
125
+ @index = cached.interval.end
126
+ end
127
+ return cached
128
+ end
129
+
130
+ i0, s0 = index, []
131
+ i1 = index
132
+ r2 = _nt_conjunction
133
+ if r2
134
+ r1 = r2
135
+ else
136
+ r3 = _nt_statement
137
+ if r3
138
+ r1 = r3
139
+ else
140
+ @index = i1
141
+ r1 = nil
142
+ end
143
+ end
144
+ s0 << r1
145
+ if r1
146
+ s4, i4 = [], index
147
+ loop do
148
+ r5 = _nt_space
149
+ if r5
150
+ s4 << r5
151
+ else
152
+ break
153
+ end
154
+ end
155
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
156
+ s0 << r4
157
+ if r4
158
+ if has_terminal?('|', false, index)
159
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
160
+ @index += 1
161
+ else
162
+ terminal_parse_failure('|')
163
+ r6 = nil
164
+ end
165
+ s0 << r6
166
+ if r6
167
+ s7, i7 = [], index
168
+ loop do
169
+ r8 = _nt_space
170
+ if r8
171
+ s7 << r8
172
+ else
173
+ break
174
+ end
175
+ end
176
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
177
+ s0 << r7
178
+ if r7
179
+ r9 = _nt_proposition
180
+ s0 << r9
181
+ end
182
+ end
183
+ end
184
+ end
185
+ if s0.last
186
+ r0 = instantiate_node(Nodes::Disjunction,input, i0...index, s0)
187
+ r0.extend(Disjunction0)
188
+ else
189
+ @index = i0
190
+ r0 = nil
191
+ end
192
+
193
+ node_cache[:disjunction][start_index] = r0
194
+
195
+ r0
196
+ end
197
+
198
+ module Conjunction0
199
+ def left
200
+ elements[0]
201
+ end
202
+
203
+ def right
204
+ elements[4]
205
+ end
206
+ end
207
+
208
+ def _nt_conjunction
209
+ start_index = index
210
+ if node_cache[:conjunction].has_key?(index)
211
+ cached = node_cache[:conjunction][index]
212
+ if cached
213
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
214
+ @index = cached.interval.end
215
+ end
216
+ return cached
217
+ end
218
+
219
+ i0, s0 = index, []
220
+ r1 = _nt_statement
221
+ s0 << r1
222
+ if r1
223
+ s2, i2 = [], index
224
+ loop do
225
+ r3 = _nt_space
226
+ if r3
227
+ s2 << r3
228
+ else
229
+ break
230
+ end
231
+ end
232
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
233
+ s0 << r2
234
+ if r2
235
+ if has_terminal?('&', false, index)
236
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
237
+ @index += 1
238
+ else
239
+ terminal_parse_failure('&')
240
+ r4 = nil
241
+ end
242
+ s0 << r4
243
+ if r4
244
+ s5, i5 = [], index
245
+ loop do
246
+ r6 = _nt_space
247
+ if r6
248
+ s5 << r6
249
+ else
250
+ break
251
+ end
252
+ end
253
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
254
+ s0 << r5
255
+ if r5
256
+ i7 = index
257
+ r8 = _nt_conjunction
258
+ if r8
259
+ r7 = r8
260
+ else
261
+ r9 = _nt_statement
262
+ if r9
263
+ r7 = r9
264
+ else
265
+ @index = i7
266
+ r7 = nil
267
+ end
268
+ end
269
+ s0 << r7
270
+ end
271
+ end
272
+ end
273
+ end
274
+ if s0.last
275
+ r0 = instantiate_node(Nodes::Conjunction,input, i0...index, s0)
276
+ r0.extend(Conjunction0)
277
+ else
278
+ @index = i0
279
+ r0 = nil
280
+ end
281
+
282
+ node_cache[:conjunction][start_index] = r0
283
+
284
+ r0
285
+ end
286
+
287
+ def _nt_statement
288
+ start_index = index
289
+ if node_cache[:statement].has_key?(index)
290
+ cached = node_cache[:statement][index]
291
+ if cached
292
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
293
+ @index = cached.interval.end
294
+ end
295
+ return cached
296
+ end
297
+
298
+ i0 = index
299
+ r1 = _nt_parenthesis_sentence
300
+ if r1
301
+ r0 = r1
302
+ else
303
+ r2 = _nt_comparison
304
+ if r2
305
+ r0 = r2
306
+ else
307
+ @index = i0
308
+ r0 = nil
309
+ end
310
+ end
311
+
312
+ node_cache[:statement][start_index] = r0
313
+
314
+ r0
315
+ end
316
+
317
+ module ParenthesisSentence0
318
+ def sentence
319
+ elements[1]
320
+ end
321
+
322
+ end
323
+
324
+ def _nt_parenthesis_sentence
325
+ start_index = index
326
+ if node_cache[:parenthesis_sentence].has_key?(index)
327
+ cached = node_cache[:parenthesis_sentence][index]
328
+ if cached
329
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
330
+ @index = cached.interval.end
331
+ end
332
+ return cached
333
+ end
334
+
335
+ i0, s0 = index, []
336
+ if has_terminal?('(', false, index)
337
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
338
+ @index += 1
339
+ else
340
+ terminal_parse_failure('(')
341
+ r1 = nil
342
+ end
343
+ s0 << r1
344
+ if r1
345
+ r2 = _nt_sentence
346
+ s0 << r2
347
+ if r2
348
+ if has_terminal?(')', false, index)
349
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
350
+ @index += 1
351
+ else
352
+ terminal_parse_failure(')')
353
+ r3 = nil
354
+ end
355
+ s0 << r3
356
+ end
357
+ end
358
+ if s0.last
359
+ r0 = instantiate_node(Nodes::ParenthesisSentence,input, i0...index, s0)
360
+ r0.extend(ParenthesisSentence0)
361
+ else
362
+ @index = i0
363
+ r0 = nil
364
+ end
365
+
366
+ node_cache[:parenthesis_sentence][start_index] = r0
367
+
368
+ r0
369
+ end
370
+
371
+ def _nt_comparison
372
+ start_index = index
373
+ if node_cache[:comparison].has_key?(index)
374
+ cached = node_cache[:comparison][index]
375
+ if cached
376
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
377
+ @index = cached.interval.end
378
+ end
379
+ return cached
380
+ end
381
+
382
+ i0 = index
383
+ r1 = _nt_comparison_not_include
384
+ if r1
385
+ r0 = r1
386
+ else
387
+ r2 = _nt_comparison_include
388
+ if r2
389
+ r0 = r2
390
+ else
391
+ r3 = _nt_comparison_like
392
+ if r3
393
+ r0 = r3
394
+ else
395
+ r4 = _nt_comparison_greater_than_or_equal
396
+ if r4
397
+ r0 = r4
398
+ else
399
+ r5 = _nt_comparison_less_than_or_equal
400
+ if r5
401
+ r0 = r5
402
+ else
403
+ r6 = _nt_comparison_greater_than
404
+ if r6
405
+ r0 = r6
406
+ else
407
+ r7 = _nt_comparison_less_than
408
+ if r7
409
+ r0 = r7
410
+ else
411
+ r8 = _nt_comparison_not_equal
412
+ if r8
413
+ r0 = r8
414
+ else
415
+ r9 = _nt_comparison_equal
416
+ if r9
417
+ r0 = r9
418
+ else
419
+ @index = i0
420
+ r0 = nil
421
+ end
422
+ end
423
+ end
424
+ end
425
+ end
426
+ end
427
+ end
428
+ end
429
+ end
430
+
431
+ node_cache[:comparison][start_index] = r0
432
+
433
+ r0
434
+ end
435
+
436
+ module Field0
437
+ def table
438
+ elements[0]
439
+ end
440
+
441
+ end
442
+
443
+ module Field1
444
+ def _tables
445
+ elements[0]
446
+ end
447
+
448
+ def _column
449
+ elements[1]
450
+ end
451
+ end
452
+
453
+ def _nt_field
454
+ start_index = index
455
+ if node_cache[:field].has_key?(index)
456
+ cached = node_cache[:field][index]
457
+ if cached
458
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
459
+ @index = cached.interval.end
460
+ end
461
+ return cached
462
+ end
463
+
464
+ i0, s0 = index, []
465
+ s1, i1 = [], index
466
+ loop do
467
+ i2, s2 = index, []
468
+ r3 = _nt_field_name
469
+ s2 << r3
470
+ if r3
471
+ if has_terminal?('.', false, index)
472
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
473
+ @index += 1
474
+ else
475
+ terminal_parse_failure('.')
476
+ r4 = nil
477
+ end
478
+ s2 << r4
479
+ end
480
+ if s2.last
481
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
482
+ r2.extend(Field0)
483
+ else
484
+ @index = i2
485
+ r2 = nil
486
+ end
487
+ if r2
488
+ s1 << r2
489
+ else
490
+ break
491
+ end
492
+ end
493
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
494
+ s0 << r1
495
+ if r1
496
+ r5 = _nt_field_name
497
+ s0 << r5
498
+ end
499
+ if s0.last
500
+ r0 = instantiate_node(Nodes::Field,input, i0...index, s0)
501
+ r0.extend(Field1)
502
+ else
503
+ @index = i0
504
+ r0 = nil
505
+ end
506
+
507
+ node_cache[:field][start_index] = r0
508
+
509
+ r0
510
+ end
511
+
512
+ module ComparisonInclude0
513
+ def field
514
+ elements[0]
515
+ end
516
+
517
+ def comparator
518
+ elements[2]
519
+ end
520
+
521
+ def argument
522
+ elements[4]
523
+ end
524
+ end
525
+
526
+ def _nt_comparison_include
527
+ start_index = index
528
+ if node_cache[:comparison_include].has_key?(index)
529
+ cached = node_cache[:comparison_include][index]
530
+ if cached
531
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
532
+ @index = cached.interval.end
533
+ end
534
+ return cached
535
+ end
536
+
537
+ i0, s0 = index, []
538
+ r1 = _nt_field
539
+ s0 << r1
540
+ if r1
541
+ s2, i2 = [], index
542
+ loop do
543
+ r3 = _nt_space
544
+ if r3
545
+ s2 << r3
546
+ else
547
+ break
548
+ end
549
+ end
550
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
551
+ s0 << r2
552
+ if r2
553
+ if has_terminal?(':', false, index)
554
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
555
+ @index += 1
556
+ else
557
+ terminal_parse_failure(':')
558
+ r4 = nil
559
+ end
560
+ s0 << r4
561
+ if r4
562
+ s5, i5 = [], index
563
+ loop do
564
+ r6 = _nt_space
565
+ if r6
566
+ s5 << r6
567
+ else
568
+ break
569
+ end
570
+ end
571
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
572
+ s0 << r5
573
+ if r5
574
+ r7 = _nt_basic
575
+ s0 << r7
576
+ end
577
+ end
578
+ end
579
+ end
580
+ if s0.last
581
+ r0 = instantiate_node(Nodes::Comparisons::Include,input, i0...index, s0)
582
+ r0.extend(ComparisonInclude0)
583
+ else
584
+ @index = i0
585
+ r0 = nil
586
+ end
587
+
588
+ node_cache[:comparison_include][start_index] = r0
589
+
590
+ r0
591
+ end
592
+
593
+ module ComparisonNotInclude0
594
+ def field
595
+ elements[0]
596
+ end
597
+
598
+ def comparator
599
+ elements[2]
600
+ end
601
+
602
+ def argument
603
+ elements[4]
604
+ end
605
+ end
606
+
607
+ def _nt_comparison_not_include
608
+ start_index = index
609
+ if node_cache[:comparison_not_include].has_key?(index)
610
+ cached = node_cache[:comparison_not_include][index]
611
+ if cached
612
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
613
+ @index = cached.interval.end
614
+ end
615
+ return cached
616
+ end
617
+
618
+ i0, s0 = index, []
619
+ r1 = _nt_field
620
+ s0 << r1
621
+ if r1
622
+ s2, i2 = [], index
623
+ loop do
624
+ r3 = _nt_space
625
+ if r3
626
+ s2 << r3
627
+ else
628
+ break
629
+ end
630
+ end
631
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
632
+ s0 << r2
633
+ if r2
634
+ if has_terminal?('!:', false, index)
635
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
636
+ @index += 2
637
+ else
638
+ terminal_parse_failure('!:')
639
+ r4 = nil
640
+ end
641
+ s0 << r4
642
+ if r4
643
+ s5, i5 = [], index
644
+ loop do
645
+ r6 = _nt_space
646
+ if r6
647
+ s5 << r6
648
+ else
649
+ break
650
+ end
651
+ end
652
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
653
+ s0 << r5
654
+ if r5
655
+ r7 = _nt_basic
656
+ s0 << r7
657
+ end
658
+ end
659
+ end
660
+ end
661
+ if s0.last
662
+ r0 = instantiate_node(Nodes::Comparisons::NotInclude,input, i0...index, s0)
663
+ r0.extend(ComparisonNotInclude0)
664
+ else
665
+ @index = i0
666
+ r0 = nil
667
+ end
668
+
669
+ node_cache[:comparison_not_include][start_index] = r0
670
+
671
+ r0
672
+ end
673
+
674
+ module ComparisonLike0
675
+ def field
676
+ elements[0]
677
+ end
678
+
679
+ def comparator
680
+ elements[2]
681
+ end
682
+
683
+ def argument
684
+ elements[4]
685
+ end
686
+ end
687
+
688
+ def _nt_comparison_like
689
+ start_index = index
690
+ if node_cache[:comparison_like].has_key?(index)
691
+ cached = node_cache[:comparison_like][index]
692
+ if cached
693
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
694
+ @index = cached.interval.end
695
+ end
696
+ return cached
697
+ end
698
+
699
+ i0, s0 = index, []
700
+ r1 = _nt_field
701
+ s0 << r1
702
+ if r1
703
+ s2, i2 = [], index
704
+ loop do
705
+ r3 = _nt_space
706
+ if r3
707
+ s2 << r3
708
+ else
709
+ break
710
+ end
711
+ end
712
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
713
+ s0 << r2
714
+ if r2
715
+ if has_terminal?('~', false, index)
716
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
717
+ @index += 1
718
+ else
719
+ terminal_parse_failure('~')
720
+ r4 = nil
721
+ end
722
+ s0 << r4
723
+ if r4
724
+ s5, i5 = [], index
725
+ loop do
726
+ r6 = _nt_space
727
+ if r6
728
+ s5 << r6
729
+ else
730
+ break
731
+ end
732
+ end
733
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
734
+ s0 << r5
735
+ if r5
736
+ r7 = _nt_basic
737
+ s0 << r7
738
+ end
739
+ end
740
+ end
741
+ end
742
+ if s0.last
743
+ r0 = instantiate_node(Nodes::Comparisons::Like,input, i0...index, s0)
744
+ r0.extend(ComparisonLike0)
745
+ else
746
+ @index = i0
747
+ r0 = nil
748
+ end
749
+
750
+ node_cache[:comparison_like][start_index] = r0
751
+
752
+ r0
753
+ end
754
+
755
+ module ComparisonGreaterThan0
756
+ def field
757
+ elements[0]
758
+ end
759
+
760
+ def comparator
761
+ elements[2]
762
+ end
763
+
764
+ def argument
765
+ elements[4]
766
+ end
767
+ end
768
+
769
+ def _nt_comparison_greater_than
770
+ start_index = index
771
+ if node_cache[:comparison_greater_than].has_key?(index)
772
+ cached = node_cache[:comparison_greater_than][index]
773
+ if cached
774
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
775
+ @index = cached.interval.end
776
+ end
777
+ return cached
778
+ end
779
+
780
+ i0, s0 = index, []
781
+ r1 = _nt_field
782
+ s0 << r1
783
+ if r1
784
+ s2, i2 = [], index
785
+ loop do
786
+ r3 = _nt_space
787
+ if r3
788
+ s2 << r3
789
+ else
790
+ break
791
+ end
792
+ end
793
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
794
+ s0 << r2
795
+ if r2
796
+ if has_terminal?('>', false, index)
797
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
798
+ @index += 1
799
+ else
800
+ terminal_parse_failure('>')
801
+ r4 = nil
802
+ end
803
+ s0 << r4
804
+ if r4
805
+ s5, i5 = [], index
806
+ loop do
807
+ r6 = _nt_space
808
+ if r6
809
+ s5 << r6
810
+ else
811
+ break
812
+ end
813
+ end
814
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
815
+ s0 << r5
816
+ if r5
817
+ r7 = _nt_basic
818
+ s0 << r7
819
+ end
820
+ end
821
+ end
822
+ end
823
+ if s0.last
824
+ r0 = instantiate_node(Nodes::Comparisons::GreaterThan,input, i0...index, s0)
825
+ r0.extend(ComparisonGreaterThan0)
826
+ else
827
+ @index = i0
828
+ r0 = nil
829
+ end
830
+
831
+ node_cache[:comparison_greater_than][start_index] = r0
832
+
833
+ r0
834
+ end
835
+
836
+ module ComparisonGreaterThanOrEqual0
837
+ def field
838
+ elements[0]
839
+ end
840
+
841
+ def comparator
842
+ elements[2]
843
+ end
844
+
845
+ def argument
846
+ elements[4]
847
+ end
848
+ end
849
+
850
+ def _nt_comparison_greater_than_or_equal
851
+ start_index = index
852
+ if node_cache[:comparison_greater_than_or_equal].has_key?(index)
853
+ cached = node_cache[:comparison_greater_than_or_equal][index]
854
+ if cached
855
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
856
+ @index = cached.interval.end
857
+ end
858
+ return cached
859
+ end
860
+
861
+ i0, s0 = index, []
862
+ r1 = _nt_field
863
+ s0 << r1
864
+ if r1
865
+ s2, i2 = [], index
866
+ loop do
867
+ r3 = _nt_space
868
+ if r3
869
+ s2 << r3
870
+ else
871
+ break
872
+ end
873
+ end
874
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
875
+ s0 << r2
876
+ if r2
877
+ if has_terminal?('>=', false, index)
878
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
879
+ @index += 2
880
+ else
881
+ terminal_parse_failure('>=')
882
+ r4 = nil
883
+ end
884
+ s0 << r4
885
+ if r4
886
+ s5, i5 = [], index
887
+ loop do
888
+ r6 = _nt_space
889
+ if r6
890
+ s5 << r6
891
+ else
892
+ break
893
+ end
894
+ end
895
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
896
+ s0 << r5
897
+ if r5
898
+ r7 = _nt_basic
899
+ s0 << r7
900
+ end
901
+ end
902
+ end
903
+ end
904
+ if s0.last
905
+ r0 = instantiate_node(Nodes::Comparisons::GreaterThanOrEqual,input, i0...index, s0)
906
+ r0.extend(ComparisonGreaterThanOrEqual0)
907
+ else
908
+ @index = i0
909
+ r0 = nil
910
+ end
911
+
912
+ node_cache[:comparison_greater_than_or_equal][start_index] = r0
913
+
914
+ r0
915
+ end
916
+
917
+ module ComparisonLessThan0
918
+ def field
919
+ elements[0]
920
+ end
921
+
922
+ def comparator
923
+ elements[2]
924
+ end
925
+
926
+ def argument
927
+ elements[4]
928
+ end
929
+ end
930
+
931
+ def _nt_comparison_less_than
932
+ start_index = index
933
+ if node_cache[:comparison_less_than].has_key?(index)
934
+ cached = node_cache[:comparison_less_than][index]
935
+ if cached
936
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
937
+ @index = cached.interval.end
938
+ end
939
+ return cached
940
+ end
941
+
942
+ i0, s0 = index, []
943
+ r1 = _nt_field
944
+ s0 << r1
945
+ if r1
946
+ s2, i2 = [], index
947
+ loop do
948
+ r3 = _nt_space
949
+ if r3
950
+ s2 << r3
951
+ else
952
+ break
953
+ end
954
+ end
955
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
956
+ s0 << r2
957
+ if r2
958
+ if has_terminal?('<', false, index)
959
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
960
+ @index += 1
961
+ else
962
+ terminal_parse_failure('<')
963
+ r4 = nil
964
+ end
965
+ s0 << r4
966
+ if r4
967
+ s5, i5 = [], index
968
+ loop do
969
+ r6 = _nt_space
970
+ if r6
971
+ s5 << r6
972
+ else
973
+ break
974
+ end
975
+ end
976
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
977
+ s0 << r5
978
+ if r5
979
+ r7 = _nt_basic
980
+ s0 << r7
981
+ end
982
+ end
983
+ end
984
+ end
985
+ if s0.last
986
+ r0 = instantiate_node(Nodes::Comparisons::LessThan,input, i0...index, s0)
987
+ r0.extend(ComparisonLessThan0)
988
+ else
989
+ @index = i0
990
+ r0 = nil
991
+ end
992
+
993
+ node_cache[:comparison_less_than][start_index] = r0
994
+
995
+ r0
996
+ end
997
+
998
+ module ComparisonLessThanOrEqual0
999
+ def field
1000
+ elements[0]
1001
+ end
1002
+
1003
+ def comparator
1004
+ elements[2]
1005
+ end
1006
+
1007
+ def argument
1008
+ elements[4]
1009
+ end
1010
+ end
1011
+
1012
+ def _nt_comparison_less_than_or_equal
1013
+ start_index = index
1014
+ if node_cache[:comparison_less_than_or_equal].has_key?(index)
1015
+ cached = node_cache[:comparison_less_than_or_equal][index]
1016
+ if cached
1017
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1018
+ @index = cached.interval.end
1019
+ end
1020
+ return cached
1021
+ end
1022
+
1023
+ i0, s0 = index, []
1024
+ r1 = _nt_field
1025
+ s0 << r1
1026
+ if r1
1027
+ s2, i2 = [], index
1028
+ loop do
1029
+ r3 = _nt_space
1030
+ if r3
1031
+ s2 << r3
1032
+ else
1033
+ break
1034
+ end
1035
+ end
1036
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1037
+ s0 << r2
1038
+ if r2
1039
+ if has_terminal?('<=', false, index)
1040
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
1041
+ @index += 2
1042
+ else
1043
+ terminal_parse_failure('<=')
1044
+ r4 = nil
1045
+ end
1046
+ s0 << r4
1047
+ if r4
1048
+ s5, i5 = [], index
1049
+ loop do
1050
+ r6 = _nt_space
1051
+ if r6
1052
+ s5 << r6
1053
+ else
1054
+ break
1055
+ end
1056
+ end
1057
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1058
+ s0 << r5
1059
+ if r5
1060
+ r7 = _nt_basic
1061
+ s0 << r7
1062
+ end
1063
+ end
1064
+ end
1065
+ end
1066
+ if s0.last
1067
+ r0 = instantiate_node(Nodes::Comparisons::LessThanOrEqual,input, i0...index, s0)
1068
+ r0.extend(ComparisonLessThanOrEqual0)
1069
+ else
1070
+ @index = i0
1071
+ r0 = nil
1072
+ end
1073
+
1074
+ node_cache[:comparison_less_than_or_equal][start_index] = r0
1075
+
1076
+ r0
1077
+ end
1078
+
1079
+ module ComparisonNotEqual0
1080
+ def field
1081
+ elements[0]
1082
+ end
1083
+
1084
+ def comparator
1085
+ elements[2]
1086
+ end
1087
+
1088
+ def argument
1089
+ elements[4]
1090
+ end
1091
+ end
1092
+
1093
+ def _nt_comparison_not_equal
1094
+ start_index = index
1095
+ if node_cache[:comparison_not_equal].has_key?(index)
1096
+ cached = node_cache[:comparison_not_equal][index]
1097
+ if cached
1098
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1099
+ @index = cached.interval.end
1100
+ end
1101
+ return cached
1102
+ end
1103
+
1104
+ i0, s0 = index, []
1105
+ r1 = _nt_field
1106
+ s0 << r1
1107
+ if r1
1108
+ s2, i2 = [], index
1109
+ loop do
1110
+ r3 = _nt_space
1111
+ if r3
1112
+ s2 << r3
1113
+ else
1114
+ break
1115
+ end
1116
+ end
1117
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1118
+ s0 << r2
1119
+ if r2
1120
+ if has_terminal?('!=', false, index)
1121
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
1122
+ @index += 2
1123
+ else
1124
+ terminal_parse_failure('!=')
1125
+ r4 = nil
1126
+ end
1127
+ s0 << r4
1128
+ if r4
1129
+ s5, i5 = [], index
1130
+ loop do
1131
+ r6 = _nt_space
1132
+ if r6
1133
+ s5 << r6
1134
+ else
1135
+ break
1136
+ end
1137
+ end
1138
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1139
+ s0 << r5
1140
+ if r5
1141
+ r7 = _nt_basic
1142
+ s0 << r7
1143
+ end
1144
+ end
1145
+ end
1146
+ end
1147
+ if s0.last
1148
+ r0 = instantiate_node(Nodes::Comparisons::NotEqual,input, i0...index, s0)
1149
+ r0.extend(ComparisonNotEqual0)
1150
+ else
1151
+ @index = i0
1152
+ r0 = nil
1153
+ end
1154
+
1155
+ node_cache[:comparison_not_equal][start_index] = r0
1156
+
1157
+ r0
1158
+ end
1159
+
1160
+ module ComparisonEqual0
1161
+ def field
1162
+ elements[0]
1163
+ end
1164
+
1165
+ def comparator
1166
+ elements[2]
1167
+ end
1168
+
1169
+ def argument
1170
+ elements[4]
1171
+ end
1172
+ end
1173
+
1174
+ def _nt_comparison_equal
1175
+ start_index = index
1176
+ if node_cache[:comparison_equal].has_key?(index)
1177
+ cached = node_cache[:comparison_equal][index]
1178
+ if cached
1179
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1180
+ @index = cached.interval.end
1181
+ end
1182
+ return cached
1183
+ end
1184
+
1185
+ i0, s0 = index, []
1186
+ r1 = _nt_field
1187
+ s0 << r1
1188
+ if r1
1189
+ s2, i2 = [], index
1190
+ loop do
1191
+ r3 = _nt_space
1192
+ if r3
1193
+ s2 << r3
1194
+ else
1195
+ break
1196
+ end
1197
+ end
1198
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1199
+ s0 << r2
1200
+ if r2
1201
+ if has_terminal?('=', false, index)
1202
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1203
+ @index += 1
1204
+ else
1205
+ terminal_parse_failure('=')
1206
+ r4 = nil
1207
+ end
1208
+ s0 << r4
1209
+ if r4
1210
+ s5, i5 = [], index
1211
+ loop do
1212
+ r6 = _nt_space
1213
+ if r6
1214
+ s5 << r6
1215
+ else
1216
+ break
1217
+ end
1218
+ end
1219
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1220
+ s0 << r5
1221
+ if r5
1222
+ r7 = _nt_basic
1223
+ s0 << r7
1224
+ end
1225
+ end
1226
+ end
1227
+ end
1228
+ if s0.last
1229
+ r0 = instantiate_node(Nodes::Comparisons::Equal,input, i0...index, s0)
1230
+ r0.extend(ComparisonEqual0)
1231
+ else
1232
+ @index = i0
1233
+ r0 = nil
1234
+ end
1235
+
1236
+ node_cache[:comparison_equal][start_index] = r0
1237
+
1238
+ r0
1239
+ end
1240
+
1241
+ def _nt_basic
1242
+ start_index = index
1243
+ if node_cache[:basic].has_key?(index)
1244
+ cached = node_cache[:basic][index]
1245
+ if cached
1246
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1247
+ @index = cached.interval.end
1248
+ end
1249
+ return cached
1250
+ end
1251
+
1252
+ i0 = index
1253
+ r1 = _nt_boolean
1254
+ if r1
1255
+ r0 = r1
1256
+ else
1257
+ r2 = _nt_time
1258
+ if r2
1259
+ r0 = r2
1260
+ else
1261
+ r3 = _nt_float
1262
+ if r3
1263
+ r0 = r3
1264
+ else
1265
+ r4 = _nt_integer
1266
+ if r4
1267
+ r0 = r4
1268
+ else
1269
+ r5 = _nt_literal_string
1270
+ if r5
1271
+ r0 = r5
1272
+ else
1273
+ r6 = _nt_string
1274
+ if r6
1275
+ r0 = r6
1276
+ else
1277
+ @index = i0
1278
+ r0 = nil
1279
+ end
1280
+ end
1281
+ end
1282
+ end
1283
+ end
1284
+ end
1285
+
1286
+ node_cache[:basic][start_index] = r0
1287
+
1288
+ r0
1289
+ end
1290
+
1291
+ def _nt_space
1292
+ start_index = index
1293
+ if node_cache[:space].has_key?(index)
1294
+ cached = node_cache[:space][index]
1295
+ if cached
1296
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1297
+ @index = cached.interval.end
1298
+ end
1299
+ return cached
1300
+ end
1301
+
1302
+ if has_terminal?('\G[\\s\\t\\n]', true, index)
1303
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
1304
+ @index += 1
1305
+ else
1306
+ r0 = nil
1307
+ end
1308
+
1309
+ node_cache[:space][start_index] = r0
1310
+
1311
+ r0
1312
+ end
1313
+
1314
+ def _nt_field_name
1315
+ start_index = index
1316
+ if node_cache[:field_name].has_key?(index)
1317
+ cached = node_cache[:field_name][index]
1318
+ if cached
1319
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1320
+ @index = cached.interval.end
1321
+ end
1322
+ return cached
1323
+ end
1324
+
1325
+ s0, i0 = [], index
1326
+ loop do
1327
+ if has_terminal?('\G[a-z_]', true, index)
1328
+ r1 = true
1329
+ @index += 1
1330
+ else
1331
+ r1 = nil
1332
+ end
1333
+ if r1
1334
+ s0 << r1
1335
+ else
1336
+ break
1337
+ end
1338
+ end
1339
+ if s0.empty?
1340
+ @index = i0
1341
+ r0 = nil
1342
+ else
1343
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1344
+ end
1345
+
1346
+ node_cache[:field_name][start_index] = r0
1347
+
1348
+ r0
1349
+ end
1350
+
1351
+ module Time0
1352
+ def value
1353
+ elements[0]
1354
+ end
1355
+
1356
+ end
1357
+
1358
+ module Time1
1359
+ def digit1
1360
+ elements[0]
1361
+ end
1362
+
1363
+ def digit2
1364
+ elements[1]
1365
+ end
1366
+ end
1367
+
1368
+ module Time2
1369
+ def digit1
1370
+ elements[0]
1371
+ end
1372
+
1373
+ def digit2
1374
+ elements[1]
1375
+ end
1376
+ end
1377
+
1378
+ module Time3
1379
+ def digit1
1380
+ elements[0]
1381
+ end
1382
+
1383
+ def digit2
1384
+ elements[1]
1385
+ end
1386
+ end
1387
+
1388
+ module Time4
1389
+ def value
1390
+ elements[1]
1391
+ end
1392
+ end
1393
+
1394
+ module Time5
1395
+ def value
1396
+ elements[0]
1397
+ end
1398
+ end
1399
+
1400
+ module Time6
1401
+ def date
1402
+ elements[0]
1403
+ end
1404
+
1405
+ def hour
1406
+ elements[1]
1407
+ end
1408
+
1409
+ def minutes
1410
+ elements[3]
1411
+ end
1412
+
1413
+ def seconds
1414
+ elements[4]
1415
+ end
1416
+
1417
+ def timezone
1418
+ elements[5]
1419
+ end
1420
+ end
1421
+
1422
+ def _nt_time
1423
+ start_index = index
1424
+ if node_cache[:time].has_key?(index)
1425
+ cached = node_cache[:time][index]
1426
+ if cached
1427
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1428
+ @index = cached.interval.end
1429
+ end
1430
+ return cached
1431
+ end
1432
+
1433
+ i0, s0 = index, []
1434
+ i2, s2 = index, []
1435
+ r3 = _nt_date
1436
+ s2 << r3
1437
+ if r3
1438
+ if has_terminal?('T', false, index)
1439
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1440
+ @index += 1
1441
+ else
1442
+ terminal_parse_failure('T')
1443
+ r4 = nil
1444
+ end
1445
+ s2 << r4
1446
+ end
1447
+ if s2.last
1448
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1449
+ r2.extend(Time0)
1450
+ else
1451
+ @index = i2
1452
+ r2 = nil
1453
+ end
1454
+ if r2
1455
+ r1 = r2
1456
+ else
1457
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1458
+ end
1459
+ s0 << r1
1460
+ if r1
1461
+ i5, s5 = index, []
1462
+ r6 = _nt_digit
1463
+ s5 << r6
1464
+ if r6
1465
+ r7 = _nt_digit
1466
+ s5 << r7
1467
+ end
1468
+ if s5.last
1469
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1470
+ r5.extend(Time1)
1471
+ else
1472
+ @index = i5
1473
+ r5 = nil
1474
+ end
1475
+ s0 << r5
1476
+ if r5
1477
+ if has_terminal?(':', false, index)
1478
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
1479
+ @index += 1
1480
+ else
1481
+ terminal_parse_failure(':')
1482
+ r8 = nil
1483
+ end
1484
+ s0 << r8
1485
+ if r8
1486
+ i9, s9 = index, []
1487
+ r10 = _nt_digit
1488
+ s9 << r10
1489
+ if r10
1490
+ r11 = _nt_digit
1491
+ s9 << r11
1492
+ end
1493
+ if s9.last
1494
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1495
+ r9.extend(Time2)
1496
+ else
1497
+ @index = i9
1498
+ r9 = nil
1499
+ end
1500
+ s0 << r9
1501
+ if r9
1502
+ i13, s13 = index, []
1503
+ if has_terminal?(':', false, index)
1504
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
1505
+ @index += 1
1506
+ else
1507
+ terminal_parse_failure(':')
1508
+ r14 = nil
1509
+ end
1510
+ s13 << r14
1511
+ if r14
1512
+ i15, s15 = index, []
1513
+ r16 = _nt_digit
1514
+ s15 << r16
1515
+ if r16
1516
+ r17 = _nt_digit
1517
+ s15 << r17
1518
+ end
1519
+ if s15.last
1520
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
1521
+ r15.extend(Time3)
1522
+ else
1523
+ @index = i15
1524
+ r15 = nil
1525
+ end
1526
+ s13 << r15
1527
+ end
1528
+ if s13.last
1529
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1530
+ r13.extend(Time4)
1531
+ else
1532
+ @index = i13
1533
+ r13 = nil
1534
+ end
1535
+ if r13
1536
+ r12 = r13
1537
+ else
1538
+ r12 = instantiate_node(SyntaxNode,input, index...index)
1539
+ end
1540
+ s0 << r12
1541
+ if r12
1542
+ i19, s19 = index, []
1543
+ r20 = _nt_timezone
1544
+ s19 << r20
1545
+ if s19.last
1546
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
1547
+ r19.extend(Time5)
1548
+ else
1549
+ @index = i19
1550
+ r19 = nil
1551
+ end
1552
+ if r19
1553
+ r18 = r19
1554
+ else
1555
+ r18 = instantiate_node(SyntaxNode,input, index...index)
1556
+ end
1557
+ s0 << r18
1558
+ end
1559
+ end
1560
+ end
1561
+ end
1562
+ end
1563
+ if s0.last
1564
+ r0 = instantiate_node(Nodes::Constants::Time,input, i0...index, s0)
1565
+ r0.extend(Time6)
1566
+ else
1567
+ @index = i0
1568
+ r0 = nil
1569
+ end
1570
+
1571
+ node_cache[:time][start_index] = r0
1572
+
1573
+ r0
1574
+ end
1575
+
1576
+ module Date0
1577
+ def digit1
1578
+ elements[0]
1579
+ end
1580
+
1581
+ def digit2
1582
+ elements[1]
1583
+ end
1584
+
1585
+ def digit3
1586
+ elements[2]
1587
+ end
1588
+
1589
+ def digit4
1590
+ elements[3]
1591
+ end
1592
+ end
1593
+
1594
+ module Date1
1595
+ def digit1
1596
+ elements[0]
1597
+ end
1598
+
1599
+ def digit2
1600
+ elements[1]
1601
+ end
1602
+ end
1603
+
1604
+ module Date2
1605
+ def digit1
1606
+ elements[0]
1607
+ end
1608
+
1609
+ def digit2
1610
+ elements[1]
1611
+ end
1612
+ end
1613
+
1614
+ module Date3
1615
+ def year
1616
+ elements[0]
1617
+ end
1618
+
1619
+ def month
1620
+ elements[2]
1621
+ end
1622
+
1623
+ def day
1624
+ elements[4]
1625
+ end
1626
+ end
1627
+
1628
+ def _nt_date
1629
+ start_index = index
1630
+ if node_cache[:date].has_key?(index)
1631
+ cached = node_cache[:date][index]
1632
+ if cached
1633
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1634
+ @index = cached.interval.end
1635
+ end
1636
+ return cached
1637
+ end
1638
+
1639
+ i0, s0 = index, []
1640
+ i1, s1 = index, []
1641
+ r2 = _nt_digit
1642
+ s1 << r2
1643
+ if r2
1644
+ r3 = _nt_digit
1645
+ s1 << r3
1646
+ if r3
1647
+ r4 = _nt_digit
1648
+ s1 << r4
1649
+ if r4
1650
+ r5 = _nt_digit
1651
+ s1 << r5
1652
+ end
1653
+ end
1654
+ end
1655
+ if s1.last
1656
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1657
+ r1.extend(Date0)
1658
+ else
1659
+ @index = i1
1660
+ r1 = nil
1661
+ end
1662
+ s0 << r1
1663
+ if r1
1664
+ if has_terminal?('-', false, index)
1665
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1666
+ @index += 1
1667
+ else
1668
+ terminal_parse_failure('-')
1669
+ r6 = nil
1670
+ end
1671
+ s0 << r6
1672
+ if r6
1673
+ i7, s7 = index, []
1674
+ r8 = _nt_digit
1675
+ s7 << r8
1676
+ if r8
1677
+ r9 = _nt_digit
1678
+ s7 << r9
1679
+ end
1680
+ if s7.last
1681
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1682
+ r7.extend(Date1)
1683
+ else
1684
+ @index = i7
1685
+ r7 = nil
1686
+ end
1687
+ s0 << r7
1688
+ if r7
1689
+ if has_terminal?('-', false, index)
1690
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1691
+ @index += 1
1692
+ else
1693
+ terminal_parse_failure('-')
1694
+ r10 = nil
1695
+ end
1696
+ s0 << r10
1697
+ if r10
1698
+ i11, s11 = index, []
1699
+ r12 = _nt_digit
1700
+ s11 << r12
1701
+ if r12
1702
+ r13 = _nt_digit
1703
+ s11 << r13
1704
+ end
1705
+ if s11.last
1706
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
1707
+ r11.extend(Date2)
1708
+ else
1709
+ @index = i11
1710
+ r11 = nil
1711
+ end
1712
+ s0 << r11
1713
+ end
1714
+ end
1715
+ end
1716
+ end
1717
+ if s0.last
1718
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1719
+ r0.extend(Date3)
1720
+ else
1721
+ @index = i0
1722
+ r0 = nil
1723
+ end
1724
+
1725
+ node_cache[:date][start_index] = r0
1726
+
1727
+ r0
1728
+ end
1729
+
1730
+ module Timezone0
1731
+ def digit1
1732
+ elements[0]
1733
+ end
1734
+
1735
+ def digit2
1736
+ elements[1]
1737
+ end
1738
+ end
1739
+
1740
+ module Timezone1
1741
+ def digit1
1742
+ elements[0]
1743
+ end
1744
+
1745
+ def digit2
1746
+ elements[1]
1747
+ end
1748
+ end
1749
+
1750
+ module Timezone2
1751
+ def sign
1752
+ elements[0]
1753
+ end
1754
+
1755
+ def hour
1756
+ elements[1]
1757
+ end
1758
+
1759
+ def minutes
1760
+ elements[3]
1761
+ end
1762
+ end
1763
+
1764
+ def _nt_timezone
1765
+ start_index = index
1766
+ if node_cache[:timezone].has_key?(index)
1767
+ cached = node_cache[:timezone][index]
1768
+ if cached
1769
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1770
+ @index = cached.interval.end
1771
+ end
1772
+ return cached
1773
+ end
1774
+
1775
+ i0, s0 = index, []
1776
+ r1 = _nt_sign
1777
+ s0 << r1
1778
+ if r1
1779
+ i2, s2 = index, []
1780
+ r3 = _nt_digit
1781
+ s2 << r3
1782
+ if r3
1783
+ r4 = _nt_digit
1784
+ s2 << r4
1785
+ end
1786
+ if s2.last
1787
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1788
+ r2.extend(Timezone0)
1789
+ else
1790
+ @index = i2
1791
+ r2 = nil
1792
+ end
1793
+ s0 << r2
1794
+ if r2
1795
+ if has_terminal?(':', false, index)
1796
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
1797
+ @index += 1
1798
+ else
1799
+ terminal_parse_failure(':')
1800
+ r5 = nil
1801
+ end
1802
+ s0 << r5
1803
+ if r5
1804
+ i6, s6 = index, []
1805
+ r7 = _nt_digit
1806
+ s6 << r7
1807
+ if r7
1808
+ r8 = _nt_digit
1809
+ s6 << r8
1810
+ end
1811
+ if s6.last
1812
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1813
+ r6.extend(Timezone1)
1814
+ else
1815
+ @index = i6
1816
+ r6 = nil
1817
+ end
1818
+ s0 << r6
1819
+ end
1820
+ end
1821
+ end
1822
+ if s0.last
1823
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1824
+ r0.extend(Timezone2)
1825
+ else
1826
+ @index = i0
1827
+ r0 = nil
1828
+ end
1829
+
1830
+ node_cache[:timezone][start_index] = r0
1831
+
1832
+ r0
1833
+ end
1834
+
1835
+ def _nt_sign
1836
+ start_index = index
1837
+ if node_cache[:sign].has_key?(index)
1838
+ cached = node_cache[:sign][index]
1839
+ if cached
1840
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1841
+ @index = cached.interval.end
1842
+ end
1843
+ return cached
1844
+ end
1845
+
1846
+ i0 = index
1847
+ if has_terminal?('+', false, index)
1848
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1849
+ @index += 1
1850
+ else
1851
+ terminal_parse_failure('+')
1852
+ r1 = nil
1853
+ end
1854
+ if r1
1855
+ r0 = r1
1856
+ else
1857
+ if has_terminal?('-', false, index)
1858
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1859
+ @index += 1
1860
+ else
1861
+ terminal_parse_failure('-')
1862
+ r2 = nil
1863
+ end
1864
+ if r2
1865
+ r0 = r2
1866
+ else
1867
+ @index = i0
1868
+ r0 = nil
1869
+ end
1870
+ end
1871
+
1872
+ node_cache[:sign][start_index] = r0
1873
+
1874
+ r0
1875
+ end
1876
+
1877
+ module LiteralString0
1878
+ def string
1879
+ elements[1]
1880
+ end
1881
+
1882
+ end
1883
+
1884
+ def _nt_literal_string
1885
+ start_index = index
1886
+ if node_cache[:literal_string].has_key?(index)
1887
+ cached = node_cache[:literal_string][index]
1888
+ if cached
1889
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1890
+ @index = cached.interval.end
1891
+ end
1892
+ return cached
1893
+ end
1894
+
1895
+ i0, s0 = index, []
1896
+ if has_terminal?('"', false, index)
1897
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1898
+ @index += 1
1899
+ else
1900
+ terminal_parse_failure('"')
1901
+ r1 = nil
1902
+ end
1903
+ s0 << r1
1904
+ if r1
1905
+ s2, i2 = [], index
1906
+ loop do
1907
+ r3 = _nt_any_character
1908
+ if r3
1909
+ s2 << r3
1910
+ else
1911
+ break
1912
+ end
1913
+ end
1914
+ if s2.empty?
1915
+ @index = i2
1916
+ r2 = nil
1917
+ else
1918
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1919
+ end
1920
+ s0 << r2
1921
+ if r2
1922
+ if has_terminal?('"', false, index)
1923
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1924
+ @index += 1
1925
+ else
1926
+ terminal_parse_failure('"')
1927
+ r4 = nil
1928
+ end
1929
+ s0 << r4
1930
+ end
1931
+ end
1932
+ if s0.last
1933
+ r0 = instantiate_node(Nodes::Constants::LiteralString,input, i0...index, s0)
1934
+ r0.extend(LiteralString0)
1935
+ else
1936
+ @index = i0
1937
+ r0 = nil
1938
+ end
1939
+
1940
+ node_cache[:literal_string][start_index] = r0
1941
+
1942
+ r0
1943
+ end
1944
+
1945
+ def _nt_string
1946
+ start_index = index
1947
+ if node_cache[:string].has_key?(index)
1948
+ cached = node_cache[:string][index]
1949
+ if cached
1950
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1951
+ @index = cached.interval.end
1952
+ end
1953
+ return cached
1954
+ end
1955
+
1956
+ s0, i0 = [], index
1957
+ loop do
1958
+ r1 = _nt_valid_character
1959
+ if r1
1960
+ s0 << r1
1961
+ else
1962
+ break
1963
+ end
1964
+ end
1965
+ if s0.empty?
1966
+ @index = i0
1967
+ r0 = nil
1968
+ else
1969
+ r0 = instantiate_node(Nodes::Constants::String,input, i0...index, s0)
1970
+ end
1971
+
1972
+ node_cache[:string][start_index] = r0
1973
+
1974
+ r0
1975
+ end
1976
+
1977
+ def _nt_any_character
1978
+ start_index = index
1979
+ if node_cache[:any_character].has_key?(index)
1980
+ cached = node_cache[:any_character][index]
1981
+ if cached
1982
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1983
+ @index = cached.interval.end
1984
+ end
1985
+ return cached
1986
+ end
1987
+
1988
+ i0 = index
1989
+ r1 = _nt_valid_character
1990
+ if r1
1991
+ r0 = r1
1992
+ else
1993
+ r2 = _nt_reserved_character
1994
+ if r2
1995
+ r0 = r2
1996
+ else
1997
+ @index = i0
1998
+ r0 = nil
1999
+ end
2000
+ end
2001
+
2002
+ node_cache[:any_character][start_index] = r0
2003
+
2004
+ r0
2005
+ end
2006
+
2007
+ def _nt_valid_character
2008
+ start_index = index
2009
+ if node_cache[:valid_character].has_key?(index)
2010
+ cached = node_cache[:valid_character][index]
2011
+ if cached
2012
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2013
+ @index = cached.interval.end
2014
+ end
2015
+ return cached
2016
+ end
2017
+
2018
+ if has_terminal?('\G[0-9a-zA-ZÁÀÄÂÃÅĀĂǍáàäâãåāăǎÉÈËÊĒĔĖĚéèëêēĕėěÍÌÏÎĨĬǏíìïîĩĭǐÓÒÖÔÕŌŎŐǑóòöôõōŏőǒÚÙÜÛŨŪŬŮŰǓúùüûũūŭůűǔÑñçÇ%@#+-_\'?!$*/\\s]', true, index)
2019
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2020
+ @index += 1
2021
+ else
2022
+ r0 = nil
2023
+ end
2024
+
2025
+ node_cache[:valid_character][start_index] = r0
2026
+
2027
+ r0
2028
+ end
2029
+
2030
+ def _nt_boolean
2031
+ start_index = index
2032
+ if node_cache[:boolean].has_key?(index)
2033
+ cached = node_cache[:boolean][index]
2034
+ if cached
2035
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2036
+ @index = cached.interval.end
2037
+ end
2038
+ return cached
2039
+ end
2040
+
2041
+ i0 = index
2042
+ r1 = _nt_true
2043
+ if r1
2044
+ r0 = r1
2045
+ else
2046
+ r2 = _nt_false
2047
+ if r2
2048
+ r0 = r2
2049
+ else
2050
+ @index = i0
2051
+ r0 = nil
2052
+ end
2053
+ end
2054
+
2055
+ node_cache[:boolean][start_index] = r0
2056
+
2057
+ r0
2058
+ end
2059
+
2060
+ def _nt_true
2061
+ start_index = index
2062
+ if node_cache[:true].has_key?(index)
2063
+ cached = node_cache[:true][index]
2064
+ if cached
2065
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2066
+ @index = cached.interval.end
2067
+ end
2068
+ return cached
2069
+ end
2070
+
2071
+ if has_terminal?('true', false, index)
2072
+ r0 = instantiate_node(Nodes::Constants::True,input, index...(index + 4))
2073
+ @index += 4
2074
+ else
2075
+ terminal_parse_failure('true')
2076
+ r0 = nil
2077
+ end
2078
+
2079
+ node_cache[:true][start_index] = r0
2080
+
2081
+ r0
2082
+ end
2083
+
2084
+ def _nt_false
2085
+ start_index = index
2086
+ if node_cache[:false].has_key?(index)
2087
+ cached = node_cache[:false][index]
2088
+ if cached
2089
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2090
+ @index = cached.interval.end
2091
+ end
2092
+ return cached
2093
+ end
2094
+
2095
+ if has_terminal?('false', false, index)
2096
+ r0 = instantiate_node(Nodes::Constants::False,input, index...(index + 5))
2097
+ @index += 5
2098
+ else
2099
+ terminal_parse_failure('false')
2100
+ r0 = nil
2101
+ end
2102
+
2103
+ node_cache[:false][start_index] = r0
2104
+
2105
+ r0
2106
+ end
2107
+
2108
+ module Float0
2109
+ end
2110
+
2111
+ def _nt_float
2112
+ start_index = index
2113
+ if node_cache[:float].has_key?(index)
2114
+ cached = node_cache[:float][index]
2115
+ if cached
2116
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2117
+ @index = cached.interval.end
2118
+ end
2119
+ return cached
2120
+ end
2121
+
2122
+ i0, s0 = index, []
2123
+ s1, i1 = [], index
2124
+ loop do
2125
+ r2 = _nt_digit
2126
+ if r2
2127
+ s1 << r2
2128
+ else
2129
+ break
2130
+ end
2131
+ end
2132
+ if s1.empty?
2133
+ @index = i1
2134
+ r1 = nil
2135
+ else
2136
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2137
+ end
2138
+ s0 << r1
2139
+ if r1
2140
+ if has_terminal?('.', false, index)
2141
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2142
+ @index += 1
2143
+ else
2144
+ terminal_parse_failure('.')
2145
+ r3 = nil
2146
+ end
2147
+ s0 << r3
2148
+ if r3
2149
+ s4, i4 = [], index
2150
+ loop do
2151
+ r5 = _nt_digit
2152
+ if r5
2153
+ s4 << r5
2154
+ else
2155
+ break
2156
+ end
2157
+ end
2158
+ if s4.empty?
2159
+ @index = i4
2160
+ r4 = nil
2161
+ else
2162
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2163
+ end
2164
+ s0 << r4
2165
+ end
2166
+ end
2167
+ if s0.last
2168
+ r0 = instantiate_node(Nodes::Constants::Float,input, i0...index, s0)
2169
+ r0.extend(Float0)
2170
+ else
2171
+ @index = i0
2172
+ r0 = nil
2173
+ end
2174
+
2175
+ node_cache[:float][start_index] = r0
2176
+
2177
+ r0
2178
+ end
2179
+
2180
+ def _nt_integer
2181
+ start_index = index
2182
+ if node_cache[:integer].has_key?(index)
2183
+ cached = node_cache[:integer][index]
2184
+ if cached
2185
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2186
+ @index = cached.interval.end
2187
+ end
2188
+ return cached
2189
+ end
2190
+
2191
+ s0, i0 = [], index
2192
+ loop do
2193
+ r1 = _nt_digit
2194
+ if r1
2195
+ s0 << r1
2196
+ else
2197
+ break
2198
+ end
2199
+ end
2200
+ if s0.empty?
2201
+ @index = i0
2202
+ r0 = nil
2203
+ else
2204
+ r0 = instantiate_node(Nodes::Constants::Integer,input, i0...index, s0)
2205
+ end
2206
+
2207
+ node_cache[:integer][start_index] = r0
2208
+
2209
+ r0
2210
+ end
2211
+
2212
+ def _nt_digit
2213
+ start_index = index
2214
+ if node_cache[:digit].has_key?(index)
2215
+ cached = node_cache[:digit][index]
2216
+ if cached
2217
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2218
+ @index = cached.interval.end
2219
+ end
2220
+ return cached
2221
+ end
2222
+
2223
+ if has_terminal?('\G[0-9]', true, index)
2224
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2225
+ @index += 1
2226
+ else
2227
+ r0 = nil
2228
+ end
2229
+
2230
+ node_cache[:digit][start_index] = r0
2231
+
2232
+ r0
2233
+ end
2234
+
2235
+ def _nt_reserved_character
2236
+ start_index = index
2237
+ if node_cache[:reserved_character].has_key?(index)
2238
+ cached = node_cache[:reserved_character][index]
2239
+ if cached
2240
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2241
+ @index = cached.interval.end
2242
+ end
2243
+ return cached
2244
+ end
2245
+
2246
+ if has_terminal?('\G[&|.():!=<>~]', true, index)
2247
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2248
+ @index += 1
2249
+ else
2250
+ r0 = nil
2251
+ end
2252
+
2253
+ node_cache[:reserved_character][start_index] = r0
2254
+
2255
+ r0
2256
+ end
2257
+
2258
+ end
2259
+
2260
+ class SyntaxParser < Treetop::Runtime::CompiledParser
2261
+ include Syntax
2262
+ end
2263
+
2264
+ end
2265
+ end
2266
+ end