timing 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 63e328cc2e7495bf553c2965a54484658d676fbd
4
- data.tar.gz: cbd866e6b35c1cc28c0905a585b5055f0b706f73
3
+ metadata.gz: d6f6f145028cd5331680c01a8365eaa4f56cfee1
4
+ data.tar.gz: 3c032ab78e222d16d58ccbeb8a741c2e47c54519
5
5
  SHA512:
6
- metadata.gz: 0c2c4a39388a3ca0e94b7cf889c77632cd0dcfa779f4f58fdc01b57fdf028db559fec82fd4b22995c977405fe61b28827ab65a8e1cc7dfb8da3a88c1476ebccd
7
- data.tar.gz: d802ff14ed1a8963086af79ef724a576236104578db6d917546a97254ae0bf681a8e0b7319f37ed98807581aeacd7bc87ba4ad0a71c2cd0a92d8de5e102d1596
6
+ metadata.gz: 7e6b80824b06f9db1a4561214a518b79321cb75123558dc525f21a948b5805b0920a17b9ec1763b2d35f319afefdc81f490ba43028e3dc1b2097ceae62635945
7
+ data.tar.gz: 25bec6e9461646ba7d789ca0b98f576e772162527f19187fedb15347d38da5a4dea5c6bb3b92dee883a89cb1e72078e30341f725bf499e1dd299031b85888573
@@ -1,15 +1,69 @@
1
1
  module Timing
2
2
  module Helpers
3
3
 
4
- TIME_REGEXP = /(\d\d:\d\d:\d\d)/
5
- TIME_FORMAT = '%F %T %z'
4
+ MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
5
+
6
+ def beginning_of_hour(time)
7
+ TimeInZone.parse time.strftime('%Y-%m-%d %H:00:00 %z')
8
+ end
9
+
10
+ def end_of_hour(time)
11
+ TimeInZone.parse time.strftime('%Y-%m-%d %H:59:59 %z')
12
+ end
6
13
 
7
14
  def beginning_of_day(time)
8
- TimeInZone.parse time.strftime(TIME_FORMAT).sub(TIME_REGEXP, '00:00:00')
15
+ TimeInZone.parse time.strftime('%Y-%m-%d 00:00:00 %z')
9
16
  end
10
17
 
11
18
  def end_of_day(time)
12
- TimeInZone.parse time.strftime(TIME_FORMAT).sub(TIME_REGEXP, '23:59:59')
19
+ TimeInZone.parse time.strftime('%Y-%m-%d 23:59:59 %z')
20
+ end
21
+
22
+ def beginning_of_week(time)
23
+ date = beginning_of_day time
24
+ date - Interval.days(date.wday)
25
+ end
26
+
27
+ def end_of_week(time)
28
+ date = end_of_day time
29
+ date + Interval.days(6 - date.wday)
30
+ end
31
+
32
+ def beginning_of_month(time)
33
+ TimeInZone.parse time.strftime('%Y-%m-01 00:00:00 %z')
34
+ end
35
+
36
+ def end_of_month(time)
37
+ TimeInZone.parse time.strftime("%Y-%m-#{days_in_month(time.month, time.year)} 23:59:59 %z")
38
+ end
39
+
40
+ def beginning_of_year(time)
41
+ TimeInZone.parse time.strftime('%Y-01-01 00:00:00 %z')
42
+ end
43
+
44
+ def end_of_year(time)
45
+ TimeInZone.parse time.strftime('%Y-12-31 23:59:59 %z')
46
+ end
47
+
48
+ def days_in_month(month, year=nil)
49
+ return 29 if month == 2 && Date.leap?(year || TimeInZone.now.year)
50
+ MONTH_DAYS[month-1]
51
+ end
52
+
53
+ def months_ago(time, count)
54
+ TimeInZone.new (time.to_datetime << count).to_time, time.utc_offset
55
+ end
56
+
57
+ def months_after(time, count)
58
+ TimeInZone.new (time.to_datetime >> count).to_time, time.utc_offset
59
+ end
60
+
61
+ def years_ago(time, count)
62
+ months_ago time, count * 12
63
+ end
64
+
65
+ def years_after(time, count)
66
+ months_after time, count * 12
13
67
  end
14
68
 
15
69
  end
@@ -0,0 +1,2848 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module Timing
5
+ module NaturalTimeLanguage
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :expression
10
+ end
11
+
12
+ module Expression0
13
+ def moment
14
+ elements[1]
15
+ end
16
+
17
+ def zone_offset
18
+ elements[3]
19
+ end
20
+
21
+ end
22
+
23
+ def _nt_expression
24
+ start_index = index
25
+ if node_cache[:expression].has_key?(index)
26
+ cached = node_cache[:expression][index]
27
+ if cached
28
+ node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
29
+ @index = cached.interval.end
30
+ end
31
+ return cached
32
+ end
33
+
34
+ i0, s0 = index, []
35
+ s1, i1 = [], index
36
+ loop do
37
+ r2 = _nt_space
38
+ if r2
39
+ s1 << r2
40
+ else
41
+ break
42
+ end
43
+ end
44
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
45
+ s0 << r1
46
+ if r1
47
+ r3 = _nt_moment
48
+ s0 << r3
49
+ if r3
50
+ s4, i4 = [], index
51
+ loop do
52
+ r5 = _nt_space
53
+ if r5
54
+ s4 << r5
55
+ else
56
+ break
57
+ end
58
+ end
59
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
60
+ s0 << r4
61
+ if r4
62
+ r7 = _nt_zone_offset
63
+ if r7
64
+ r6 = r7
65
+ else
66
+ r6 = instantiate_node(SyntaxNode,input, index...index)
67
+ end
68
+ s0 << r6
69
+ if r6
70
+ s8, i8 = [], index
71
+ loop do
72
+ r9 = _nt_space
73
+ if r9
74
+ s8 << r9
75
+ else
76
+ break
77
+ end
78
+ end
79
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
80
+ s0 << r8
81
+ end
82
+ end
83
+ end
84
+ end
85
+ if s0.last
86
+ r0 = instantiate_node(Expression,input, i0...index, s0)
87
+ r0.extend(Expression0)
88
+ else
89
+ @index = i0
90
+ r0 = nil
91
+ end
92
+
93
+ node_cache[:expression][start_index] = r0
94
+
95
+ r0
96
+ end
97
+
98
+ def _nt_moment
99
+ start_index = index
100
+ if node_cache[:moment].has_key?(index)
101
+ cached = node_cache[:moment][index]
102
+ if cached
103
+ node_cache[:moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
104
+ @index = cached.interval.end
105
+ end
106
+ return cached
107
+ end
108
+
109
+ i0 = index
110
+ r1 = _nt_timestamp
111
+ if r1
112
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
113
+ r0 = r1
114
+ else
115
+ r2 = _nt_time_ago
116
+ if r2
117
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
118
+ r0 = r2
119
+ else
120
+ r3 = _nt_moment_at_time
121
+ if r3
122
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
123
+ r0 = r3
124
+ else
125
+ r4 = _nt_before_from_moment
126
+ if r4
127
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
128
+ r0 = r4
129
+ else
130
+ r5 = _nt_date_moment
131
+ if r5
132
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
133
+ r0 = r5
134
+ else
135
+ @index = i0
136
+ r0 = nil
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
142
+
143
+ node_cache[:moment][start_index] = r0
144
+
145
+ r0
146
+ end
147
+
148
+ def _nt_date_moment
149
+ start_index = index
150
+ if node_cache[:date_moment].has_key?(index)
151
+ cached = node_cache[:date_moment][index]
152
+ if cached
153
+ node_cache[:date_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
154
+ @index = cached.interval.end
155
+ end
156
+ return cached
157
+ end
158
+
159
+ i0 = index
160
+ r1 = _nt_named_moment
161
+ if r1
162
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
163
+ r0 = r1
164
+ else
165
+ r2 = _nt_last_next_day_name
166
+ if r2
167
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
168
+ r0 = r2
169
+ else
170
+ r3 = _nt_day_month_name_year
171
+ if r3
172
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
173
+ r0 = r3
174
+ else
175
+ r4 = _nt_year_month_day
176
+ if r4
177
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
178
+ r0 = r4
179
+ else
180
+ r5 = _nt_beginning_end_interval
181
+ if r5
182
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
183
+ r0 = r5
184
+ else
185
+ @index = i0
186
+ r0 = nil
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+
193
+ node_cache[:date_moment][start_index] = r0
194
+
195
+ r0
196
+ end
197
+
198
+ def _nt_named_moment
199
+ start_index = index
200
+ if node_cache[:named_moment].has_key?(index)
201
+ cached = node_cache[:named_moment][index]
202
+ if cached
203
+ node_cache[:named_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
204
+ @index = cached.interval.end
205
+ end
206
+ return cached
207
+ end
208
+
209
+ i0 = index
210
+ r1 = _nt_now
211
+ if r1
212
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
213
+ r0 = r1
214
+ else
215
+ r2 = _nt_today
216
+ if r2
217
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
218
+ r0 = r2
219
+ else
220
+ r3 = _nt_tomorrow
221
+ if r3
222
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
223
+ r0 = r3
224
+ else
225
+ r4 = _nt_yesterday
226
+ if r4
227
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
228
+ r0 = r4
229
+ else
230
+ @index = i0
231
+ r0 = nil
232
+ end
233
+ end
234
+ end
235
+ end
236
+
237
+ node_cache[:named_moment][start_index] = r0
238
+
239
+ r0
240
+ end
241
+
242
+ module LastNextDayName0
243
+ def direction
244
+ elements[0]
245
+ end
246
+
247
+ def day_name
248
+ elements[2]
249
+ end
250
+ end
251
+
252
+ def _nt_last_next_day_name
253
+ start_index = index
254
+ if node_cache[:last_next_day_name].has_key?(index)
255
+ cached = node_cache[:last_next_day_name][index]
256
+ if cached
257
+ node_cache[:last_next_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
258
+ @index = cached.interval.end
259
+ end
260
+ return cached
261
+ end
262
+
263
+ i0, s0 = index, []
264
+ r1 = _nt_last_next
265
+ s0 << r1
266
+ if r1
267
+ s2, i2 = [], index
268
+ loop do
269
+ r3 = _nt_space
270
+ if r3
271
+ s2 << r3
272
+ else
273
+ break
274
+ end
275
+ end
276
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
277
+ s0 << r2
278
+ if r2
279
+ r4 = _nt_day_name
280
+ s0 << r4
281
+ end
282
+ end
283
+ if s0.last
284
+ r0 = instantiate_node(LastNextDayName,input, i0...index, s0)
285
+ r0.extend(LastNextDayName0)
286
+ else
287
+ @index = i0
288
+ r0 = nil
289
+ end
290
+
291
+ node_cache[:last_next_day_name][start_index] = r0
292
+
293
+ r0
294
+ end
295
+
296
+ module DayMonthNameYear0
297
+ def day
298
+ elements[0]
299
+ end
300
+
301
+ def month
302
+ elements[2]
303
+ end
304
+
305
+ def year
306
+ elements[4]
307
+ end
308
+
309
+ end
310
+
311
+ def _nt_day_month_name_year
312
+ start_index = index
313
+ if node_cache[:day_month_name_year].has_key?(index)
314
+ cached = node_cache[:day_month_name_year][index]
315
+ if cached
316
+ node_cache[:day_month_name_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
317
+ @index = cached.interval.end
318
+ end
319
+ return cached
320
+ end
321
+
322
+ i0, s0 = index, []
323
+ r1 = _nt_integer
324
+ s0 << r1
325
+ if r1
326
+ s2, i2 = [], index
327
+ loop do
328
+ r3 = _nt_space
329
+ if r3
330
+ s2 << r3
331
+ else
332
+ break
333
+ end
334
+ end
335
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
336
+ s0 << r2
337
+ if r2
338
+ r4 = _nt_month_name
339
+ s0 << r4
340
+ if r4
341
+ s5, i5 = [], index
342
+ loop do
343
+ r6 = _nt_space
344
+ if r6
345
+ s5 << r6
346
+ else
347
+ break
348
+ end
349
+ end
350
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
351
+ s0 << r5
352
+ if r5
353
+ r8 = _nt_integer
354
+ if r8
355
+ r7 = r8
356
+ else
357
+ r7 = instantiate_node(SyntaxNode,input, index...index)
358
+ end
359
+ s0 << r7
360
+ if r7
361
+ s9, i9 = [], index
362
+ loop do
363
+ r10 = _nt_space
364
+ if r10
365
+ s9 << r10
366
+ else
367
+ break
368
+ end
369
+ end
370
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
371
+ s0 << r9
372
+ end
373
+ end
374
+ end
375
+ end
376
+ end
377
+ if s0.last
378
+ r0 = instantiate_node(DayMonthNameYear,input, i0...index, s0)
379
+ r0.extend(DayMonthNameYear0)
380
+ else
381
+ @index = i0
382
+ r0 = nil
383
+ end
384
+
385
+ node_cache[:day_month_name_year][start_index] = r0
386
+
387
+ r0
388
+ end
389
+
390
+ module YearMonthDay0
391
+ def year
392
+ elements[0]
393
+ end
394
+
395
+ def month
396
+ elements[2]
397
+ end
398
+
399
+ def day
400
+ elements[4]
401
+ end
402
+ end
403
+
404
+ def _nt_year_month_day
405
+ start_index = index
406
+ if node_cache[:year_month_day].has_key?(index)
407
+ cached = node_cache[:year_month_day][index]
408
+ if cached
409
+ node_cache[:year_month_day][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
410
+ @index = cached.interval.end
411
+ end
412
+ return cached
413
+ end
414
+
415
+ i0, s0 = index, []
416
+ r1 = _nt_integer
417
+ s0 << r1
418
+ if r1
419
+ if (match_len = has_terminal?('-', false, index))
420
+ r2 = true
421
+ @index += match_len
422
+ else
423
+ terminal_parse_failure('\'-\'')
424
+ r2 = nil
425
+ end
426
+ s0 << r2
427
+ if r2
428
+ r3 = _nt_integer
429
+ s0 << r3
430
+ if r3
431
+ if (match_len = has_terminal?('-', false, index))
432
+ r4 = true
433
+ @index += match_len
434
+ else
435
+ terminal_parse_failure('\'-\'')
436
+ r4 = nil
437
+ end
438
+ s0 << r4
439
+ if r4
440
+ r5 = _nt_integer
441
+ s0 << r5
442
+ end
443
+ end
444
+ end
445
+ end
446
+ if s0.last
447
+ r0 = instantiate_node(YearMonthDay,input, i0...index, s0)
448
+ r0.extend(YearMonthDay0)
449
+ else
450
+ @index = i0
451
+ r0 = nil
452
+ end
453
+
454
+ node_cache[:year_month_day][start_index] = r0
455
+
456
+ r0
457
+ end
458
+
459
+ module BeginningEndInterval0
460
+ def direction
461
+ elements[0]
462
+ end
463
+
464
+ def interval_type
465
+ elements[2]
466
+ end
467
+ end
468
+
469
+ def _nt_beginning_end_interval
470
+ start_index = index
471
+ if node_cache[:beginning_end_interval].has_key?(index)
472
+ cached = node_cache[:beginning_end_interval][index]
473
+ if cached
474
+ node_cache[:beginning_end_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
475
+ @index = cached.interval.end
476
+ end
477
+ return cached
478
+ end
479
+
480
+ i0, s0 = index, []
481
+ r1 = _nt_beginning_end
482
+ s0 << r1
483
+ if r1
484
+ s2, i2 = [], index
485
+ loop do
486
+ r3 = _nt_space
487
+ if r3
488
+ s2 << r3
489
+ else
490
+ break
491
+ end
492
+ end
493
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
494
+ s0 << r2
495
+ if r2
496
+ r4 = _nt_interval
497
+ s0 << r4
498
+ end
499
+ end
500
+ if s0.last
501
+ r0 = instantiate_node(BeginningEndInterval,input, i0...index, s0)
502
+ r0.extend(BeginningEndInterval0)
503
+ else
504
+ @index = i0
505
+ r0 = nil
506
+ end
507
+
508
+ node_cache[:beginning_end_interval][start_index] = r0
509
+
510
+ r0
511
+ end
512
+
513
+ module TimeAgo0
514
+ def number
515
+ elements[0]
516
+ end
517
+
518
+ def interval_type
519
+ elements[2]
520
+ end
521
+
522
+ end
523
+
524
+ def _nt_time_ago
525
+ start_index = index
526
+ if node_cache[:time_ago].has_key?(index)
527
+ cached = node_cache[:time_ago][index]
528
+ if cached
529
+ node_cache[:time_ago][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
530
+ @index = cached.interval.end
531
+ end
532
+ return cached
533
+ end
534
+
535
+ i0, s0 = index, []
536
+ r1 = _nt_integer
537
+ s0 << r1
538
+ if r1
539
+ s2, i2 = [], index
540
+ loop do
541
+ r3 = _nt_space
542
+ if r3
543
+ s2 << r3
544
+ else
545
+ break
546
+ end
547
+ end
548
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
549
+ s0 << r2
550
+ if r2
551
+ r4 = _nt_interval
552
+ s0 << r4
553
+ if r4
554
+ s5, i5 = [], index
555
+ loop do
556
+ r6 = _nt_space
557
+ if r6
558
+ s5 << r6
559
+ else
560
+ break
561
+ end
562
+ end
563
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
564
+ s0 << r5
565
+ if r5
566
+ if (match_len = has_terminal?('ago', :insens, index))
567
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
568
+ @index += match_len
569
+ else
570
+ terminal_parse_failure('\'ago\'')
571
+ r7 = nil
572
+ end
573
+ s0 << r7
574
+ end
575
+ end
576
+ end
577
+ end
578
+ if s0.last
579
+ r0 = instantiate_node(TimeAgo,input, i0...index, s0)
580
+ r0.extend(TimeAgo0)
581
+ else
582
+ @index = i0
583
+ r0 = nil
584
+ end
585
+
586
+ node_cache[:time_ago][start_index] = r0
587
+
588
+ r0
589
+ end
590
+
591
+ module MomentAtTime0
592
+ def moment
593
+ elements[0]
594
+ end
595
+
596
+ def time
597
+ elements[4]
598
+ end
599
+ end
600
+
601
+ def _nt_moment_at_time
602
+ start_index = index
603
+ if node_cache[:moment_at_time].has_key?(index)
604
+ cached = node_cache[:moment_at_time][index]
605
+ if cached
606
+ node_cache[:moment_at_time][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
607
+ @index = cached.interval.end
608
+ end
609
+ return cached
610
+ end
611
+
612
+ i0, s0 = index, []
613
+ r1 = _nt_date_moment
614
+ s0 << r1
615
+ if r1
616
+ s2, i2 = [], index
617
+ loop do
618
+ r3 = _nt_space
619
+ if r3
620
+ s2 << r3
621
+ else
622
+ break
623
+ end
624
+ end
625
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
626
+ s0 << r2
627
+ if r2
628
+ if (match_len = has_terminal?('at', :insens, index))
629
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
630
+ @index += match_len
631
+ else
632
+ terminal_parse_failure('\'at\'')
633
+ r4 = nil
634
+ end
635
+ s0 << r4
636
+ if r4
637
+ s5, i5 = [], index
638
+ loop do
639
+ r6 = _nt_space
640
+ if r6
641
+ s5 << r6
642
+ else
643
+ break
644
+ end
645
+ end
646
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
647
+ s0 << r5
648
+ if r5
649
+ r7 = _nt_hour_minute_second
650
+ s0 << r7
651
+ end
652
+ end
653
+ end
654
+ end
655
+ if s0.last
656
+ r0 = instantiate_node(MomentAtTime,input, i0...index, s0)
657
+ r0.extend(MomentAtTime0)
658
+ else
659
+ @index = i0
660
+ r0 = nil
661
+ end
662
+
663
+ node_cache[:moment_at_time][start_index] = r0
664
+
665
+ r0
666
+ end
667
+
668
+ module BeforeFromMoment0
669
+ def number
670
+ elements[0]
671
+ end
672
+
673
+ def interval_type
674
+ elements[2]
675
+ end
676
+
677
+ def direction
678
+ elements[4]
679
+ end
680
+
681
+ def moment
682
+ elements[6]
683
+ end
684
+ end
685
+
686
+ def _nt_before_from_moment
687
+ start_index = index
688
+ if node_cache[:before_from_moment].has_key?(index)
689
+ cached = node_cache[:before_from_moment][index]
690
+ if cached
691
+ node_cache[:before_from_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
692
+ @index = cached.interval.end
693
+ end
694
+ return cached
695
+ end
696
+
697
+ i0, s0 = index, []
698
+ r1 = _nt_integer
699
+ s0 << r1
700
+ if r1
701
+ s2, i2 = [], index
702
+ loop do
703
+ r3 = _nt_space
704
+ if r3
705
+ s2 << r3
706
+ else
707
+ break
708
+ end
709
+ end
710
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
711
+ s0 << r2
712
+ if r2
713
+ r4 = _nt_interval
714
+ s0 << r4
715
+ if r4
716
+ s5, i5 = [], index
717
+ loop do
718
+ r6 = _nt_space
719
+ if r6
720
+ s5 << r6
721
+ else
722
+ break
723
+ end
724
+ end
725
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
726
+ s0 << r5
727
+ if r5
728
+ r7 = _nt_before_from
729
+ s0 << r7
730
+ if r7
731
+ s8, i8 = [], index
732
+ loop do
733
+ r9 = _nt_space
734
+ if r9
735
+ s8 << r9
736
+ else
737
+ break
738
+ end
739
+ end
740
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
741
+ s0 << r8
742
+ if r8
743
+ r10 = _nt_moment
744
+ s0 << r10
745
+ end
746
+ end
747
+ end
748
+ end
749
+ end
750
+ end
751
+ if s0.last
752
+ r0 = instantiate_node(BeforeFromMoment,input, i0...index, s0)
753
+ r0.extend(BeforeFromMoment0)
754
+ else
755
+ @index = i0
756
+ r0 = nil
757
+ end
758
+
759
+ node_cache[:before_from_moment][start_index] = r0
760
+
761
+ r0
762
+ end
763
+
764
+ module Timestamp0
765
+ end
766
+
767
+ def _nt_timestamp
768
+ start_index = index
769
+ if node_cache[:timestamp].has_key?(index)
770
+ cached = node_cache[:timestamp][index]
771
+ if cached
772
+ node_cache[:timestamp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
773
+ @index = cached.interval.end
774
+ end
775
+ return cached
776
+ end
777
+
778
+ i0, s0 = index, []
779
+ s1, i1 = [], index
780
+ loop do
781
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
782
+ r2 = true
783
+ @index += 1
784
+ else
785
+ terminal_parse_failure('[\\d]')
786
+ r2 = nil
787
+ end
788
+ if r2
789
+ s1 << r2
790
+ else
791
+ break
792
+ end
793
+ if s1.size == 4
794
+ break
795
+ end
796
+ end
797
+ if s1.size < 4
798
+ @index = i1
799
+ r1 = nil
800
+ else
801
+ if s1.size < 4
802
+ terminal_failures.pop
803
+ end
804
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
805
+ end
806
+ s0 << r1
807
+ if r1
808
+ if (match_len = has_terminal?('-', false, index))
809
+ r3 = true
810
+ @index += match_len
811
+ else
812
+ terminal_parse_failure('\'-\'')
813
+ r3 = nil
814
+ end
815
+ s0 << r3
816
+ if r3
817
+ s4, i4 = [], index
818
+ loop do
819
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
820
+ r5 = true
821
+ @index += 1
822
+ else
823
+ terminal_parse_failure('[\\d]')
824
+ r5 = nil
825
+ end
826
+ if r5
827
+ s4 << r5
828
+ else
829
+ break
830
+ end
831
+ if s4.size == 2
832
+ break
833
+ end
834
+ end
835
+ if s4.size < 2
836
+ @index = i4
837
+ r4 = nil
838
+ else
839
+ if s4.size < 2
840
+ terminal_failures.pop
841
+ end
842
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
843
+ end
844
+ s0 << r4
845
+ if r4
846
+ if (match_len = has_terminal?('-', false, index))
847
+ r6 = true
848
+ @index += match_len
849
+ else
850
+ terminal_parse_failure('\'-\'')
851
+ r6 = nil
852
+ end
853
+ s0 << r6
854
+ if r6
855
+ s7, i7 = [], index
856
+ loop do
857
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
858
+ r8 = true
859
+ @index += 1
860
+ else
861
+ terminal_parse_failure('[\\d]')
862
+ r8 = nil
863
+ end
864
+ if r8
865
+ s7 << r8
866
+ else
867
+ break
868
+ end
869
+ if s7.size == 2
870
+ break
871
+ end
872
+ end
873
+ if s7.size < 2
874
+ @index = i7
875
+ r7 = nil
876
+ else
877
+ if s7.size < 2
878
+ terminal_failures.pop
879
+ end
880
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
881
+ end
882
+ s0 << r7
883
+ if r7
884
+ s9, i9 = [], index
885
+ loop do
886
+ r10 = _nt_space
887
+ if r10
888
+ s9 << r10
889
+ else
890
+ break
891
+ end
892
+ end
893
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
894
+ s0 << r9
895
+ if r9
896
+ if (match_len = has_terminal?('T', false, index))
897
+ r12 = true
898
+ @index += match_len
899
+ else
900
+ terminal_parse_failure('\'T\'')
901
+ r12 = nil
902
+ end
903
+ if r12
904
+ r11 = r12
905
+ else
906
+ r11 = instantiate_node(SyntaxNode,input, index...index)
907
+ end
908
+ s0 << r11
909
+ if r11
910
+ s13, i13 = [], index
911
+ loop do
912
+ r14 = _nt_space
913
+ if r14
914
+ s13 << r14
915
+ else
916
+ break
917
+ end
918
+ end
919
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
920
+ s0 << r13
921
+ if r13
922
+ s15, i15 = [], index
923
+ loop do
924
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
925
+ r16 = true
926
+ @index += 1
927
+ else
928
+ terminal_parse_failure('[\\d]')
929
+ r16 = nil
930
+ end
931
+ if r16
932
+ s15 << r16
933
+ else
934
+ break
935
+ end
936
+ if s15.size == 2
937
+ break
938
+ end
939
+ end
940
+ if s15.size < 2
941
+ @index = i15
942
+ r15 = nil
943
+ else
944
+ if s15.size < 2
945
+ terminal_failures.pop
946
+ end
947
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
948
+ end
949
+ s0 << r15
950
+ if r15
951
+ if (match_len = has_terminal?(':', false, index))
952
+ r17 = true
953
+ @index += match_len
954
+ else
955
+ terminal_parse_failure('\':\'')
956
+ r17 = nil
957
+ end
958
+ s0 << r17
959
+ if r17
960
+ s18, i18 = [], index
961
+ loop do
962
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
963
+ r19 = true
964
+ @index += 1
965
+ else
966
+ terminal_parse_failure('[\\d]')
967
+ r19 = nil
968
+ end
969
+ if r19
970
+ s18 << r19
971
+ else
972
+ break
973
+ end
974
+ if s18.size == 2
975
+ break
976
+ end
977
+ end
978
+ if s18.size < 2
979
+ @index = i18
980
+ r18 = nil
981
+ else
982
+ if s18.size < 2
983
+ terminal_failures.pop
984
+ end
985
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
986
+ end
987
+ s0 << r18
988
+ if r18
989
+ if (match_len = has_terminal?(':', false, index))
990
+ r20 = true
991
+ @index += match_len
992
+ else
993
+ terminal_parse_failure('\':\'')
994
+ r20 = nil
995
+ end
996
+ s0 << r20
997
+ if r20
998
+ s21, i21 = [], index
999
+ loop do
1000
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
1001
+ r22 = true
1002
+ @index += 1
1003
+ else
1004
+ terminal_parse_failure('[\\d]')
1005
+ r22 = nil
1006
+ end
1007
+ if r22
1008
+ s21 << r22
1009
+ else
1010
+ break
1011
+ end
1012
+ if s21.size == 2
1013
+ break
1014
+ end
1015
+ end
1016
+ if s21.size < 2
1017
+ @index = i21
1018
+ r21 = nil
1019
+ else
1020
+ if s21.size < 2
1021
+ terminal_failures.pop
1022
+ end
1023
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
1024
+ end
1025
+ s0 << r21
1026
+ end
1027
+ end
1028
+ end
1029
+ end
1030
+ end
1031
+ end
1032
+ end
1033
+ end
1034
+ end
1035
+ end
1036
+ end
1037
+ end
1038
+ if s0.last
1039
+ r0 = instantiate_node(Timestamp,input, i0...index, s0)
1040
+ r0.extend(Timestamp0)
1041
+ else
1042
+ @index = i0
1043
+ r0 = nil
1044
+ end
1045
+
1046
+ node_cache[:timestamp][start_index] = r0
1047
+
1048
+ r0
1049
+ end
1050
+
1051
+ def _nt_now
1052
+ start_index = index
1053
+ if node_cache[:now].has_key?(index)
1054
+ cached = node_cache[:now][index]
1055
+ if cached
1056
+ node_cache[:now][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1057
+ @index = cached.interval.end
1058
+ end
1059
+ return cached
1060
+ end
1061
+
1062
+ if (match_len = has_terminal?('now', :insens, index))
1063
+ r0 = instantiate_node(Now,input, index...(index + match_len))
1064
+ @index += match_len
1065
+ else
1066
+ terminal_parse_failure('\'now\'')
1067
+ r0 = nil
1068
+ end
1069
+
1070
+ node_cache[:now][start_index] = r0
1071
+
1072
+ r0
1073
+ end
1074
+
1075
+ def _nt_today
1076
+ start_index = index
1077
+ if node_cache[:today].has_key?(index)
1078
+ cached = node_cache[:today][index]
1079
+ if cached
1080
+ node_cache[:today][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1081
+ @index = cached.interval.end
1082
+ end
1083
+ return cached
1084
+ end
1085
+
1086
+ if (match_len = has_terminal?('today', :insens, index))
1087
+ r0 = instantiate_node(Today,input, index...(index + match_len))
1088
+ @index += match_len
1089
+ else
1090
+ terminal_parse_failure('\'today\'')
1091
+ r0 = nil
1092
+ end
1093
+
1094
+ node_cache[:today][start_index] = r0
1095
+
1096
+ r0
1097
+ end
1098
+
1099
+ def _nt_tomorrow
1100
+ start_index = index
1101
+ if node_cache[:tomorrow].has_key?(index)
1102
+ cached = node_cache[:tomorrow][index]
1103
+ if cached
1104
+ node_cache[:tomorrow][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1105
+ @index = cached.interval.end
1106
+ end
1107
+ return cached
1108
+ end
1109
+
1110
+ if (match_len = has_terminal?('tomorrow', :insens, index))
1111
+ r0 = instantiate_node(Tomorrow,input, index...(index + match_len))
1112
+ @index += match_len
1113
+ else
1114
+ terminal_parse_failure('\'tomorrow\'')
1115
+ r0 = nil
1116
+ end
1117
+
1118
+ node_cache[:tomorrow][start_index] = r0
1119
+
1120
+ r0
1121
+ end
1122
+
1123
+ def _nt_yesterday
1124
+ start_index = index
1125
+ if node_cache[:yesterday].has_key?(index)
1126
+ cached = node_cache[:yesterday][index]
1127
+ if cached
1128
+ node_cache[:yesterday][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1129
+ @index = cached.interval.end
1130
+ end
1131
+ return cached
1132
+ end
1133
+
1134
+ if (match_len = has_terminal?('yesterday', :insens, index))
1135
+ r0 = instantiate_node(Yesterday,input, index...(index + match_len))
1136
+ @index += match_len
1137
+ else
1138
+ terminal_parse_failure('\'yesterday\'')
1139
+ r0 = nil
1140
+ end
1141
+
1142
+ node_cache[:yesterday][start_index] = r0
1143
+
1144
+ r0
1145
+ end
1146
+
1147
+ def _nt_last_next
1148
+ start_index = index
1149
+ if node_cache[:last_next].has_key?(index)
1150
+ cached = node_cache[:last_next][index]
1151
+ if cached
1152
+ node_cache[:last_next][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1153
+ @index = cached.interval.end
1154
+ end
1155
+ return cached
1156
+ end
1157
+
1158
+ i0 = index
1159
+ r1 = _nt_last
1160
+ if r1
1161
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1162
+ r0 = r1
1163
+ else
1164
+ r2 = _nt_next
1165
+ if r2
1166
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1167
+ r0 = r2
1168
+ else
1169
+ @index = i0
1170
+ r0 = nil
1171
+ end
1172
+ end
1173
+
1174
+ node_cache[:last_next][start_index] = r0
1175
+
1176
+ r0
1177
+ end
1178
+
1179
+ def _nt_last
1180
+ start_index = index
1181
+ if node_cache[:last].has_key?(index)
1182
+ cached = node_cache[:last][index]
1183
+ if cached
1184
+ node_cache[:last][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1185
+ @index = cached.interval.end
1186
+ end
1187
+ return cached
1188
+ end
1189
+
1190
+ if (match_len = has_terminal?('last', :insens, index))
1191
+ r0 = instantiate_node(LastNext,input, index...(index + match_len))
1192
+ @index += match_len
1193
+ else
1194
+ terminal_parse_failure('\'last\'')
1195
+ r0 = nil
1196
+ end
1197
+
1198
+ node_cache[:last][start_index] = r0
1199
+
1200
+ r0
1201
+ end
1202
+
1203
+ def _nt_next
1204
+ start_index = index
1205
+ if node_cache[:next].has_key?(index)
1206
+ cached = node_cache[:next][index]
1207
+ if cached
1208
+ node_cache[:next][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1209
+ @index = cached.interval.end
1210
+ end
1211
+ return cached
1212
+ end
1213
+
1214
+ if (match_len = has_terminal?('next', :insens, index))
1215
+ r0 = instantiate_node(LastNext,input, index...(index + match_len))
1216
+ @index += match_len
1217
+ else
1218
+ terminal_parse_failure('\'next\'')
1219
+ r0 = nil
1220
+ end
1221
+
1222
+ node_cache[:next][start_index] = r0
1223
+
1224
+ r0
1225
+ end
1226
+
1227
+ def _nt_beginning_end
1228
+ start_index = index
1229
+ if node_cache[:beginning_end].has_key?(index)
1230
+ cached = node_cache[:beginning_end][index]
1231
+ if cached
1232
+ node_cache[:beginning_end][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1233
+ @index = cached.interval.end
1234
+ end
1235
+ return cached
1236
+ end
1237
+
1238
+ i0 = index
1239
+ r1 = _nt_beginning_of
1240
+ if r1
1241
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1242
+ r0 = r1
1243
+ else
1244
+ r2 = _nt_end_of
1245
+ if r2
1246
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1247
+ r0 = r2
1248
+ else
1249
+ @index = i0
1250
+ r0 = nil
1251
+ end
1252
+ end
1253
+
1254
+ node_cache[:beginning_end][start_index] = r0
1255
+
1256
+ r0
1257
+ end
1258
+
1259
+ module BeginningOf0
1260
+ def direction
1261
+ elements[0]
1262
+ end
1263
+
1264
+ end
1265
+
1266
+ def _nt_beginning_of
1267
+ start_index = index
1268
+ if node_cache[:beginning_of].has_key?(index)
1269
+ cached = node_cache[:beginning_of][index]
1270
+ if cached
1271
+ node_cache[:beginning_of][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1272
+ @index = cached.interval.end
1273
+ end
1274
+ return cached
1275
+ end
1276
+
1277
+ i0, s0 = index, []
1278
+ if (match_len = has_terminal?('beginning', :insens, index))
1279
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1280
+ @index += match_len
1281
+ else
1282
+ terminal_parse_failure('\'beginning\'')
1283
+ r1 = nil
1284
+ end
1285
+ s0 << r1
1286
+ if r1
1287
+ s2, i2 = [], index
1288
+ loop do
1289
+ r3 = _nt_space
1290
+ if r3
1291
+ s2 << r3
1292
+ else
1293
+ break
1294
+ end
1295
+ end
1296
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1297
+ s0 << r2
1298
+ if r2
1299
+ if (match_len = has_terminal?('of', :insens, index))
1300
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1301
+ @index += match_len
1302
+ else
1303
+ terminal_parse_failure('\'of\'')
1304
+ r4 = nil
1305
+ end
1306
+ s0 << r4
1307
+ end
1308
+ end
1309
+ if s0.last
1310
+ r0 = instantiate_node(BeginningEnd,input, i0...index, s0)
1311
+ r0.extend(BeginningOf0)
1312
+ else
1313
+ @index = i0
1314
+ r0 = nil
1315
+ end
1316
+
1317
+ node_cache[:beginning_of][start_index] = r0
1318
+
1319
+ r0
1320
+ end
1321
+
1322
+ module EndOf0
1323
+ def direction
1324
+ elements[0]
1325
+ end
1326
+
1327
+ end
1328
+
1329
+ def _nt_end_of
1330
+ start_index = index
1331
+ if node_cache[:end_of].has_key?(index)
1332
+ cached = node_cache[:end_of][index]
1333
+ if cached
1334
+ node_cache[:end_of][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1335
+ @index = cached.interval.end
1336
+ end
1337
+ return cached
1338
+ end
1339
+
1340
+ i0, s0 = index, []
1341
+ if (match_len = has_terminal?('end', :insens, index))
1342
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1343
+ @index += match_len
1344
+ else
1345
+ terminal_parse_failure('\'end\'')
1346
+ r1 = nil
1347
+ end
1348
+ s0 << r1
1349
+ if r1
1350
+ s2, i2 = [], index
1351
+ loop do
1352
+ r3 = _nt_space
1353
+ if r3
1354
+ s2 << r3
1355
+ else
1356
+ break
1357
+ end
1358
+ end
1359
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1360
+ s0 << r2
1361
+ if r2
1362
+ if (match_len = has_terminal?('of', :insens, index))
1363
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1364
+ @index += match_len
1365
+ else
1366
+ terminal_parse_failure('\'of\'')
1367
+ r4 = nil
1368
+ end
1369
+ s0 << r4
1370
+ end
1371
+ end
1372
+ if s0.last
1373
+ r0 = instantiate_node(BeginningEnd,input, i0...index, s0)
1374
+ r0.extend(EndOf0)
1375
+ else
1376
+ @index = i0
1377
+ r0 = nil
1378
+ end
1379
+
1380
+ node_cache[:end_of][start_index] = r0
1381
+
1382
+ r0
1383
+ end
1384
+
1385
+ def _nt_before_from
1386
+ start_index = index
1387
+ if node_cache[:before_from].has_key?(index)
1388
+ cached = node_cache[:before_from][index]
1389
+ if cached
1390
+ node_cache[:before_from][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1391
+ @index = cached.interval.end
1392
+ end
1393
+ return cached
1394
+ end
1395
+
1396
+ i0 = index
1397
+ r1 = _nt_before
1398
+ if r1
1399
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1400
+ r0 = r1
1401
+ else
1402
+ r2 = _nt_from
1403
+ if r2
1404
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1405
+ r0 = r2
1406
+ else
1407
+ @index = i0
1408
+ r0 = nil
1409
+ end
1410
+ end
1411
+
1412
+ node_cache[:before_from][start_index] = r0
1413
+
1414
+ r0
1415
+ end
1416
+
1417
+ def _nt_before
1418
+ start_index = index
1419
+ if node_cache[:before].has_key?(index)
1420
+ cached = node_cache[:before][index]
1421
+ if cached
1422
+ node_cache[:before][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1423
+ @index = cached.interval.end
1424
+ end
1425
+ return cached
1426
+ end
1427
+
1428
+ if (match_len = has_terminal?('before', :insens, index))
1429
+ r0 = instantiate_node(BeforeFrom,input, index...(index + match_len))
1430
+ @index += match_len
1431
+ else
1432
+ terminal_parse_failure('\'before\'')
1433
+ r0 = nil
1434
+ end
1435
+
1436
+ node_cache[:before][start_index] = r0
1437
+
1438
+ r0
1439
+ end
1440
+
1441
+ def _nt_from
1442
+ start_index = index
1443
+ if node_cache[:from].has_key?(index)
1444
+ cached = node_cache[:from][index]
1445
+ if cached
1446
+ node_cache[:from][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1447
+ @index = cached.interval.end
1448
+ end
1449
+ return cached
1450
+ end
1451
+
1452
+ if (match_len = has_terminal?('from', :insens, index))
1453
+ r0 = instantiate_node(BeforeFrom,input, index...(index + match_len))
1454
+ @index += match_len
1455
+ else
1456
+ terminal_parse_failure('\'from\'')
1457
+ r0 = nil
1458
+ end
1459
+
1460
+ node_cache[:from][start_index] = r0
1461
+
1462
+ r0
1463
+ end
1464
+
1465
+ def _nt_interval
1466
+ start_index = index
1467
+ if node_cache[:interval].has_key?(index)
1468
+ cached = node_cache[:interval][index]
1469
+ if cached
1470
+ node_cache[:interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1471
+ @index = cached.interval.end
1472
+ end
1473
+ return cached
1474
+ end
1475
+
1476
+ i0 = index
1477
+ r1 = _nt_second_interval
1478
+ if r1
1479
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1480
+ r0 = r1
1481
+ else
1482
+ r2 = _nt_minute_interval
1483
+ if r2
1484
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1485
+ r0 = r2
1486
+ else
1487
+ r3 = _nt_hour_interval
1488
+ if r3
1489
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1490
+ r0 = r3
1491
+ else
1492
+ r4 = _nt_day_interval
1493
+ if r4
1494
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1495
+ r0 = r4
1496
+ else
1497
+ r5 = _nt_week_interval
1498
+ if r5
1499
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1500
+ r0 = r5
1501
+ else
1502
+ r6 = _nt_month_interval
1503
+ if r6
1504
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
1505
+ r0 = r6
1506
+ else
1507
+ r7 = _nt_year_interval
1508
+ if r7
1509
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
1510
+ r0 = r7
1511
+ else
1512
+ @index = i0
1513
+ r0 = nil
1514
+ end
1515
+ end
1516
+ end
1517
+ end
1518
+ end
1519
+ end
1520
+ end
1521
+
1522
+ node_cache[:interval][start_index] = r0
1523
+
1524
+ r0
1525
+ end
1526
+
1527
+ module SecondInterval0
1528
+ end
1529
+
1530
+ def _nt_second_interval
1531
+ start_index = index
1532
+ if node_cache[:second_interval].has_key?(index)
1533
+ cached = node_cache[:second_interval][index]
1534
+ if cached
1535
+ node_cache[:second_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1536
+ @index = cached.interval.end
1537
+ end
1538
+ return cached
1539
+ end
1540
+
1541
+ i0, s0 = index, []
1542
+ if (match_len = has_terminal?('second', :insens, index))
1543
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1544
+ @index += match_len
1545
+ else
1546
+ terminal_parse_failure('\'second\'')
1547
+ r1 = nil
1548
+ end
1549
+ s0 << r1
1550
+ if r1
1551
+ if (match_len = has_terminal?('s', :insens, index))
1552
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1553
+ @index += match_len
1554
+ else
1555
+ terminal_parse_failure('\'s\'')
1556
+ r3 = nil
1557
+ end
1558
+ if r3
1559
+ r2 = r3
1560
+ else
1561
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1562
+ end
1563
+ s0 << r2
1564
+ end
1565
+ if s0.last
1566
+ r0 = instantiate_node(SecondInterval,input, i0...index, s0)
1567
+ r0.extend(SecondInterval0)
1568
+ else
1569
+ @index = i0
1570
+ r0 = nil
1571
+ end
1572
+
1573
+ node_cache[:second_interval][start_index] = r0
1574
+
1575
+ r0
1576
+ end
1577
+
1578
+ module MinuteInterval0
1579
+ end
1580
+
1581
+ def _nt_minute_interval
1582
+ start_index = index
1583
+ if node_cache[:minute_interval].has_key?(index)
1584
+ cached = node_cache[:minute_interval][index]
1585
+ if cached
1586
+ node_cache[:minute_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1587
+ @index = cached.interval.end
1588
+ end
1589
+ return cached
1590
+ end
1591
+
1592
+ i0, s0 = index, []
1593
+ if (match_len = has_terminal?('minute', :insens, index))
1594
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1595
+ @index += match_len
1596
+ else
1597
+ terminal_parse_failure('\'minute\'')
1598
+ r1 = nil
1599
+ end
1600
+ s0 << r1
1601
+ if r1
1602
+ if (match_len = has_terminal?('s', :insens, index))
1603
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1604
+ @index += match_len
1605
+ else
1606
+ terminal_parse_failure('\'s\'')
1607
+ r3 = nil
1608
+ end
1609
+ if r3
1610
+ r2 = r3
1611
+ else
1612
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1613
+ end
1614
+ s0 << r2
1615
+ end
1616
+ if s0.last
1617
+ r0 = instantiate_node(MinuteInterval,input, i0...index, s0)
1618
+ r0.extend(MinuteInterval0)
1619
+ else
1620
+ @index = i0
1621
+ r0 = nil
1622
+ end
1623
+
1624
+ node_cache[:minute_interval][start_index] = r0
1625
+
1626
+ r0
1627
+ end
1628
+
1629
+ module HourInterval0
1630
+ end
1631
+
1632
+ def _nt_hour_interval
1633
+ start_index = index
1634
+ if node_cache[:hour_interval].has_key?(index)
1635
+ cached = node_cache[:hour_interval][index]
1636
+ if cached
1637
+ node_cache[:hour_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1638
+ @index = cached.interval.end
1639
+ end
1640
+ return cached
1641
+ end
1642
+
1643
+ i0, s0 = index, []
1644
+ if (match_len = has_terminal?('hour', :insens, index))
1645
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1646
+ @index += match_len
1647
+ else
1648
+ terminal_parse_failure('\'hour\'')
1649
+ r1 = nil
1650
+ end
1651
+ s0 << r1
1652
+ if r1
1653
+ if (match_len = has_terminal?('s', :insens, index))
1654
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1655
+ @index += match_len
1656
+ else
1657
+ terminal_parse_failure('\'s\'')
1658
+ r3 = nil
1659
+ end
1660
+ if r3
1661
+ r2 = r3
1662
+ else
1663
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1664
+ end
1665
+ s0 << r2
1666
+ end
1667
+ if s0.last
1668
+ r0 = instantiate_node(HourInterval,input, i0...index, s0)
1669
+ r0.extend(HourInterval0)
1670
+ else
1671
+ @index = i0
1672
+ r0 = nil
1673
+ end
1674
+
1675
+ node_cache[:hour_interval][start_index] = r0
1676
+
1677
+ r0
1678
+ end
1679
+
1680
+ module DayInterval0
1681
+ end
1682
+
1683
+ def _nt_day_interval
1684
+ start_index = index
1685
+ if node_cache[:day_interval].has_key?(index)
1686
+ cached = node_cache[:day_interval][index]
1687
+ if cached
1688
+ node_cache[:day_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1689
+ @index = cached.interval.end
1690
+ end
1691
+ return cached
1692
+ end
1693
+
1694
+ i0, s0 = index, []
1695
+ if (match_len = has_terminal?('day', :insens, index))
1696
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1697
+ @index += match_len
1698
+ else
1699
+ terminal_parse_failure('\'day\'')
1700
+ r1 = nil
1701
+ end
1702
+ s0 << r1
1703
+ if r1
1704
+ if (match_len = has_terminal?('s', :insens, index))
1705
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1706
+ @index += match_len
1707
+ else
1708
+ terminal_parse_failure('\'s\'')
1709
+ r3 = nil
1710
+ end
1711
+ if r3
1712
+ r2 = r3
1713
+ else
1714
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1715
+ end
1716
+ s0 << r2
1717
+ end
1718
+ if s0.last
1719
+ r0 = instantiate_node(DayInterval,input, i0...index, s0)
1720
+ r0.extend(DayInterval0)
1721
+ else
1722
+ @index = i0
1723
+ r0 = nil
1724
+ end
1725
+
1726
+ node_cache[:day_interval][start_index] = r0
1727
+
1728
+ r0
1729
+ end
1730
+
1731
+ module WeekInterval0
1732
+ end
1733
+
1734
+ def _nt_week_interval
1735
+ start_index = index
1736
+ if node_cache[:week_interval].has_key?(index)
1737
+ cached = node_cache[:week_interval][index]
1738
+ if cached
1739
+ node_cache[:week_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1740
+ @index = cached.interval.end
1741
+ end
1742
+ return cached
1743
+ end
1744
+
1745
+ i0, s0 = index, []
1746
+ if (match_len = has_terminal?('week', :insens, index))
1747
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1748
+ @index += match_len
1749
+ else
1750
+ terminal_parse_failure('\'week\'')
1751
+ r1 = nil
1752
+ end
1753
+ s0 << r1
1754
+ if r1
1755
+ if (match_len = has_terminal?('s', :insens, index))
1756
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1757
+ @index += match_len
1758
+ else
1759
+ terminal_parse_failure('\'s\'')
1760
+ r3 = nil
1761
+ end
1762
+ if r3
1763
+ r2 = r3
1764
+ else
1765
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1766
+ end
1767
+ s0 << r2
1768
+ end
1769
+ if s0.last
1770
+ r0 = instantiate_node(WeekInterval,input, i0...index, s0)
1771
+ r0.extend(WeekInterval0)
1772
+ else
1773
+ @index = i0
1774
+ r0 = nil
1775
+ end
1776
+
1777
+ node_cache[:week_interval][start_index] = r0
1778
+
1779
+ r0
1780
+ end
1781
+
1782
+ module MonthInterval0
1783
+ end
1784
+
1785
+ def _nt_month_interval
1786
+ start_index = index
1787
+ if node_cache[:month_interval].has_key?(index)
1788
+ cached = node_cache[:month_interval][index]
1789
+ if cached
1790
+ node_cache[:month_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1791
+ @index = cached.interval.end
1792
+ end
1793
+ return cached
1794
+ end
1795
+
1796
+ i0, s0 = index, []
1797
+ if (match_len = has_terminal?('month', :insens, index))
1798
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1799
+ @index += match_len
1800
+ else
1801
+ terminal_parse_failure('\'month\'')
1802
+ r1 = nil
1803
+ end
1804
+ s0 << r1
1805
+ if r1
1806
+ if (match_len = has_terminal?('s', :insens, index))
1807
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1808
+ @index += match_len
1809
+ else
1810
+ terminal_parse_failure('\'s\'')
1811
+ r3 = nil
1812
+ end
1813
+ if r3
1814
+ r2 = r3
1815
+ else
1816
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1817
+ end
1818
+ s0 << r2
1819
+ end
1820
+ if s0.last
1821
+ r0 = instantiate_node(MonthInterval,input, i0...index, s0)
1822
+ r0.extend(MonthInterval0)
1823
+ else
1824
+ @index = i0
1825
+ r0 = nil
1826
+ end
1827
+
1828
+ node_cache[:month_interval][start_index] = r0
1829
+
1830
+ r0
1831
+ end
1832
+
1833
+ module YearInterval0
1834
+ end
1835
+
1836
+ def _nt_year_interval
1837
+ start_index = index
1838
+ if node_cache[:year_interval].has_key?(index)
1839
+ cached = node_cache[:year_interval][index]
1840
+ if cached
1841
+ node_cache[:year_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1842
+ @index = cached.interval.end
1843
+ end
1844
+ return cached
1845
+ end
1846
+
1847
+ i0, s0 = index, []
1848
+ if (match_len = has_terminal?('year', :insens, index))
1849
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1850
+ @index += match_len
1851
+ else
1852
+ terminal_parse_failure('\'year\'')
1853
+ r1 = nil
1854
+ end
1855
+ s0 << r1
1856
+ if r1
1857
+ if (match_len = has_terminal?('s', :insens, index))
1858
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1859
+ @index += match_len
1860
+ else
1861
+ terminal_parse_failure('\'s\'')
1862
+ r3 = nil
1863
+ end
1864
+ if r3
1865
+ r2 = r3
1866
+ else
1867
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1868
+ end
1869
+ s0 << r2
1870
+ end
1871
+ if s0.last
1872
+ r0 = instantiate_node(YearInterval,input, i0...index, s0)
1873
+ r0.extend(YearInterval0)
1874
+ else
1875
+ @index = i0
1876
+ r0 = nil
1877
+ end
1878
+
1879
+ node_cache[:year_interval][start_index] = r0
1880
+
1881
+ r0
1882
+ end
1883
+
1884
+ def _nt_day_name
1885
+ start_index = index
1886
+ if node_cache[:day_name].has_key?(index)
1887
+ cached = node_cache[:day_name][index]
1888
+ if cached
1889
+ node_cache[:day_name][index] = 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 = index
1896
+ r1 = _nt_long_day_name
1897
+ if r1
1898
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1899
+ r0 = r1
1900
+ else
1901
+ r2 = _nt_short_day_name
1902
+ if r2
1903
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1904
+ r0 = r2
1905
+ else
1906
+ @index = i0
1907
+ r0 = nil
1908
+ end
1909
+ end
1910
+
1911
+ node_cache[:day_name][start_index] = r0
1912
+
1913
+ r0
1914
+ end
1915
+
1916
+ def _nt_long_day_name
1917
+ start_index = index
1918
+ if node_cache[:long_day_name].has_key?(index)
1919
+ cached = node_cache[:long_day_name][index]
1920
+ if cached
1921
+ node_cache[:long_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1922
+ @index = cached.interval.end
1923
+ end
1924
+ return cached
1925
+ end
1926
+
1927
+ i0 = index
1928
+ if (match_len = has_terminal?('sunday', :insens, index))
1929
+ r1 = instantiate_node(DayName,input, index...(index + match_len))
1930
+ @index += match_len
1931
+ else
1932
+ terminal_parse_failure('\'sunday\'')
1933
+ r1 = nil
1934
+ end
1935
+ if r1
1936
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1937
+ r0 = r1
1938
+ else
1939
+ if (match_len = has_terminal?('monday', :insens, index))
1940
+ r2 = instantiate_node(DayName,input, index...(index + match_len))
1941
+ @index += match_len
1942
+ else
1943
+ terminal_parse_failure('\'monday\'')
1944
+ r2 = nil
1945
+ end
1946
+ if r2
1947
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1948
+ r0 = r2
1949
+ else
1950
+ if (match_len = has_terminal?('tuesday', :insens, index))
1951
+ r3 = instantiate_node(DayName,input, index...(index + match_len))
1952
+ @index += match_len
1953
+ else
1954
+ terminal_parse_failure('\'tuesday\'')
1955
+ r3 = nil
1956
+ end
1957
+ if r3
1958
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1959
+ r0 = r3
1960
+ else
1961
+ if (match_len = has_terminal?('wednesday', :insens, index))
1962
+ r4 = instantiate_node(DayName,input, index...(index + match_len))
1963
+ @index += match_len
1964
+ else
1965
+ terminal_parse_failure('\'wednesday\'')
1966
+ r4 = nil
1967
+ end
1968
+ if r4
1969
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1970
+ r0 = r4
1971
+ else
1972
+ if (match_len = has_terminal?('thursday', :insens, index))
1973
+ r5 = instantiate_node(DayName,input, index...(index + match_len))
1974
+ @index += match_len
1975
+ else
1976
+ terminal_parse_failure('\'thursday\'')
1977
+ r5 = nil
1978
+ end
1979
+ if r5
1980
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1981
+ r0 = r5
1982
+ else
1983
+ if (match_len = has_terminal?('friday', :insens, index))
1984
+ r6 = instantiate_node(DayName,input, index...(index + match_len))
1985
+ @index += match_len
1986
+ else
1987
+ terminal_parse_failure('\'friday\'')
1988
+ r6 = nil
1989
+ end
1990
+ if r6
1991
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
1992
+ r0 = r6
1993
+ else
1994
+ if (match_len = has_terminal?('saturday', :insens, index))
1995
+ r7 = instantiate_node(DayName,input, index...(index + match_len))
1996
+ @index += match_len
1997
+ else
1998
+ terminal_parse_failure('\'saturday\'')
1999
+ r7 = nil
2000
+ end
2001
+ if r7
2002
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2003
+ r0 = r7
2004
+ else
2005
+ @index = i0
2006
+ r0 = nil
2007
+ end
2008
+ end
2009
+ end
2010
+ end
2011
+ end
2012
+ end
2013
+ end
2014
+
2015
+ node_cache[:long_day_name][start_index] = r0
2016
+
2017
+ r0
2018
+ end
2019
+
2020
+ def _nt_short_day_name
2021
+ start_index = index
2022
+ if node_cache[:short_day_name].has_key?(index)
2023
+ cached = node_cache[:short_day_name][index]
2024
+ if cached
2025
+ node_cache[:short_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2026
+ @index = cached.interval.end
2027
+ end
2028
+ return cached
2029
+ end
2030
+
2031
+ i0 = index
2032
+ if (match_len = has_terminal?('sun', :insens, index))
2033
+ r1 = instantiate_node(DayName,input, index...(index + match_len))
2034
+ @index += match_len
2035
+ else
2036
+ terminal_parse_failure('\'sun\'')
2037
+ r1 = nil
2038
+ end
2039
+ if r1
2040
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2041
+ r0 = r1
2042
+ else
2043
+ if (match_len = has_terminal?('mon', :insens, index))
2044
+ r2 = instantiate_node(DayName,input, index...(index + match_len))
2045
+ @index += match_len
2046
+ else
2047
+ terminal_parse_failure('\'mon\'')
2048
+ r2 = nil
2049
+ end
2050
+ if r2
2051
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2052
+ r0 = r2
2053
+ else
2054
+ if (match_len = has_terminal?('tue', :insens, index))
2055
+ r3 = instantiate_node(DayName,input, index...(index + match_len))
2056
+ @index += match_len
2057
+ else
2058
+ terminal_parse_failure('\'tue\'')
2059
+ r3 = nil
2060
+ end
2061
+ if r3
2062
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2063
+ r0 = r3
2064
+ else
2065
+ if (match_len = has_terminal?('wed', :insens, index))
2066
+ r4 = instantiate_node(DayName,input, index...(index + match_len))
2067
+ @index += match_len
2068
+ else
2069
+ terminal_parse_failure('\'wed\'')
2070
+ r4 = nil
2071
+ end
2072
+ if r4
2073
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2074
+ r0 = r4
2075
+ else
2076
+ if (match_len = has_terminal?('thu', :insens, index))
2077
+ r5 = instantiate_node(DayName,input, index...(index + match_len))
2078
+ @index += match_len
2079
+ else
2080
+ terminal_parse_failure('\'thu\'')
2081
+ r5 = nil
2082
+ end
2083
+ if r5
2084
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2085
+ r0 = r5
2086
+ else
2087
+ if (match_len = has_terminal?('fri', :insens, index))
2088
+ r6 = instantiate_node(DayName,input, index...(index + match_len))
2089
+ @index += match_len
2090
+ else
2091
+ terminal_parse_failure('\'fri\'')
2092
+ r6 = nil
2093
+ end
2094
+ if r6
2095
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2096
+ r0 = r6
2097
+ else
2098
+ if (match_len = has_terminal?('sat', :insens, index))
2099
+ r7 = instantiate_node(DayName,input, index...(index + match_len))
2100
+ @index += match_len
2101
+ else
2102
+ terminal_parse_failure('\'sat\'')
2103
+ r7 = nil
2104
+ end
2105
+ if r7
2106
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2107
+ r0 = r7
2108
+ else
2109
+ @index = i0
2110
+ r0 = nil
2111
+ end
2112
+ end
2113
+ end
2114
+ end
2115
+ end
2116
+ end
2117
+ end
2118
+
2119
+ node_cache[:short_day_name][start_index] = r0
2120
+
2121
+ r0
2122
+ end
2123
+
2124
+ def _nt_month_name
2125
+ start_index = index
2126
+ if node_cache[:month_name].has_key?(index)
2127
+ cached = node_cache[:month_name][index]
2128
+ if cached
2129
+ node_cache[:month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2130
+ @index = cached.interval.end
2131
+ end
2132
+ return cached
2133
+ end
2134
+
2135
+ i0 = index
2136
+ r1 = _nt_long_month_name
2137
+ if r1
2138
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2139
+ r0 = r1
2140
+ else
2141
+ r2 = _nt_short_month_name
2142
+ if r2
2143
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2144
+ r0 = r2
2145
+ else
2146
+ @index = i0
2147
+ r0 = nil
2148
+ end
2149
+ end
2150
+
2151
+ node_cache[:month_name][start_index] = r0
2152
+
2153
+ r0
2154
+ end
2155
+
2156
+ def _nt_long_month_name
2157
+ start_index = index
2158
+ if node_cache[:long_month_name].has_key?(index)
2159
+ cached = node_cache[:long_month_name][index]
2160
+ if cached
2161
+ node_cache[:long_month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2162
+ @index = cached.interval.end
2163
+ end
2164
+ return cached
2165
+ end
2166
+
2167
+ i0 = index
2168
+ if (match_len = has_terminal?('january', :insens, index))
2169
+ r1 = instantiate_node(MonthName,input, index...(index + match_len))
2170
+ @index += match_len
2171
+ else
2172
+ terminal_parse_failure('\'january\'')
2173
+ r1 = nil
2174
+ end
2175
+ if r1
2176
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2177
+ r0 = r1
2178
+ else
2179
+ if (match_len = has_terminal?('february', :insens, index))
2180
+ r2 = instantiate_node(MonthName,input, index...(index + match_len))
2181
+ @index += match_len
2182
+ else
2183
+ terminal_parse_failure('\'february\'')
2184
+ r2 = nil
2185
+ end
2186
+ if r2
2187
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2188
+ r0 = r2
2189
+ else
2190
+ if (match_len = has_terminal?('march', :insens, index))
2191
+ r3 = instantiate_node(MonthName,input, index...(index + match_len))
2192
+ @index += match_len
2193
+ else
2194
+ terminal_parse_failure('\'march\'')
2195
+ r3 = nil
2196
+ end
2197
+ if r3
2198
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2199
+ r0 = r3
2200
+ else
2201
+ if (match_len = has_terminal?('april', :insens, index))
2202
+ r4 = instantiate_node(MonthName,input, index...(index + match_len))
2203
+ @index += match_len
2204
+ else
2205
+ terminal_parse_failure('\'april\'')
2206
+ r4 = nil
2207
+ end
2208
+ if r4
2209
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2210
+ r0 = r4
2211
+ else
2212
+ if (match_len = has_terminal?('may', :insens, index))
2213
+ r5 = instantiate_node(MonthName,input, index...(index + match_len))
2214
+ @index += match_len
2215
+ else
2216
+ terminal_parse_failure('\'may\'')
2217
+ r5 = nil
2218
+ end
2219
+ if r5
2220
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2221
+ r0 = r5
2222
+ else
2223
+ if (match_len = has_terminal?('june', :insens, index))
2224
+ r6 = instantiate_node(MonthName,input, index...(index + match_len))
2225
+ @index += match_len
2226
+ else
2227
+ terminal_parse_failure('\'june\'')
2228
+ r6 = nil
2229
+ end
2230
+ if r6
2231
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2232
+ r0 = r6
2233
+ else
2234
+ if (match_len = has_terminal?('july', :insens, index))
2235
+ r7 = instantiate_node(MonthName,input, index...(index + match_len))
2236
+ @index += match_len
2237
+ else
2238
+ terminal_parse_failure('\'july\'')
2239
+ r7 = nil
2240
+ end
2241
+ if r7
2242
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2243
+ r0 = r7
2244
+ else
2245
+ if (match_len = has_terminal?('august', :insens, index))
2246
+ r8 = instantiate_node(MonthName,input, index...(index + match_len))
2247
+ @index += match_len
2248
+ else
2249
+ terminal_parse_failure('\'august\'')
2250
+ r8 = nil
2251
+ end
2252
+ if r8
2253
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2254
+ r0 = r8
2255
+ else
2256
+ if (match_len = has_terminal?('september', :insens, index))
2257
+ r9 = instantiate_node(MonthName,input, index...(index + match_len))
2258
+ @index += match_len
2259
+ else
2260
+ terminal_parse_failure('\'september\'')
2261
+ r9 = nil
2262
+ end
2263
+ if r9
2264
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2265
+ r0 = r9
2266
+ else
2267
+ if (match_len = has_terminal?('october', :insens, index))
2268
+ r10 = instantiate_node(MonthName,input, index...(index + match_len))
2269
+ @index += match_len
2270
+ else
2271
+ terminal_parse_failure('\'october\'')
2272
+ r10 = nil
2273
+ end
2274
+ if r10
2275
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2276
+ r0 = r10
2277
+ else
2278
+ if (match_len = has_terminal?('november', :insens, index))
2279
+ r11 = instantiate_node(MonthName,input, index...(index + match_len))
2280
+ @index += match_len
2281
+ else
2282
+ terminal_parse_failure('\'november\'')
2283
+ r11 = nil
2284
+ end
2285
+ if r11
2286
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2287
+ r0 = r11
2288
+ else
2289
+ if (match_len = has_terminal?('december', :insens, index))
2290
+ r12 = instantiate_node(MonthName,input, index...(index + match_len))
2291
+ @index += match_len
2292
+ else
2293
+ terminal_parse_failure('\'december\'')
2294
+ r12 = nil
2295
+ end
2296
+ if r12
2297
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2298
+ r0 = r12
2299
+ else
2300
+ @index = i0
2301
+ r0 = nil
2302
+ end
2303
+ end
2304
+ end
2305
+ end
2306
+ end
2307
+ end
2308
+ end
2309
+ end
2310
+ end
2311
+ end
2312
+ end
2313
+ end
2314
+
2315
+ node_cache[:long_month_name][start_index] = r0
2316
+
2317
+ r0
2318
+ end
2319
+
2320
+ def _nt_short_month_name
2321
+ start_index = index
2322
+ if node_cache[:short_month_name].has_key?(index)
2323
+ cached = node_cache[:short_month_name][index]
2324
+ if cached
2325
+ node_cache[:short_month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2326
+ @index = cached.interval.end
2327
+ end
2328
+ return cached
2329
+ end
2330
+
2331
+ i0 = index
2332
+ if (match_len = has_terminal?('jan', :insens, index))
2333
+ r1 = instantiate_node(MonthName,input, index...(index + match_len))
2334
+ @index += match_len
2335
+ else
2336
+ terminal_parse_failure('\'jan\'')
2337
+ r1 = nil
2338
+ end
2339
+ if r1
2340
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2341
+ r0 = r1
2342
+ else
2343
+ if (match_len = has_terminal?('feb', :insens, index))
2344
+ r2 = instantiate_node(MonthName,input, index...(index + match_len))
2345
+ @index += match_len
2346
+ else
2347
+ terminal_parse_failure('\'feb\'')
2348
+ r2 = nil
2349
+ end
2350
+ if r2
2351
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2352
+ r0 = r2
2353
+ else
2354
+ if (match_len = has_terminal?('mar', :insens, index))
2355
+ r3 = instantiate_node(MonthName,input, index...(index + match_len))
2356
+ @index += match_len
2357
+ else
2358
+ terminal_parse_failure('\'mar\'')
2359
+ r3 = nil
2360
+ end
2361
+ if r3
2362
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2363
+ r0 = r3
2364
+ else
2365
+ if (match_len = has_terminal?('apr', :insens, index))
2366
+ r4 = instantiate_node(MonthName,input, index...(index + match_len))
2367
+ @index += match_len
2368
+ else
2369
+ terminal_parse_failure('\'apr\'')
2370
+ r4 = nil
2371
+ end
2372
+ if r4
2373
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2374
+ r0 = r4
2375
+ else
2376
+ if (match_len = has_terminal?('may', :insens, index))
2377
+ r5 = instantiate_node(MonthName,input, index...(index + match_len))
2378
+ @index += match_len
2379
+ else
2380
+ terminal_parse_failure('\'may\'')
2381
+ r5 = nil
2382
+ end
2383
+ if r5
2384
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2385
+ r0 = r5
2386
+ else
2387
+ if (match_len = has_terminal?('jun', :insens, index))
2388
+ r6 = instantiate_node(MonthName,input, index...(index + match_len))
2389
+ @index += match_len
2390
+ else
2391
+ terminal_parse_failure('\'jun\'')
2392
+ r6 = nil
2393
+ end
2394
+ if r6
2395
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2396
+ r0 = r6
2397
+ else
2398
+ if (match_len = has_terminal?('jul', :insens, index))
2399
+ r7 = instantiate_node(MonthName,input, index...(index + match_len))
2400
+ @index += match_len
2401
+ else
2402
+ terminal_parse_failure('\'jul\'')
2403
+ r7 = nil
2404
+ end
2405
+ if r7
2406
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2407
+ r0 = r7
2408
+ else
2409
+ if (match_len = has_terminal?('aug', :insens, index))
2410
+ r8 = instantiate_node(MonthName,input, index...(index + match_len))
2411
+ @index += match_len
2412
+ else
2413
+ terminal_parse_failure('\'aug\'')
2414
+ r8 = nil
2415
+ end
2416
+ if r8
2417
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2418
+ r0 = r8
2419
+ else
2420
+ if (match_len = has_terminal?('sep', :insens, index))
2421
+ r9 = instantiate_node(MonthName,input, index...(index + match_len))
2422
+ @index += match_len
2423
+ else
2424
+ terminal_parse_failure('\'sep\'')
2425
+ r9 = nil
2426
+ end
2427
+ if r9
2428
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2429
+ r0 = r9
2430
+ else
2431
+ if (match_len = has_terminal?('oct', :insens, index))
2432
+ r10 = instantiate_node(MonthName,input, index...(index + match_len))
2433
+ @index += match_len
2434
+ else
2435
+ terminal_parse_failure('\'oct\'')
2436
+ r10 = nil
2437
+ end
2438
+ if r10
2439
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2440
+ r0 = r10
2441
+ else
2442
+ if (match_len = has_terminal?('nov', :insens, index))
2443
+ r11 = instantiate_node(MonthName,input, index...(index + match_len))
2444
+ @index += match_len
2445
+ else
2446
+ terminal_parse_failure('\'nov\'')
2447
+ r11 = nil
2448
+ end
2449
+ if r11
2450
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2451
+ r0 = r11
2452
+ else
2453
+ if (match_len = has_terminal?('dec', :insens, index))
2454
+ r12 = instantiate_node(MonthName,input, index...(index + match_len))
2455
+ @index += match_len
2456
+ else
2457
+ terminal_parse_failure('\'dec\'')
2458
+ r12 = nil
2459
+ end
2460
+ if r12
2461
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2462
+ r0 = r12
2463
+ else
2464
+ @index = i0
2465
+ r0 = nil
2466
+ end
2467
+ end
2468
+ end
2469
+ end
2470
+ end
2471
+ end
2472
+ end
2473
+ end
2474
+ end
2475
+ end
2476
+ end
2477
+ end
2478
+
2479
+ node_cache[:short_month_name][start_index] = r0
2480
+
2481
+ r0
2482
+ end
2483
+
2484
+ module ZoneOffset0
2485
+ end
2486
+
2487
+ def _nt_zone_offset
2488
+ start_index = index
2489
+ if node_cache[:zone_offset].has_key?(index)
2490
+ cached = node_cache[:zone_offset][index]
2491
+ if cached
2492
+ node_cache[:zone_offset][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2493
+ @index = cached.interval.end
2494
+ end
2495
+ return cached
2496
+ end
2497
+
2498
+ i0, s0 = index, []
2499
+ if has_terminal?(@regexps[gr = '\A[+-]'] ||= Regexp.new(gr), :regexp, index)
2500
+ r1 = true
2501
+ @index += 1
2502
+ else
2503
+ terminal_parse_failure('[+-]')
2504
+ r1 = nil
2505
+ end
2506
+ s0 << r1
2507
+ if r1
2508
+ s2, i2 = [], index
2509
+ loop do
2510
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2511
+ r3 = true
2512
+ @index += 1
2513
+ else
2514
+ terminal_parse_failure('[\\d]')
2515
+ r3 = nil
2516
+ end
2517
+ if r3
2518
+ s2 << r3
2519
+ else
2520
+ break
2521
+ end
2522
+ if s2.size == 2
2523
+ break
2524
+ end
2525
+ end
2526
+ if s2.size < 2
2527
+ @index = i2
2528
+ r2 = nil
2529
+ else
2530
+ if s2.size < 2
2531
+ terminal_failures.pop
2532
+ end
2533
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2534
+ end
2535
+ s0 << r2
2536
+ if r2
2537
+ if (match_len = has_terminal?(':', false, index))
2538
+ r5 = true
2539
+ @index += match_len
2540
+ else
2541
+ terminal_parse_failure('\':\'')
2542
+ r5 = nil
2543
+ end
2544
+ if r5
2545
+ r4 = r5
2546
+ else
2547
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2548
+ end
2549
+ s0 << r4
2550
+ if r4
2551
+ s6, i6 = [], index
2552
+ loop do
2553
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2554
+ r7 = true
2555
+ @index += 1
2556
+ else
2557
+ terminal_parse_failure('[\\d]')
2558
+ r7 = nil
2559
+ end
2560
+ if r7
2561
+ s6 << r7
2562
+ else
2563
+ break
2564
+ end
2565
+ if s6.size == 2
2566
+ break
2567
+ end
2568
+ end
2569
+ if s6.size < 2
2570
+ @index = i6
2571
+ r6 = nil
2572
+ else
2573
+ if s6.size < 2
2574
+ terminal_failures.pop
2575
+ end
2576
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2577
+ end
2578
+ s0 << r6
2579
+ end
2580
+ end
2581
+ end
2582
+ if s0.last
2583
+ r0 = instantiate_node(ZoneOffset,input, i0...index, s0)
2584
+ r0.extend(ZoneOffset0)
2585
+ else
2586
+ @index = i0
2587
+ r0 = nil
2588
+ end
2589
+
2590
+ node_cache[:zone_offset][start_index] = r0
2591
+
2592
+ r0
2593
+ end
2594
+
2595
+ module HourMinuteSecond0
2596
+ end
2597
+
2598
+ module HourMinuteSecond1
2599
+ end
2600
+
2601
+ def _nt_hour_minute_second
2602
+ start_index = index
2603
+ if node_cache[:hour_minute_second].has_key?(index)
2604
+ cached = node_cache[:hour_minute_second][index]
2605
+ if cached
2606
+ node_cache[:hour_minute_second][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2607
+ @index = cached.interval.end
2608
+ end
2609
+ return cached
2610
+ end
2611
+
2612
+ i0 = index
2613
+ i1, s1 = index, []
2614
+ s2, i2 = [], index
2615
+ loop do
2616
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2617
+ r3 = true
2618
+ @index += 1
2619
+ else
2620
+ terminal_parse_failure('[\\d]')
2621
+ r3 = nil
2622
+ end
2623
+ if r3
2624
+ s2 << r3
2625
+ else
2626
+ break
2627
+ end
2628
+ if s2.size == 2
2629
+ break
2630
+ end
2631
+ end
2632
+ if s2.size < 2
2633
+ @index = i2
2634
+ r2 = nil
2635
+ else
2636
+ if s2.size < 2
2637
+ terminal_failures.pop
2638
+ end
2639
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2640
+ end
2641
+ s1 << r2
2642
+ if r2
2643
+ if (match_len = has_terminal?(':', false, index))
2644
+ r4 = true
2645
+ @index += match_len
2646
+ else
2647
+ terminal_parse_failure('\':\'')
2648
+ r4 = nil
2649
+ end
2650
+ s1 << r4
2651
+ if r4
2652
+ s5, i5 = [], index
2653
+ loop do
2654
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2655
+ r6 = true
2656
+ @index += 1
2657
+ else
2658
+ terminal_parse_failure('[\\d]')
2659
+ r6 = nil
2660
+ end
2661
+ if r6
2662
+ s5 << r6
2663
+ else
2664
+ break
2665
+ end
2666
+ if s5.size == 2
2667
+ break
2668
+ end
2669
+ end
2670
+ if s5.size < 2
2671
+ @index = i5
2672
+ r5 = nil
2673
+ else
2674
+ if s5.size < 2
2675
+ terminal_failures.pop
2676
+ end
2677
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2678
+ end
2679
+ s1 << r5
2680
+ if r5
2681
+ i8, s8 = index, []
2682
+ if (match_len = has_terminal?(':', false, index))
2683
+ r9 = true
2684
+ @index += match_len
2685
+ else
2686
+ terminal_parse_failure('\':\'')
2687
+ r9 = nil
2688
+ end
2689
+ s8 << r9
2690
+ if r9
2691
+ s10, i10 = [], index
2692
+ loop do
2693
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2694
+ r11 = true
2695
+ @index += 1
2696
+ else
2697
+ terminal_parse_failure('[\\d]')
2698
+ r11 = nil
2699
+ end
2700
+ if r11
2701
+ s10 << r11
2702
+ else
2703
+ break
2704
+ end
2705
+ if s10.size == 2
2706
+ break
2707
+ end
2708
+ end
2709
+ if s10.size < 2
2710
+ @index = i10
2711
+ r10 = nil
2712
+ else
2713
+ if s10.size < 2
2714
+ terminal_failures.pop
2715
+ end
2716
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
2717
+ end
2718
+ s8 << r10
2719
+ end
2720
+ if s8.last
2721
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
2722
+ r8.extend(HourMinuteSecond0)
2723
+ else
2724
+ @index = i8
2725
+ r8 = nil
2726
+ end
2727
+ if r8
2728
+ r7 = r8
2729
+ else
2730
+ r7 = instantiate_node(SyntaxNode,input, index...index)
2731
+ end
2732
+ s1 << r7
2733
+ end
2734
+ end
2735
+ end
2736
+ if s1.last
2737
+ r1 = instantiate_node(HourMinuteSecond,input, i1...index, s1)
2738
+ r1.extend(HourMinuteSecond1)
2739
+ else
2740
+ @index = i1
2741
+ r1 = nil
2742
+ end
2743
+ if r1
2744
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2745
+ r0 = r1
2746
+ else
2747
+ if (match_len = has_terminal?('beginning', false, index))
2748
+ r12 = instantiate_node(HourMinuteSecond,input, index...(index + match_len))
2749
+ @index += match_len
2750
+ else
2751
+ terminal_parse_failure('\'beginning\'')
2752
+ r12 = nil
2753
+ end
2754
+ if r12
2755
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2756
+ r0 = r12
2757
+ else
2758
+ if (match_len = has_terminal?('end', false, index))
2759
+ r13 = instantiate_node(HourMinuteSecond,input, index...(index + match_len))
2760
+ @index += match_len
2761
+ else
2762
+ terminal_parse_failure('\'end\'')
2763
+ r13 = nil
2764
+ end
2765
+ if r13
2766
+ r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
2767
+ r0 = r13
2768
+ else
2769
+ @index = i0
2770
+ r0 = nil
2771
+ end
2772
+ end
2773
+ end
2774
+
2775
+ node_cache[:hour_minute_second][start_index] = r0
2776
+
2777
+ r0
2778
+ end
2779
+
2780
+ def _nt_integer
2781
+ start_index = index
2782
+ if node_cache[:integer].has_key?(index)
2783
+ cached = node_cache[:integer][index]
2784
+ if cached
2785
+ node_cache[:integer][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2786
+ @index = cached.interval.end
2787
+ end
2788
+ return cached
2789
+ end
2790
+
2791
+ s0, i0 = [], index
2792
+ loop do
2793
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2794
+ r1 = true
2795
+ @index += 1
2796
+ else
2797
+ terminal_parse_failure('[\\d]')
2798
+ r1 = nil
2799
+ end
2800
+ if r1
2801
+ s0 << r1
2802
+ else
2803
+ break
2804
+ end
2805
+ end
2806
+ if s0.empty?
2807
+ @index = i0
2808
+ r0 = nil
2809
+ else
2810
+ r0 = instantiate_node(Int,input, i0...index, s0)
2811
+ end
2812
+
2813
+ node_cache[:integer][start_index] = r0
2814
+
2815
+ r0
2816
+ end
2817
+
2818
+ def _nt_space
2819
+ start_index = index
2820
+ if node_cache[:space].has_key?(index)
2821
+ cached = node_cache[:space][index]
2822
+ if cached
2823
+ node_cache[:space][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2824
+ @index = cached.interval.end
2825
+ end
2826
+ return cached
2827
+ end
2828
+
2829
+ if has_terminal?(@regexps[gr = '\A[\\s\\t\\n]'] ||= Regexp.new(gr), :regexp, index)
2830
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2831
+ @index += 1
2832
+ else
2833
+ terminal_parse_failure('[\\s\\t\\n]')
2834
+ r0 = nil
2835
+ end
2836
+
2837
+ node_cache[:space][start_index] = r0
2838
+
2839
+ r0
2840
+ end
2841
+
2842
+ end
2843
+
2844
+ class NaturalTimeLanguageParser < Treetop::Runtime::CompiledParser
2845
+ include NaturalTimeLanguage
2846
+ end
2847
+
2848
+ end