timing 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,7 +25,7 @@ module Timing
25
25
  if node_cache[:expression].has_key?(index)
26
26
  cached = node_cache[:expression][index]
27
27
  if cached
28
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
28
+ node_cache[:expression][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
29
29
  @index = cached.interval.end
30
30
  end
31
31
  return cached
@@ -100,7 +100,7 @@ module Timing
100
100
  if node_cache[:moment].has_key?(index)
101
101
  cached = node_cache[:moment][index]
102
102
  if cached
103
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
103
+ node_cache[:moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
104
104
  @index = cached.interval.end
105
105
  end
106
106
  return cached
@@ -109,22 +109,27 @@ module Timing
109
109
  i0 = index
110
110
  r1 = _nt_timestamp
111
111
  if r1
112
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
112
113
  r0 = r1
113
114
  else
114
115
  r2 = _nt_time_ago
115
116
  if r2
117
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
116
118
  r0 = r2
117
119
  else
118
120
  r3 = _nt_moment_at_time
119
121
  if r3
122
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
120
123
  r0 = r3
121
124
  else
122
125
  r4 = _nt_before_from_moment
123
126
  if r4
127
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
124
128
  r0 = r4
125
129
  else
126
130
  r5 = _nt_date_moment
127
131
  if r5
132
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
128
133
  r0 = r5
129
134
  else
130
135
  @index = i0
@@ -145,7 +150,7 @@ module Timing
145
150
  if node_cache[:date_moment].has_key?(index)
146
151
  cached = node_cache[:date_moment][index]
147
152
  if cached
148
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
153
+ node_cache[:date_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
149
154
  @index = cached.interval.end
150
155
  end
151
156
  return cached
@@ -154,22 +159,27 @@ module Timing
154
159
  i0 = index
155
160
  r1 = _nt_named_moment
156
161
  if r1
162
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
157
163
  r0 = r1
158
164
  else
159
165
  r2 = _nt_last_next_day_name
160
166
  if r2
167
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
161
168
  r0 = r2
162
169
  else
163
170
  r3 = _nt_day_month_name_year
164
171
  if r3
172
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
165
173
  r0 = r3
166
174
  else
167
175
  r4 = _nt_year_month_day
168
176
  if r4
177
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
169
178
  r0 = r4
170
179
  else
171
180
  r5 = _nt_beginning_end_interval
172
181
  if r5
182
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
173
183
  r0 = r5
174
184
  else
175
185
  @index = i0
@@ -190,7 +200,7 @@ module Timing
190
200
  if node_cache[:named_moment].has_key?(index)
191
201
  cached = node_cache[:named_moment][index]
192
202
  if cached
193
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
203
+ node_cache[:named_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
194
204
  @index = cached.interval.end
195
205
  end
196
206
  return cached
@@ -199,18 +209,22 @@ module Timing
199
209
  i0 = index
200
210
  r1 = _nt_now
201
211
  if r1
212
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
202
213
  r0 = r1
203
214
  else
204
215
  r2 = _nt_today
205
216
  if r2
217
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
206
218
  r0 = r2
207
219
  else
208
220
  r3 = _nt_tomorrow
209
221
  if r3
222
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
210
223
  r0 = r3
211
224
  else
212
225
  r4 = _nt_yesterday
213
226
  if r4
227
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
214
228
  r0 = r4
215
229
  else
216
230
  @index = i0
@@ -233,6 +247,10 @@ module Timing
233
247
  def day_name
234
248
  elements[2]
235
249
  end
250
+
251
+ def including_today
252
+ elements[4]
253
+ end
236
254
  end
237
255
 
238
256
  def _nt_last_next_day_name
@@ -240,7 +258,7 @@ module Timing
240
258
  if node_cache[:last_next_day_name].has_key?(index)
241
259
  cached = node_cache[:last_next_day_name][index]
242
260
  if cached
243
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
261
+ node_cache[:last_next_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
244
262
  @index = cached.interval.end
245
263
  end
246
264
  return cached
@@ -264,6 +282,34 @@ module Timing
264
282
  if r2
265
283
  r4 = _nt_day_name
266
284
  s0 << r4
285
+ if r4
286
+ s5, i5 = [], index
287
+ loop do
288
+ r6 = _nt_space
289
+ if r6
290
+ s5 << r6
291
+ else
292
+ break
293
+ end
294
+ end
295
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
296
+ s0 << r5
297
+ if r5
298
+ if (match_len = has_terminal?('including today', false, index))
299
+ r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
300
+ @index += match_len
301
+ else
302
+ terminal_parse_failure('\'including today\'')
303
+ r8 = nil
304
+ end
305
+ if r8
306
+ r7 = r8
307
+ else
308
+ r7 = instantiate_node(SyntaxNode,input, index...index)
309
+ end
310
+ s0 << r7
311
+ end
312
+ end
267
313
  end
268
314
  end
269
315
  if s0.last
@@ -299,7 +345,7 @@ module Timing
299
345
  if node_cache[:day_month_name_year].has_key?(index)
300
346
  cached = node_cache[:day_month_name_year][index]
301
347
  if cached
302
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
348
+ node_cache[:day_month_name_year][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
303
349
  @index = cached.interval.end
304
350
  end
305
351
  return cached
@@ -392,7 +438,7 @@ module Timing
392
438
  if node_cache[:year_month_day].has_key?(index)
393
439
  cached = node_cache[:year_month_day][index]
394
440
  if cached
395
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
441
+ node_cache[:year_month_day][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
396
442
  @index = cached.interval.end
397
443
  end
398
444
  return cached
@@ -402,11 +448,11 @@ module Timing
402
448
  r1 = _nt_integer
403
449
  s0 << r1
404
450
  if r1
405
- if has_terminal?('-', false, index)
406
- r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
407
- @index += 1
451
+ if (match_len = has_terminal?('-', false, index))
452
+ r2 = true
453
+ @index += match_len
408
454
  else
409
- terminal_parse_failure('-')
455
+ terminal_parse_failure('\'-\'')
410
456
  r2 = nil
411
457
  end
412
458
  s0 << r2
@@ -414,11 +460,11 @@ module Timing
414
460
  r3 = _nt_integer
415
461
  s0 << r3
416
462
  if r3
417
- if has_terminal?('-', false, index)
418
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
419
- @index += 1
463
+ if (match_len = has_terminal?('-', false, index))
464
+ r4 = true
465
+ @index += match_len
420
466
  else
421
- terminal_parse_failure('-')
467
+ terminal_parse_failure('\'-\'')
422
468
  r4 = nil
423
469
  end
424
470
  s0 << r4
@@ -457,7 +503,7 @@ module Timing
457
503
  if node_cache[:beginning_end_interval].has_key?(index)
458
504
  cached = node_cache[:beginning_end_interval][index]
459
505
  if cached
460
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
506
+ node_cache[:beginning_end_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
461
507
  @index = cached.interval.end
462
508
  end
463
509
  return cached
@@ -512,7 +558,7 @@ module Timing
512
558
  if node_cache[:time_ago].has_key?(index)
513
559
  cached = node_cache[:time_ago][index]
514
560
  if cached
515
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
561
+ node_cache[:time_ago][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
516
562
  @index = cached.interval.end
517
563
  end
518
564
  return cached
@@ -549,11 +595,11 @@ module Timing
549
595
  r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
550
596
  s0 << r5
551
597
  if r5
552
- if has_terminal?('ago', false, index)
553
- r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
554
- @index += 3
598
+ if (match_len = has_terminal?('ago', false, index))
599
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
600
+ @index += match_len
555
601
  else
556
- terminal_parse_failure('ago')
602
+ terminal_parse_failure('\'ago\'')
557
603
  r7 = nil
558
604
  end
559
605
  s0 << r7
@@ -589,7 +635,7 @@ module Timing
589
635
  if node_cache[:moment_at_time].has_key?(index)
590
636
  cached = node_cache[:moment_at_time][index]
591
637
  if cached
592
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
638
+ node_cache[:moment_at_time][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
593
639
  @index = cached.interval.end
594
640
  end
595
641
  return cached
@@ -611,11 +657,11 @@ module Timing
611
657
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
612
658
  s0 << r2
613
659
  if r2
614
- if has_terminal?('at', false, index)
615
- r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
616
- @index += 2
660
+ if (match_len = has_terminal?('at', false, index))
661
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
662
+ @index += match_len
617
663
  else
618
- terminal_parse_failure('at')
664
+ terminal_parse_failure('\'at\'')
619
665
  r4 = nil
620
666
  end
621
667
  s0 << r4
@@ -674,7 +720,7 @@ module Timing
674
720
  if node_cache[:before_from_moment].has_key?(index)
675
721
  cached = node_cache[:before_from_moment][index]
676
722
  if cached
677
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
723
+ node_cache[:before_from_moment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
678
724
  @index = cached.interval.end
679
725
  end
680
726
  return cached
@@ -755,7 +801,7 @@ module Timing
755
801
  if node_cache[:timestamp].has_key?(index)
756
802
  cached = node_cache[:timestamp][index]
757
803
  if cached
758
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
804
+ node_cache[:timestamp][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
759
805
  @index = cached.interval.end
760
806
  end
761
807
  return cached
@@ -764,10 +810,11 @@ module Timing
764
810
  i0, s0 = index, []
765
811
  s1, i1 = [], index
766
812
  loop do
767
- if has_terminal?('\G[\\d]', true, index)
813
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
768
814
  r2 = true
769
815
  @index += 1
770
816
  else
817
+ terminal_parse_failure('[\\d]')
771
818
  r2 = nil
772
819
  end
773
820
  if r2
@@ -783,25 +830,29 @@ module Timing
783
830
  @index = i1
784
831
  r1 = nil
785
832
  else
833
+ if s1.size < 4
834
+ @terminal_failures.pop
835
+ end
786
836
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
787
837
  end
788
838
  s0 << r1
789
839
  if r1
790
- if has_terminal?('-', false, index)
791
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
792
- @index += 1
840
+ if (match_len = has_terminal?('-', false, index))
841
+ r3 = true
842
+ @index += match_len
793
843
  else
794
- terminal_parse_failure('-')
844
+ terminal_parse_failure('\'-\'')
795
845
  r3 = nil
796
846
  end
797
847
  s0 << r3
798
848
  if r3
799
849
  s4, i4 = [], index
800
850
  loop do
801
- if has_terminal?('\G[\\d]', true, index)
851
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
802
852
  r5 = true
803
853
  @index += 1
804
854
  else
855
+ terminal_parse_failure('[\\d]')
805
856
  r5 = nil
806
857
  end
807
858
  if r5
@@ -817,25 +868,29 @@ module Timing
817
868
  @index = i4
818
869
  r4 = nil
819
870
  else
871
+ if s4.size < 2
872
+ @terminal_failures.pop
873
+ end
820
874
  r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
821
875
  end
822
876
  s0 << r4
823
877
  if r4
824
- if has_terminal?('-', false, index)
825
- r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
826
- @index += 1
878
+ if (match_len = has_terminal?('-', false, index))
879
+ r6 = true
880
+ @index += match_len
827
881
  else
828
- terminal_parse_failure('-')
882
+ terminal_parse_failure('\'-\'')
829
883
  r6 = nil
830
884
  end
831
885
  s0 << r6
832
886
  if r6
833
887
  s7, i7 = [], index
834
888
  loop do
835
- if has_terminal?('\G[\\d]', true, index)
889
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
836
890
  r8 = true
837
891
  @index += 1
838
892
  else
893
+ terminal_parse_failure('[\\d]')
839
894
  r8 = nil
840
895
  end
841
896
  if r8
@@ -851,6 +906,9 @@ module Timing
851
906
  @index = i7
852
907
  r7 = nil
853
908
  else
909
+ if s7.size < 2
910
+ @terminal_failures.pop
911
+ end
854
912
  r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
855
913
  end
856
914
  s0 << r7
@@ -867,11 +925,11 @@ module Timing
867
925
  r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
868
926
  s0 << r9
869
927
  if r9
870
- if has_terminal?('t', false, index)
871
- r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
872
- @index += 1
928
+ if (match_len = has_terminal?('t', false, index))
929
+ r12 = true
930
+ @index += match_len
873
931
  else
874
- terminal_parse_failure('t')
932
+ terminal_parse_failure('\'t\'')
875
933
  r12 = nil
876
934
  end
877
935
  if r12
@@ -895,10 +953,11 @@ module Timing
895
953
  if r13
896
954
  s15, i15 = [], index
897
955
  loop do
898
- if has_terminal?('\G[\\d]', true, index)
956
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
899
957
  r16 = true
900
958
  @index += 1
901
959
  else
960
+ terminal_parse_failure('[\\d]')
902
961
  r16 = nil
903
962
  end
904
963
  if r16
@@ -914,25 +973,29 @@ module Timing
914
973
  @index = i15
915
974
  r15 = nil
916
975
  else
976
+ if s15.size < 2
977
+ @terminal_failures.pop
978
+ end
917
979
  r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
918
980
  end
919
981
  s0 << r15
920
982
  if r15
921
- if has_terminal?(':', false, index)
922
- r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
923
- @index += 1
983
+ if (match_len = has_terminal?(':', false, index))
984
+ r17 = true
985
+ @index += match_len
924
986
  else
925
- terminal_parse_failure(':')
987
+ terminal_parse_failure('\':\'')
926
988
  r17 = nil
927
989
  end
928
990
  s0 << r17
929
991
  if r17
930
992
  s18, i18 = [], index
931
993
  loop do
932
- if has_terminal?('\G[\\d]', true, index)
994
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
933
995
  r19 = true
934
996
  @index += 1
935
997
  else
998
+ terminal_parse_failure('[\\d]')
936
999
  r19 = nil
937
1000
  end
938
1001
  if r19
@@ -948,25 +1011,29 @@ module Timing
948
1011
  @index = i18
949
1012
  r18 = nil
950
1013
  else
1014
+ if s18.size < 2
1015
+ @terminal_failures.pop
1016
+ end
951
1017
  r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
952
1018
  end
953
1019
  s0 << r18
954
1020
  if r18
955
- if has_terminal?(':', false, index)
956
- r20 = instantiate_node(SyntaxNode,input, index...(index + 1))
957
- @index += 1
1021
+ if (match_len = has_terminal?(':', false, index))
1022
+ r20 = true
1023
+ @index += match_len
958
1024
  else
959
- terminal_parse_failure(':')
1025
+ terminal_parse_failure('\':\'')
960
1026
  r20 = nil
961
1027
  end
962
1028
  s0 << r20
963
1029
  if r20
964
1030
  s21, i21 = [], index
965
1031
  loop do
966
- if has_terminal?('\G[\\d]', true, index)
1032
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
967
1033
  r22 = true
968
1034
  @index += 1
969
1035
  else
1036
+ terminal_parse_failure('[\\d]')
970
1037
  r22 = nil
971
1038
  end
972
1039
  if r22
@@ -982,6 +1049,9 @@ module Timing
982
1049
  @index = i21
983
1050
  r21 = nil
984
1051
  else
1052
+ if s21.size < 2
1053
+ @terminal_failures.pop
1054
+ end
985
1055
  r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
986
1056
  end
987
1057
  s0 << r21
@@ -1015,17 +1085,17 @@ module Timing
1015
1085
  if node_cache[:now].has_key?(index)
1016
1086
  cached = node_cache[:now][index]
1017
1087
  if cached
1018
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1088
+ node_cache[:now][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1019
1089
  @index = cached.interval.end
1020
1090
  end
1021
1091
  return cached
1022
1092
  end
1023
1093
 
1024
- if has_terminal?('now', false, index)
1025
- r0 = instantiate_node(Now,input, index...(index + 3))
1026
- @index += 3
1094
+ if (match_len = has_terminal?('now', false, index))
1095
+ r0 = instantiate_node(Now,input, index...(index + match_len))
1096
+ @index += match_len
1027
1097
  else
1028
- terminal_parse_failure('now')
1098
+ terminal_parse_failure('\'now\'')
1029
1099
  r0 = nil
1030
1100
  end
1031
1101
 
@@ -1039,17 +1109,17 @@ module Timing
1039
1109
  if node_cache[:today].has_key?(index)
1040
1110
  cached = node_cache[:today][index]
1041
1111
  if cached
1042
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1112
+ node_cache[:today][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1043
1113
  @index = cached.interval.end
1044
1114
  end
1045
1115
  return cached
1046
1116
  end
1047
1117
 
1048
- if has_terminal?('today', false, index)
1049
- r0 = instantiate_node(Today,input, index...(index + 5))
1050
- @index += 5
1118
+ if (match_len = has_terminal?('today', false, index))
1119
+ r0 = instantiate_node(Today,input, index...(index + match_len))
1120
+ @index += match_len
1051
1121
  else
1052
- terminal_parse_failure('today')
1122
+ terminal_parse_failure('\'today\'')
1053
1123
  r0 = nil
1054
1124
  end
1055
1125
 
@@ -1063,17 +1133,17 @@ module Timing
1063
1133
  if node_cache[:tomorrow].has_key?(index)
1064
1134
  cached = node_cache[:tomorrow][index]
1065
1135
  if cached
1066
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1136
+ node_cache[:tomorrow][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1067
1137
  @index = cached.interval.end
1068
1138
  end
1069
1139
  return cached
1070
1140
  end
1071
1141
 
1072
- if has_terminal?('tomorrow', false, index)
1073
- r0 = instantiate_node(Tomorrow,input, index...(index + 8))
1074
- @index += 8
1142
+ if (match_len = has_terminal?('tomorrow', false, index))
1143
+ r0 = instantiate_node(Tomorrow,input, index...(index + match_len))
1144
+ @index += match_len
1075
1145
  else
1076
- terminal_parse_failure('tomorrow')
1146
+ terminal_parse_failure('\'tomorrow\'')
1077
1147
  r0 = nil
1078
1148
  end
1079
1149
 
@@ -1087,17 +1157,17 @@ module Timing
1087
1157
  if node_cache[:yesterday].has_key?(index)
1088
1158
  cached = node_cache[:yesterday][index]
1089
1159
  if cached
1090
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1160
+ node_cache[:yesterday][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1091
1161
  @index = cached.interval.end
1092
1162
  end
1093
1163
  return cached
1094
1164
  end
1095
1165
 
1096
- if has_terminal?('yesterday', false, index)
1097
- r0 = instantiate_node(Yesterday,input, index...(index + 9))
1098
- @index += 9
1166
+ if (match_len = has_terminal?('yesterday', false, index))
1167
+ r0 = instantiate_node(Yesterday,input, index...(index + match_len))
1168
+ @index += match_len
1099
1169
  else
1100
- terminal_parse_failure('yesterday')
1170
+ terminal_parse_failure('\'yesterday\'')
1101
1171
  r0 = nil
1102
1172
  end
1103
1173
 
@@ -1111,7 +1181,7 @@ module Timing
1111
1181
  if node_cache[:last_next].has_key?(index)
1112
1182
  cached = node_cache[:last_next][index]
1113
1183
  if cached
1114
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1184
+ node_cache[:last_next][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1115
1185
  @index = cached.interval.end
1116
1186
  end
1117
1187
  return cached
@@ -1120,10 +1190,12 @@ module Timing
1120
1190
  i0 = index
1121
1191
  r1 = _nt_last
1122
1192
  if r1
1193
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1123
1194
  r0 = r1
1124
1195
  else
1125
1196
  r2 = _nt_next
1126
1197
  if r2
1198
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1127
1199
  r0 = r2
1128
1200
  else
1129
1201
  @index = i0
@@ -1141,17 +1213,17 @@ module Timing
1141
1213
  if node_cache[:last].has_key?(index)
1142
1214
  cached = node_cache[:last][index]
1143
1215
  if cached
1144
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1216
+ node_cache[:last][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1145
1217
  @index = cached.interval.end
1146
1218
  end
1147
1219
  return cached
1148
1220
  end
1149
1221
 
1150
- if has_terminal?('last', false, index)
1151
- r0 = instantiate_node(LastNext,input, index...(index + 4))
1152
- @index += 4
1222
+ if (match_len = has_terminal?('last', false, index))
1223
+ r0 = instantiate_node(LastNext,input, index...(index + match_len))
1224
+ @index += match_len
1153
1225
  else
1154
- terminal_parse_failure('last')
1226
+ terminal_parse_failure('\'last\'')
1155
1227
  r0 = nil
1156
1228
  end
1157
1229
 
@@ -1165,17 +1237,17 @@ module Timing
1165
1237
  if node_cache[:next].has_key?(index)
1166
1238
  cached = node_cache[:next][index]
1167
1239
  if cached
1168
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1240
+ node_cache[:next][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1169
1241
  @index = cached.interval.end
1170
1242
  end
1171
1243
  return cached
1172
1244
  end
1173
1245
 
1174
- if has_terminal?('next', false, index)
1175
- r0 = instantiate_node(LastNext,input, index...(index + 4))
1176
- @index += 4
1246
+ if (match_len = has_terminal?('next', false, index))
1247
+ r0 = instantiate_node(LastNext,input, index...(index + match_len))
1248
+ @index += match_len
1177
1249
  else
1178
- terminal_parse_failure('next')
1250
+ terminal_parse_failure('\'next\'')
1179
1251
  r0 = nil
1180
1252
  end
1181
1253
 
@@ -1189,7 +1261,7 @@ module Timing
1189
1261
  if node_cache[:beginning_end].has_key?(index)
1190
1262
  cached = node_cache[:beginning_end][index]
1191
1263
  if cached
1192
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1264
+ node_cache[:beginning_end][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1193
1265
  @index = cached.interval.end
1194
1266
  end
1195
1267
  return cached
@@ -1198,10 +1270,12 @@ module Timing
1198
1270
  i0 = index
1199
1271
  r1 = _nt_beginning_of
1200
1272
  if r1
1273
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1201
1274
  r0 = r1
1202
1275
  else
1203
1276
  r2 = _nt_end_of
1204
1277
  if r2
1278
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1205
1279
  r0 = r2
1206
1280
  else
1207
1281
  @index = i0
@@ -1226,18 +1300,18 @@ module Timing
1226
1300
  if node_cache[:beginning_of].has_key?(index)
1227
1301
  cached = node_cache[:beginning_of][index]
1228
1302
  if cached
1229
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1303
+ node_cache[:beginning_of][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1230
1304
  @index = cached.interval.end
1231
1305
  end
1232
1306
  return cached
1233
1307
  end
1234
1308
 
1235
1309
  i0, s0 = index, []
1236
- if has_terminal?('beginning', false, index)
1237
- r1 = instantiate_node(SyntaxNode,input, index...(index + 9))
1238
- @index += 9
1310
+ if (match_len = has_terminal?('beginning', false, index))
1311
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1312
+ @index += match_len
1239
1313
  else
1240
- terminal_parse_failure('beginning')
1314
+ terminal_parse_failure('\'beginning\'')
1241
1315
  r1 = nil
1242
1316
  end
1243
1317
  s0 << r1
@@ -1254,11 +1328,11 @@ module Timing
1254
1328
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1255
1329
  s0 << r2
1256
1330
  if r2
1257
- if has_terminal?('of', false, index)
1258
- r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
1259
- @index += 2
1331
+ if (match_len = has_terminal?('of', false, index))
1332
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1333
+ @index += match_len
1260
1334
  else
1261
- terminal_parse_failure('of')
1335
+ terminal_parse_failure('\'of\'')
1262
1336
  r4 = nil
1263
1337
  end
1264
1338
  s0 << r4
@@ -1289,18 +1363,18 @@ module Timing
1289
1363
  if node_cache[:end_of].has_key?(index)
1290
1364
  cached = node_cache[:end_of][index]
1291
1365
  if cached
1292
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1366
+ node_cache[:end_of][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1293
1367
  @index = cached.interval.end
1294
1368
  end
1295
1369
  return cached
1296
1370
  end
1297
1371
 
1298
1372
  i0, s0 = index, []
1299
- if has_terminal?('end', false, index)
1300
- r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
1301
- @index += 3
1373
+ if (match_len = has_terminal?('end', false, index))
1374
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1375
+ @index += match_len
1302
1376
  else
1303
- terminal_parse_failure('end')
1377
+ terminal_parse_failure('\'end\'')
1304
1378
  r1 = nil
1305
1379
  end
1306
1380
  s0 << r1
@@ -1317,11 +1391,11 @@ module Timing
1317
1391
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1318
1392
  s0 << r2
1319
1393
  if r2
1320
- if has_terminal?('of', false, index)
1321
- r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
1322
- @index += 2
1394
+ if (match_len = has_terminal?('of', false, index))
1395
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1396
+ @index += match_len
1323
1397
  else
1324
- terminal_parse_failure('of')
1398
+ terminal_parse_failure('\'of\'')
1325
1399
  r4 = nil
1326
1400
  end
1327
1401
  s0 << r4
@@ -1345,7 +1419,7 @@ module Timing
1345
1419
  if node_cache[:before_from].has_key?(index)
1346
1420
  cached = node_cache[:before_from][index]
1347
1421
  if cached
1348
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1422
+ node_cache[:before_from][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1349
1423
  @index = cached.interval.end
1350
1424
  end
1351
1425
  return cached
@@ -1354,10 +1428,12 @@ module Timing
1354
1428
  i0 = index
1355
1429
  r1 = _nt_before
1356
1430
  if r1
1431
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1357
1432
  r0 = r1
1358
1433
  else
1359
1434
  r2 = _nt_from
1360
1435
  if r2
1436
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1361
1437
  r0 = r2
1362
1438
  else
1363
1439
  @index = i0
@@ -1375,17 +1451,17 @@ module Timing
1375
1451
  if node_cache[:before].has_key?(index)
1376
1452
  cached = node_cache[:before][index]
1377
1453
  if cached
1378
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1454
+ node_cache[:before][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1379
1455
  @index = cached.interval.end
1380
1456
  end
1381
1457
  return cached
1382
1458
  end
1383
1459
 
1384
- if has_terminal?('before', false, index)
1385
- r0 = instantiate_node(BeforeFrom,input, index...(index + 6))
1386
- @index += 6
1460
+ if (match_len = has_terminal?('before', false, index))
1461
+ r0 = instantiate_node(BeforeFrom,input, index...(index + match_len))
1462
+ @index += match_len
1387
1463
  else
1388
- terminal_parse_failure('before')
1464
+ terminal_parse_failure('\'before\'')
1389
1465
  r0 = nil
1390
1466
  end
1391
1467
 
@@ -1399,17 +1475,17 @@ module Timing
1399
1475
  if node_cache[:from].has_key?(index)
1400
1476
  cached = node_cache[:from][index]
1401
1477
  if cached
1402
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1478
+ node_cache[:from][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1403
1479
  @index = cached.interval.end
1404
1480
  end
1405
1481
  return cached
1406
1482
  end
1407
1483
 
1408
- if has_terminal?('from', false, index)
1409
- r0 = instantiate_node(BeforeFrom,input, index...(index + 4))
1410
- @index += 4
1484
+ if (match_len = has_terminal?('from', false, index))
1485
+ r0 = instantiate_node(BeforeFrom,input, index...(index + match_len))
1486
+ @index += match_len
1411
1487
  else
1412
- terminal_parse_failure('from')
1488
+ terminal_parse_failure('\'from\'')
1413
1489
  r0 = nil
1414
1490
  end
1415
1491
 
@@ -1423,7 +1499,7 @@ module Timing
1423
1499
  if node_cache[:interval].has_key?(index)
1424
1500
  cached = node_cache[:interval][index]
1425
1501
  if cached
1426
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1502
+ node_cache[:interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1427
1503
  @index = cached.interval.end
1428
1504
  end
1429
1505
  return cached
@@ -1432,30 +1508,37 @@ module Timing
1432
1508
  i0 = index
1433
1509
  r1 = _nt_second_interval
1434
1510
  if r1
1511
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1435
1512
  r0 = r1
1436
1513
  else
1437
1514
  r2 = _nt_minute_interval
1438
1515
  if r2
1516
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1439
1517
  r0 = r2
1440
1518
  else
1441
1519
  r3 = _nt_hour_interval
1442
1520
  if r3
1521
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1443
1522
  r0 = r3
1444
1523
  else
1445
1524
  r4 = _nt_day_interval
1446
1525
  if r4
1526
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1447
1527
  r0 = r4
1448
1528
  else
1449
1529
  r5 = _nt_week_interval
1450
1530
  if r5
1531
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1451
1532
  r0 = r5
1452
1533
  else
1453
1534
  r6 = _nt_month_interval
1454
1535
  if r6
1536
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
1455
1537
  r0 = r6
1456
1538
  else
1457
1539
  r7 = _nt_year_interval
1458
1540
  if r7
1541
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
1459
1542
  r0 = r7
1460
1543
  else
1461
1544
  @index = i0
@@ -1481,27 +1564,27 @@ module Timing
1481
1564
  if node_cache[:second_interval].has_key?(index)
1482
1565
  cached = node_cache[:second_interval][index]
1483
1566
  if cached
1484
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1567
+ node_cache[:second_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1485
1568
  @index = cached.interval.end
1486
1569
  end
1487
1570
  return cached
1488
1571
  end
1489
1572
 
1490
1573
  i0, s0 = index, []
1491
- if has_terminal?('second', false, index)
1492
- r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
1493
- @index += 6
1574
+ if (match_len = has_terminal?('second', false, index))
1575
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1576
+ @index += match_len
1494
1577
  else
1495
- terminal_parse_failure('second')
1578
+ terminal_parse_failure('\'second\'')
1496
1579
  r1 = nil
1497
1580
  end
1498
1581
  s0 << r1
1499
1582
  if r1
1500
- if has_terminal?('s', false, index)
1501
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1502
- @index += 1
1583
+ if (match_len = has_terminal?('s', false, index))
1584
+ r3 = true
1585
+ @index += match_len
1503
1586
  else
1504
- terminal_parse_failure('s')
1587
+ terminal_parse_failure('\'s\'')
1505
1588
  r3 = nil
1506
1589
  end
1507
1590
  if r3
@@ -1532,27 +1615,27 @@ module Timing
1532
1615
  if node_cache[:minute_interval].has_key?(index)
1533
1616
  cached = node_cache[:minute_interval][index]
1534
1617
  if cached
1535
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1618
+ node_cache[:minute_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1536
1619
  @index = cached.interval.end
1537
1620
  end
1538
1621
  return cached
1539
1622
  end
1540
1623
 
1541
1624
  i0, s0 = index, []
1542
- if has_terminal?('minute', false, index)
1543
- r1 = instantiate_node(SyntaxNode,input, index...(index + 6))
1544
- @index += 6
1625
+ if (match_len = has_terminal?('minute', false, index))
1626
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1627
+ @index += match_len
1545
1628
  else
1546
- terminal_parse_failure('minute')
1629
+ terminal_parse_failure('\'minute\'')
1547
1630
  r1 = nil
1548
1631
  end
1549
1632
  s0 << r1
1550
1633
  if r1
1551
- if has_terminal?('s', false, index)
1552
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1553
- @index += 1
1634
+ if (match_len = has_terminal?('s', false, index))
1635
+ r3 = true
1636
+ @index += match_len
1554
1637
  else
1555
- terminal_parse_failure('s')
1638
+ terminal_parse_failure('\'s\'')
1556
1639
  r3 = nil
1557
1640
  end
1558
1641
  if r3
@@ -1583,27 +1666,27 @@ module Timing
1583
1666
  if node_cache[:hour_interval].has_key?(index)
1584
1667
  cached = node_cache[:hour_interval][index]
1585
1668
  if cached
1586
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1669
+ node_cache[:hour_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1587
1670
  @index = cached.interval.end
1588
1671
  end
1589
1672
  return cached
1590
1673
  end
1591
1674
 
1592
1675
  i0, s0 = index, []
1593
- if has_terminal?('hour', false, index)
1594
- r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1595
- @index += 4
1676
+ if (match_len = has_terminal?('hour', false, index))
1677
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1678
+ @index += match_len
1596
1679
  else
1597
- terminal_parse_failure('hour')
1680
+ terminal_parse_failure('\'hour\'')
1598
1681
  r1 = nil
1599
1682
  end
1600
1683
  s0 << r1
1601
1684
  if r1
1602
- if has_terminal?('s', false, index)
1603
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1604
- @index += 1
1685
+ if (match_len = has_terminal?('s', false, index))
1686
+ r3 = true
1687
+ @index += match_len
1605
1688
  else
1606
- terminal_parse_failure('s')
1689
+ terminal_parse_failure('\'s\'')
1607
1690
  r3 = nil
1608
1691
  end
1609
1692
  if r3
@@ -1634,27 +1717,27 @@ module Timing
1634
1717
  if node_cache[:day_interval].has_key?(index)
1635
1718
  cached = node_cache[:day_interval][index]
1636
1719
  if cached
1637
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1720
+ node_cache[:day_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1638
1721
  @index = cached.interval.end
1639
1722
  end
1640
1723
  return cached
1641
1724
  end
1642
1725
 
1643
1726
  i0, s0 = index, []
1644
- if has_terminal?('day', false, index)
1645
- r1 = instantiate_node(SyntaxNode,input, index...(index + 3))
1646
- @index += 3
1727
+ if (match_len = has_terminal?('day', false, index))
1728
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1729
+ @index += match_len
1647
1730
  else
1648
- terminal_parse_failure('day')
1731
+ terminal_parse_failure('\'day\'')
1649
1732
  r1 = nil
1650
1733
  end
1651
1734
  s0 << r1
1652
1735
  if r1
1653
- if has_terminal?('s', false, index)
1654
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1655
- @index += 1
1736
+ if (match_len = has_terminal?('s', false, index))
1737
+ r3 = true
1738
+ @index += match_len
1656
1739
  else
1657
- terminal_parse_failure('s')
1740
+ terminal_parse_failure('\'s\'')
1658
1741
  r3 = nil
1659
1742
  end
1660
1743
  if r3
@@ -1685,27 +1768,27 @@ module Timing
1685
1768
  if node_cache[:week_interval].has_key?(index)
1686
1769
  cached = node_cache[:week_interval][index]
1687
1770
  if cached
1688
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1771
+ node_cache[:week_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1689
1772
  @index = cached.interval.end
1690
1773
  end
1691
1774
  return cached
1692
1775
  end
1693
1776
 
1694
1777
  i0, s0 = index, []
1695
- if has_terminal?('week', false, index)
1696
- r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1697
- @index += 4
1778
+ if (match_len = has_terminal?('week', false, index))
1779
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1780
+ @index += match_len
1698
1781
  else
1699
- terminal_parse_failure('week')
1782
+ terminal_parse_failure('\'week\'')
1700
1783
  r1 = nil
1701
1784
  end
1702
1785
  s0 << r1
1703
1786
  if r1
1704
- if has_terminal?('s', false, index)
1705
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1706
- @index += 1
1787
+ if (match_len = has_terminal?('s', false, index))
1788
+ r3 = true
1789
+ @index += match_len
1707
1790
  else
1708
- terminal_parse_failure('s')
1791
+ terminal_parse_failure('\'s\'')
1709
1792
  r3 = nil
1710
1793
  end
1711
1794
  if r3
@@ -1736,27 +1819,27 @@ module Timing
1736
1819
  if node_cache[:month_interval].has_key?(index)
1737
1820
  cached = node_cache[:month_interval][index]
1738
1821
  if cached
1739
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1822
+ node_cache[:month_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1740
1823
  @index = cached.interval.end
1741
1824
  end
1742
1825
  return cached
1743
1826
  end
1744
1827
 
1745
1828
  i0, s0 = index, []
1746
- if has_terminal?('month', false, index)
1747
- r1 = instantiate_node(SyntaxNode,input, index...(index + 5))
1748
- @index += 5
1829
+ if (match_len = has_terminal?('month', false, index))
1830
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1831
+ @index += match_len
1749
1832
  else
1750
- terminal_parse_failure('month')
1833
+ terminal_parse_failure('\'month\'')
1751
1834
  r1 = nil
1752
1835
  end
1753
1836
  s0 << r1
1754
1837
  if r1
1755
- if has_terminal?('s', false, index)
1756
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1757
- @index += 1
1838
+ if (match_len = has_terminal?('s', false, index))
1839
+ r3 = true
1840
+ @index += match_len
1758
1841
  else
1759
- terminal_parse_failure('s')
1842
+ terminal_parse_failure('\'s\'')
1760
1843
  r3 = nil
1761
1844
  end
1762
1845
  if r3
@@ -1787,27 +1870,27 @@ module Timing
1787
1870
  if node_cache[:year_interval].has_key?(index)
1788
1871
  cached = node_cache[:year_interval][index]
1789
1872
  if cached
1790
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1873
+ node_cache[:year_interval][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1791
1874
  @index = cached.interval.end
1792
1875
  end
1793
1876
  return cached
1794
1877
  end
1795
1878
 
1796
1879
  i0, s0 = index, []
1797
- if has_terminal?('year', false, index)
1798
- r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
1799
- @index += 4
1880
+ if (match_len = has_terminal?('year', false, index))
1881
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1882
+ @index += match_len
1800
1883
  else
1801
- terminal_parse_failure('year')
1884
+ terminal_parse_failure('\'year\'')
1802
1885
  r1 = nil
1803
1886
  end
1804
1887
  s0 << r1
1805
1888
  if r1
1806
- if has_terminal?('s', false, index)
1807
- r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1808
- @index += 1
1889
+ if (match_len = has_terminal?('s', false, index))
1890
+ r3 = true
1891
+ @index += match_len
1809
1892
  else
1810
- terminal_parse_failure('s')
1893
+ terminal_parse_failure('\'s\'')
1811
1894
  r3 = nil
1812
1895
  end
1813
1896
  if r3
@@ -1835,7 +1918,7 @@ module Timing
1835
1918
  if node_cache[:day_name].has_key?(index)
1836
1919
  cached = node_cache[:day_name][index]
1837
1920
  if cached
1838
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1921
+ node_cache[:day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1839
1922
  @index = cached.interval.end
1840
1923
  end
1841
1924
  return cached
@@ -1844,10 +1927,12 @@ module Timing
1844
1927
  i0 = index
1845
1928
  r1 = _nt_long_day_name
1846
1929
  if r1
1930
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1847
1931
  r0 = r1
1848
1932
  else
1849
1933
  r2 = _nt_short_day_name
1850
1934
  if r2
1935
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1851
1936
  r0 = r2
1852
1937
  else
1853
1938
  @index = i0
@@ -1865,81 +1950,88 @@ module Timing
1865
1950
  if node_cache[:long_day_name].has_key?(index)
1866
1951
  cached = node_cache[:long_day_name][index]
1867
1952
  if cached
1868
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1953
+ node_cache[:long_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1869
1954
  @index = cached.interval.end
1870
1955
  end
1871
1956
  return cached
1872
1957
  end
1873
1958
 
1874
1959
  i0 = index
1875
- if has_terminal?('sunday', false, index)
1876
- r1 = instantiate_node(DayName,input, index...(index + 6))
1877
- @index += 6
1960
+ if (match_len = has_terminal?('sunday', false, index))
1961
+ r1 = instantiate_node(DayName,input, index...(index + match_len))
1962
+ @index += match_len
1878
1963
  else
1879
- terminal_parse_failure('sunday')
1964
+ terminal_parse_failure('\'sunday\'')
1880
1965
  r1 = nil
1881
1966
  end
1882
1967
  if r1
1968
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1883
1969
  r0 = r1
1884
1970
  else
1885
- if has_terminal?('monday', false, index)
1886
- r2 = instantiate_node(DayName,input, index...(index + 6))
1887
- @index += 6
1971
+ if (match_len = has_terminal?('monday', false, index))
1972
+ r2 = instantiate_node(DayName,input, index...(index + match_len))
1973
+ @index += match_len
1888
1974
  else
1889
- terminal_parse_failure('monday')
1975
+ terminal_parse_failure('\'monday\'')
1890
1976
  r2 = nil
1891
1977
  end
1892
1978
  if r2
1979
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1893
1980
  r0 = r2
1894
1981
  else
1895
- if has_terminal?('tuesday', false, index)
1896
- r3 = instantiate_node(DayName,input, index...(index + 7))
1897
- @index += 7
1982
+ if (match_len = has_terminal?('tuesday', false, index))
1983
+ r3 = instantiate_node(DayName,input, index...(index + match_len))
1984
+ @index += match_len
1898
1985
  else
1899
- terminal_parse_failure('tuesday')
1986
+ terminal_parse_failure('\'tuesday\'')
1900
1987
  r3 = nil
1901
1988
  end
1902
1989
  if r3
1990
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1903
1991
  r0 = r3
1904
1992
  else
1905
- if has_terminal?('wednesday', false, index)
1906
- r4 = instantiate_node(DayName,input, index...(index + 9))
1907
- @index += 9
1993
+ if (match_len = has_terminal?('wednesday', false, index))
1994
+ r4 = instantiate_node(DayName,input, index...(index + match_len))
1995
+ @index += match_len
1908
1996
  else
1909
- terminal_parse_failure('wednesday')
1997
+ terminal_parse_failure('\'wednesday\'')
1910
1998
  r4 = nil
1911
1999
  end
1912
2000
  if r4
2001
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1913
2002
  r0 = r4
1914
2003
  else
1915
- if has_terminal?('thursday', false, index)
1916
- r5 = instantiate_node(DayName,input, index...(index + 8))
1917
- @index += 8
2004
+ if (match_len = has_terminal?('thursday', false, index))
2005
+ r5 = instantiate_node(DayName,input, index...(index + match_len))
2006
+ @index += match_len
1918
2007
  else
1919
- terminal_parse_failure('thursday')
2008
+ terminal_parse_failure('\'thursday\'')
1920
2009
  r5 = nil
1921
2010
  end
1922
2011
  if r5
2012
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1923
2013
  r0 = r5
1924
2014
  else
1925
- if has_terminal?('friday', false, index)
1926
- r6 = instantiate_node(DayName,input, index...(index + 6))
1927
- @index += 6
2015
+ if (match_len = has_terminal?('friday', false, index))
2016
+ r6 = instantiate_node(DayName,input, index...(index + match_len))
2017
+ @index += match_len
1928
2018
  else
1929
- terminal_parse_failure('friday')
2019
+ terminal_parse_failure('\'friday\'')
1930
2020
  r6 = nil
1931
2021
  end
1932
2022
  if r6
2023
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
1933
2024
  r0 = r6
1934
2025
  else
1935
- if has_terminal?('saturday', false, index)
1936
- r7 = instantiate_node(DayName,input, index...(index + 8))
1937
- @index += 8
2026
+ if (match_len = has_terminal?('saturday', false, index))
2027
+ r7 = instantiate_node(DayName,input, index...(index + match_len))
2028
+ @index += match_len
1938
2029
  else
1939
- terminal_parse_failure('saturday')
2030
+ terminal_parse_failure('\'saturday\'')
1940
2031
  r7 = nil
1941
2032
  end
1942
2033
  if r7
2034
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
1943
2035
  r0 = r7
1944
2036
  else
1945
2037
  @index = i0
@@ -1962,81 +2054,88 @@ module Timing
1962
2054
  if node_cache[:short_day_name].has_key?(index)
1963
2055
  cached = node_cache[:short_day_name][index]
1964
2056
  if cached
1965
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2057
+ node_cache[:short_day_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1966
2058
  @index = cached.interval.end
1967
2059
  end
1968
2060
  return cached
1969
2061
  end
1970
2062
 
1971
2063
  i0 = index
1972
- if has_terminal?('sun', false, index)
1973
- r1 = instantiate_node(DayName,input, index...(index + 3))
1974
- @index += 3
2064
+ if (match_len = has_terminal?('sun', false, index))
2065
+ r1 = instantiate_node(DayName,input, index...(index + match_len))
2066
+ @index += match_len
1975
2067
  else
1976
- terminal_parse_failure('sun')
2068
+ terminal_parse_failure('\'sun\'')
1977
2069
  r1 = nil
1978
2070
  end
1979
2071
  if r1
2072
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1980
2073
  r0 = r1
1981
2074
  else
1982
- if has_terminal?('mon', false, index)
1983
- r2 = instantiate_node(DayName,input, index...(index + 3))
1984
- @index += 3
2075
+ if (match_len = has_terminal?('mon', false, index))
2076
+ r2 = instantiate_node(DayName,input, index...(index + match_len))
2077
+ @index += match_len
1985
2078
  else
1986
- terminal_parse_failure('mon')
2079
+ terminal_parse_failure('\'mon\'')
1987
2080
  r2 = nil
1988
2081
  end
1989
2082
  if r2
2083
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1990
2084
  r0 = r2
1991
2085
  else
1992
- if has_terminal?('tue', false, index)
1993
- r3 = instantiate_node(DayName,input, index...(index + 3))
1994
- @index += 3
2086
+ if (match_len = has_terminal?('tue', false, index))
2087
+ r3 = instantiate_node(DayName,input, index...(index + match_len))
2088
+ @index += match_len
1995
2089
  else
1996
- terminal_parse_failure('tue')
2090
+ terminal_parse_failure('\'tue\'')
1997
2091
  r3 = nil
1998
2092
  end
1999
2093
  if r3
2094
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2000
2095
  r0 = r3
2001
2096
  else
2002
- if has_terminal?('wed', false, index)
2003
- r4 = instantiate_node(DayName,input, index...(index + 3))
2004
- @index += 3
2097
+ if (match_len = has_terminal?('wed', false, index))
2098
+ r4 = instantiate_node(DayName,input, index...(index + match_len))
2099
+ @index += match_len
2005
2100
  else
2006
- terminal_parse_failure('wed')
2101
+ terminal_parse_failure('\'wed\'')
2007
2102
  r4 = nil
2008
2103
  end
2009
2104
  if r4
2105
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2010
2106
  r0 = r4
2011
2107
  else
2012
- if has_terminal?('thu', false, index)
2013
- r5 = instantiate_node(DayName,input, index...(index + 3))
2014
- @index += 3
2108
+ if (match_len = has_terminal?('thu', false, index))
2109
+ r5 = instantiate_node(DayName,input, index...(index + match_len))
2110
+ @index += match_len
2015
2111
  else
2016
- terminal_parse_failure('thu')
2112
+ terminal_parse_failure('\'thu\'')
2017
2113
  r5 = nil
2018
2114
  end
2019
2115
  if r5
2116
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2020
2117
  r0 = r5
2021
2118
  else
2022
- if has_terminal?('fri', false, index)
2023
- r6 = instantiate_node(DayName,input, index...(index + 3))
2024
- @index += 3
2119
+ if (match_len = has_terminal?('fri', false, index))
2120
+ r6 = instantiate_node(DayName,input, index...(index + match_len))
2121
+ @index += match_len
2025
2122
  else
2026
- terminal_parse_failure('fri')
2123
+ terminal_parse_failure('\'fri\'')
2027
2124
  r6 = nil
2028
2125
  end
2029
2126
  if r6
2127
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2030
2128
  r0 = r6
2031
2129
  else
2032
- if has_terminal?('sat', false, index)
2033
- r7 = instantiate_node(DayName,input, index...(index + 3))
2034
- @index += 3
2130
+ if (match_len = has_terminal?('sat', false, index))
2131
+ r7 = instantiate_node(DayName,input, index...(index + match_len))
2132
+ @index += match_len
2035
2133
  else
2036
- terminal_parse_failure('sat')
2134
+ terminal_parse_failure('\'sat\'')
2037
2135
  r7 = nil
2038
2136
  end
2039
2137
  if r7
2138
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2040
2139
  r0 = r7
2041
2140
  else
2042
2141
  @index = i0
@@ -2059,7 +2158,7 @@ module Timing
2059
2158
  if node_cache[:month_name].has_key?(index)
2060
2159
  cached = node_cache[:month_name][index]
2061
2160
  if cached
2062
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2161
+ node_cache[:month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2063
2162
  @index = cached.interval.end
2064
2163
  end
2065
2164
  return cached
@@ -2068,10 +2167,12 @@ module Timing
2068
2167
  i0 = index
2069
2168
  r1 = _nt_long_month_name
2070
2169
  if r1
2170
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2071
2171
  r0 = r1
2072
2172
  else
2073
2173
  r2 = _nt_short_month_name
2074
2174
  if r2
2175
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2075
2176
  r0 = r2
2076
2177
  else
2077
2178
  @index = i0
@@ -2089,131 +2190,143 @@ module Timing
2089
2190
  if node_cache[:long_month_name].has_key?(index)
2090
2191
  cached = node_cache[:long_month_name][index]
2091
2192
  if cached
2092
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2193
+ node_cache[:long_month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2093
2194
  @index = cached.interval.end
2094
2195
  end
2095
2196
  return cached
2096
2197
  end
2097
2198
 
2098
2199
  i0 = index
2099
- if has_terminal?('january', false, index)
2100
- r1 = instantiate_node(MonthName,input, index...(index + 7))
2101
- @index += 7
2200
+ if (match_len = has_terminal?('january', false, index))
2201
+ r1 = instantiate_node(MonthName,input, index...(index + match_len))
2202
+ @index += match_len
2102
2203
  else
2103
- terminal_parse_failure('january')
2204
+ terminal_parse_failure('\'january\'')
2104
2205
  r1 = nil
2105
2206
  end
2106
2207
  if r1
2208
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2107
2209
  r0 = r1
2108
2210
  else
2109
- if has_terminal?('february', false, index)
2110
- r2 = instantiate_node(MonthName,input, index...(index + 8))
2111
- @index += 8
2211
+ if (match_len = has_terminal?('february', false, index))
2212
+ r2 = instantiate_node(MonthName,input, index...(index + match_len))
2213
+ @index += match_len
2112
2214
  else
2113
- terminal_parse_failure('february')
2215
+ terminal_parse_failure('\'february\'')
2114
2216
  r2 = nil
2115
2217
  end
2116
2218
  if r2
2219
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2117
2220
  r0 = r2
2118
2221
  else
2119
- if has_terminal?('march', false, index)
2120
- r3 = instantiate_node(MonthName,input, index...(index + 5))
2121
- @index += 5
2222
+ if (match_len = has_terminal?('march', false, index))
2223
+ r3 = instantiate_node(MonthName,input, index...(index + match_len))
2224
+ @index += match_len
2122
2225
  else
2123
- terminal_parse_failure('march')
2226
+ terminal_parse_failure('\'march\'')
2124
2227
  r3 = nil
2125
2228
  end
2126
2229
  if r3
2230
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2127
2231
  r0 = r3
2128
2232
  else
2129
- if has_terminal?('april', false, index)
2130
- r4 = instantiate_node(MonthName,input, index...(index + 5))
2131
- @index += 5
2233
+ if (match_len = has_terminal?('april', false, index))
2234
+ r4 = instantiate_node(MonthName,input, index...(index + match_len))
2235
+ @index += match_len
2132
2236
  else
2133
- terminal_parse_failure('april')
2237
+ terminal_parse_failure('\'april\'')
2134
2238
  r4 = nil
2135
2239
  end
2136
2240
  if r4
2241
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2137
2242
  r0 = r4
2138
2243
  else
2139
- if has_terminal?('may', false, index)
2140
- r5 = instantiate_node(MonthName,input, index...(index + 3))
2141
- @index += 3
2244
+ if (match_len = has_terminal?('may', false, index))
2245
+ r5 = instantiate_node(MonthName,input, index...(index + match_len))
2246
+ @index += match_len
2142
2247
  else
2143
- terminal_parse_failure('may')
2248
+ terminal_parse_failure('\'may\'')
2144
2249
  r5 = nil
2145
2250
  end
2146
2251
  if r5
2252
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2147
2253
  r0 = r5
2148
2254
  else
2149
- if has_terminal?('june', false, index)
2150
- r6 = instantiate_node(MonthName,input, index...(index + 4))
2151
- @index += 4
2255
+ if (match_len = has_terminal?('june', false, index))
2256
+ r6 = instantiate_node(MonthName,input, index...(index + match_len))
2257
+ @index += match_len
2152
2258
  else
2153
- terminal_parse_failure('june')
2259
+ terminal_parse_failure('\'june\'')
2154
2260
  r6 = nil
2155
2261
  end
2156
2262
  if r6
2263
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2157
2264
  r0 = r6
2158
2265
  else
2159
- if has_terminal?('july', false, index)
2160
- r7 = instantiate_node(MonthName,input, index...(index + 4))
2161
- @index += 4
2266
+ if (match_len = has_terminal?('july', false, index))
2267
+ r7 = instantiate_node(MonthName,input, index...(index + match_len))
2268
+ @index += match_len
2162
2269
  else
2163
- terminal_parse_failure('july')
2270
+ terminal_parse_failure('\'july\'')
2164
2271
  r7 = nil
2165
2272
  end
2166
2273
  if r7
2274
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2167
2275
  r0 = r7
2168
2276
  else
2169
- if has_terminal?('august', false, index)
2170
- r8 = instantiate_node(MonthName,input, index...(index + 6))
2171
- @index += 6
2277
+ if (match_len = has_terminal?('august', false, index))
2278
+ r8 = instantiate_node(MonthName,input, index...(index + match_len))
2279
+ @index += match_len
2172
2280
  else
2173
- terminal_parse_failure('august')
2281
+ terminal_parse_failure('\'august\'')
2174
2282
  r8 = nil
2175
2283
  end
2176
2284
  if r8
2285
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2177
2286
  r0 = r8
2178
2287
  else
2179
- if has_terminal?('september', false, index)
2180
- r9 = instantiate_node(MonthName,input, index...(index + 9))
2181
- @index += 9
2288
+ if (match_len = has_terminal?('september', false, index))
2289
+ r9 = instantiate_node(MonthName,input, index...(index + match_len))
2290
+ @index += match_len
2182
2291
  else
2183
- terminal_parse_failure('september')
2292
+ terminal_parse_failure('\'september\'')
2184
2293
  r9 = nil
2185
2294
  end
2186
2295
  if r9
2296
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2187
2297
  r0 = r9
2188
2298
  else
2189
- if has_terminal?('october', false, index)
2190
- r10 = instantiate_node(MonthName,input, index...(index + 7))
2191
- @index += 7
2299
+ if (match_len = has_terminal?('october', false, index))
2300
+ r10 = instantiate_node(MonthName,input, index...(index + match_len))
2301
+ @index += match_len
2192
2302
  else
2193
- terminal_parse_failure('october')
2303
+ terminal_parse_failure('\'october\'')
2194
2304
  r10 = nil
2195
2305
  end
2196
2306
  if r10
2307
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2197
2308
  r0 = r10
2198
2309
  else
2199
- if has_terminal?('november', false, index)
2200
- r11 = instantiate_node(MonthName,input, index...(index + 8))
2201
- @index += 8
2310
+ if (match_len = has_terminal?('november', false, index))
2311
+ r11 = instantiate_node(MonthName,input, index...(index + match_len))
2312
+ @index += match_len
2202
2313
  else
2203
- terminal_parse_failure('november')
2314
+ terminal_parse_failure('\'november\'')
2204
2315
  r11 = nil
2205
2316
  end
2206
2317
  if r11
2318
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2207
2319
  r0 = r11
2208
2320
  else
2209
- if has_terminal?('december', false, index)
2210
- r12 = instantiate_node(MonthName,input, index...(index + 8))
2211
- @index += 8
2321
+ if (match_len = has_terminal?('december', false, index))
2322
+ r12 = instantiate_node(MonthName,input, index...(index + match_len))
2323
+ @index += match_len
2212
2324
  else
2213
- terminal_parse_failure('december')
2325
+ terminal_parse_failure('\'december\'')
2214
2326
  r12 = nil
2215
2327
  end
2216
2328
  if r12
2329
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2217
2330
  r0 = r12
2218
2331
  else
2219
2332
  @index = i0
@@ -2241,131 +2354,143 @@ module Timing
2241
2354
  if node_cache[:short_month_name].has_key?(index)
2242
2355
  cached = node_cache[:short_month_name][index]
2243
2356
  if cached
2244
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2357
+ node_cache[:short_month_name][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2245
2358
  @index = cached.interval.end
2246
2359
  end
2247
2360
  return cached
2248
2361
  end
2249
2362
 
2250
2363
  i0 = index
2251
- if has_terminal?('jan', false, index)
2252
- r1 = instantiate_node(MonthName,input, index...(index + 3))
2253
- @index += 3
2364
+ if (match_len = has_terminal?('jan', false, index))
2365
+ r1 = instantiate_node(MonthName,input, index...(index + match_len))
2366
+ @index += match_len
2254
2367
  else
2255
- terminal_parse_failure('jan')
2368
+ terminal_parse_failure('\'jan\'')
2256
2369
  r1 = nil
2257
2370
  end
2258
2371
  if r1
2372
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2259
2373
  r0 = r1
2260
2374
  else
2261
- if has_terminal?('feb', false, index)
2262
- r2 = instantiate_node(MonthName,input, index...(index + 3))
2263
- @index += 3
2375
+ if (match_len = has_terminal?('feb', false, index))
2376
+ r2 = instantiate_node(MonthName,input, index...(index + match_len))
2377
+ @index += match_len
2264
2378
  else
2265
- terminal_parse_failure('feb')
2379
+ terminal_parse_failure('\'feb\'')
2266
2380
  r2 = nil
2267
2381
  end
2268
2382
  if r2
2383
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2269
2384
  r0 = r2
2270
2385
  else
2271
- if has_terminal?('mar', false, index)
2272
- r3 = instantiate_node(MonthName,input, index...(index + 3))
2273
- @index += 3
2386
+ if (match_len = has_terminal?('mar', false, index))
2387
+ r3 = instantiate_node(MonthName,input, index...(index + match_len))
2388
+ @index += match_len
2274
2389
  else
2275
- terminal_parse_failure('mar')
2390
+ terminal_parse_failure('\'mar\'')
2276
2391
  r3 = nil
2277
2392
  end
2278
2393
  if r3
2394
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2279
2395
  r0 = r3
2280
2396
  else
2281
- if has_terminal?('apr', false, index)
2282
- r4 = instantiate_node(MonthName,input, index...(index + 3))
2283
- @index += 3
2397
+ if (match_len = has_terminal?('apr', false, index))
2398
+ r4 = instantiate_node(MonthName,input, index...(index + match_len))
2399
+ @index += match_len
2284
2400
  else
2285
- terminal_parse_failure('apr')
2401
+ terminal_parse_failure('\'apr\'')
2286
2402
  r4 = nil
2287
2403
  end
2288
2404
  if r4
2405
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2289
2406
  r0 = r4
2290
2407
  else
2291
- if has_terminal?('may', false, index)
2292
- r5 = instantiate_node(MonthName,input, index...(index + 3))
2293
- @index += 3
2408
+ if (match_len = has_terminal?('may', false, index))
2409
+ r5 = instantiate_node(MonthName,input, index...(index + match_len))
2410
+ @index += match_len
2294
2411
  else
2295
- terminal_parse_failure('may')
2412
+ terminal_parse_failure('\'may\'')
2296
2413
  r5 = nil
2297
2414
  end
2298
2415
  if r5
2416
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2299
2417
  r0 = r5
2300
2418
  else
2301
- if has_terminal?('jun', false, index)
2302
- r6 = instantiate_node(MonthName,input, index...(index + 3))
2303
- @index += 3
2419
+ if (match_len = has_terminal?('jun', false, index))
2420
+ r6 = instantiate_node(MonthName,input, index...(index + match_len))
2421
+ @index += match_len
2304
2422
  else
2305
- terminal_parse_failure('jun')
2423
+ terminal_parse_failure('\'jun\'')
2306
2424
  r6 = nil
2307
2425
  end
2308
2426
  if r6
2427
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2309
2428
  r0 = r6
2310
2429
  else
2311
- if has_terminal?('jul', false, index)
2312
- r7 = instantiate_node(MonthName,input, index...(index + 3))
2313
- @index += 3
2430
+ if (match_len = has_terminal?('jul', false, index))
2431
+ r7 = instantiate_node(MonthName,input, index...(index + match_len))
2432
+ @index += match_len
2314
2433
  else
2315
- terminal_parse_failure('jul')
2434
+ terminal_parse_failure('\'jul\'')
2316
2435
  r7 = nil
2317
2436
  end
2318
2437
  if r7
2438
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2319
2439
  r0 = r7
2320
2440
  else
2321
- if has_terminal?('aug', false, index)
2322
- r8 = instantiate_node(MonthName,input, index...(index + 3))
2323
- @index += 3
2441
+ if (match_len = has_terminal?('aug', false, index))
2442
+ r8 = instantiate_node(MonthName,input, index...(index + match_len))
2443
+ @index += match_len
2324
2444
  else
2325
- terminal_parse_failure('aug')
2445
+ terminal_parse_failure('\'aug\'')
2326
2446
  r8 = nil
2327
2447
  end
2328
2448
  if r8
2449
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
2329
2450
  r0 = r8
2330
2451
  else
2331
- if has_terminal?('sep', false, index)
2332
- r9 = instantiate_node(MonthName,input, index...(index + 3))
2333
- @index += 3
2452
+ if (match_len = has_terminal?('sep', false, index))
2453
+ r9 = instantiate_node(MonthName,input, index...(index + match_len))
2454
+ @index += match_len
2334
2455
  else
2335
- terminal_parse_failure('sep')
2456
+ terminal_parse_failure('\'sep\'')
2336
2457
  r9 = nil
2337
2458
  end
2338
2459
  if r9
2460
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2339
2461
  r0 = r9
2340
2462
  else
2341
- if has_terminal?('oct', false, index)
2342
- r10 = instantiate_node(MonthName,input, index...(index + 3))
2343
- @index += 3
2463
+ if (match_len = has_terminal?('oct', false, index))
2464
+ r10 = instantiate_node(MonthName,input, index...(index + match_len))
2465
+ @index += match_len
2344
2466
  else
2345
- terminal_parse_failure('oct')
2467
+ terminal_parse_failure('\'oct\'')
2346
2468
  r10 = nil
2347
2469
  end
2348
2470
  if r10
2471
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2349
2472
  r0 = r10
2350
2473
  else
2351
- if has_terminal?('nov', false, index)
2352
- r11 = instantiate_node(MonthName,input, index...(index + 3))
2353
- @index += 3
2474
+ if (match_len = has_terminal?('nov', false, index))
2475
+ r11 = instantiate_node(MonthName,input, index...(index + match_len))
2476
+ @index += match_len
2354
2477
  else
2355
- terminal_parse_failure('nov')
2478
+ terminal_parse_failure('\'nov\'')
2356
2479
  r11 = nil
2357
2480
  end
2358
2481
  if r11
2482
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
2359
2483
  r0 = r11
2360
2484
  else
2361
- if has_terminal?('dec', false, index)
2362
- r12 = instantiate_node(MonthName,input, index...(index + 3))
2363
- @index += 3
2485
+ if (match_len = has_terminal?('dec', false, index))
2486
+ r12 = instantiate_node(MonthName,input, index...(index + match_len))
2487
+ @index += match_len
2364
2488
  else
2365
- terminal_parse_failure('dec')
2489
+ terminal_parse_failure('\'dec\'')
2366
2490
  r12 = nil
2367
2491
  end
2368
2492
  if r12
2493
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2369
2494
  r0 = r12
2370
2495
  else
2371
2496
  @index = i0
@@ -2396,27 +2521,29 @@ module Timing
2396
2521
  if node_cache[:zone_offset].has_key?(index)
2397
2522
  cached = node_cache[:zone_offset][index]
2398
2523
  if cached
2399
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2524
+ node_cache[:zone_offset][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2400
2525
  @index = cached.interval.end
2401
2526
  end
2402
2527
  return cached
2403
2528
  end
2404
2529
 
2405
2530
  i0, s0 = index, []
2406
- if has_terminal?('\G[+-]', true, index)
2531
+ if has_terminal?(@regexps[gr = '\A[+-]'] ||= Regexp.new(gr), :regexp, index)
2407
2532
  r1 = true
2408
2533
  @index += 1
2409
2534
  else
2535
+ terminal_parse_failure('[+-]')
2410
2536
  r1 = nil
2411
2537
  end
2412
2538
  s0 << r1
2413
2539
  if r1
2414
2540
  s2, i2 = [], index
2415
2541
  loop do
2416
- if has_terminal?('\G[\\d]', true, index)
2542
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2417
2543
  r3 = true
2418
2544
  @index += 1
2419
2545
  else
2546
+ terminal_parse_failure('[\\d]')
2420
2547
  r3 = nil
2421
2548
  end
2422
2549
  if r3
@@ -2432,15 +2559,18 @@ module Timing
2432
2559
  @index = i2
2433
2560
  r2 = nil
2434
2561
  else
2562
+ if s2.size < 2
2563
+ @terminal_failures.pop
2564
+ end
2435
2565
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2436
2566
  end
2437
2567
  s0 << r2
2438
2568
  if r2
2439
- if has_terminal?(':', false, index)
2440
- r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2441
- @index += 1
2569
+ if (match_len = has_terminal?(':', false, index))
2570
+ r5 = true
2571
+ @index += match_len
2442
2572
  else
2443
- terminal_parse_failure(':')
2573
+ terminal_parse_failure('\':\'')
2444
2574
  r5 = nil
2445
2575
  end
2446
2576
  if r5
@@ -2452,10 +2582,11 @@ module Timing
2452
2582
  if r4
2453
2583
  s6, i6 = [], index
2454
2584
  loop do
2455
- if has_terminal?('\G[\\d]', true, index)
2585
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2456
2586
  r7 = true
2457
2587
  @index += 1
2458
2588
  else
2589
+ terminal_parse_failure('[\\d]')
2459
2590
  r7 = nil
2460
2591
  end
2461
2592
  if r7
@@ -2471,6 +2602,9 @@ module Timing
2471
2602
  @index = i6
2472
2603
  r6 = nil
2473
2604
  else
2605
+ if s6.size < 2
2606
+ @terminal_failures.pop
2607
+ end
2474
2608
  r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2475
2609
  end
2476
2610
  s0 << r6
@@ -2501,7 +2635,7 @@ module Timing
2501
2635
  if node_cache[:hour_minute_second].has_key?(index)
2502
2636
  cached = node_cache[:hour_minute_second][index]
2503
2637
  if cached
2504
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2638
+ node_cache[:hour_minute_second][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2505
2639
  @index = cached.interval.end
2506
2640
  end
2507
2641
  return cached
@@ -2511,10 +2645,11 @@ module Timing
2511
2645
  i1, s1 = index, []
2512
2646
  s2, i2 = [], index
2513
2647
  loop do
2514
- if has_terminal?('\G[\\d]', true, index)
2648
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2515
2649
  r3 = true
2516
2650
  @index += 1
2517
2651
  else
2652
+ terminal_parse_failure('[\\d]')
2518
2653
  r3 = nil
2519
2654
  end
2520
2655
  if r3
@@ -2530,25 +2665,29 @@ module Timing
2530
2665
  @index = i2
2531
2666
  r2 = nil
2532
2667
  else
2668
+ if s2.size < 2
2669
+ @terminal_failures.pop
2670
+ end
2533
2671
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2534
2672
  end
2535
2673
  s1 << r2
2536
2674
  if r2
2537
- if has_terminal?(':', false, index)
2538
- r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2539
- @index += 1
2675
+ if (match_len = has_terminal?(':', false, index))
2676
+ r4 = true
2677
+ @index += match_len
2540
2678
  else
2541
- terminal_parse_failure(':')
2679
+ terminal_parse_failure('\':\'')
2542
2680
  r4 = nil
2543
2681
  end
2544
2682
  s1 << r4
2545
2683
  if r4
2546
2684
  s5, i5 = [], index
2547
2685
  loop do
2548
- if has_terminal?('\G[\\d]', true, index)
2686
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2549
2687
  r6 = true
2550
2688
  @index += 1
2551
2689
  else
2690
+ terminal_parse_failure('[\\d]')
2552
2691
  r6 = nil
2553
2692
  end
2554
2693
  if r6
@@ -2564,26 +2703,30 @@ module Timing
2564
2703
  @index = i5
2565
2704
  r5 = nil
2566
2705
  else
2706
+ if s5.size < 2
2707
+ @terminal_failures.pop
2708
+ end
2567
2709
  r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2568
2710
  end
2569
2711
  s1 << r5
2570
2712
  if r5
2571
2713
  i8, s8 = index, []
2572
- if has_terminal?(':', false, index)
2573
- r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
2574
- @index += 1
2714
+ if (match_len = has_terminal?(':', false, index))
2715
+ r9 = true
2716
+ @index += match_len
2575
2717
  else
2576
- terminal_parse_failure(':')
2718
+ terminal_parse_failure('\':\'')
2577
2719
  r9 = nil
2578
2720
  end
2579
2721
  s8 << r9
2580
2722
  if r9
2581
2723
  s10, i10 = [], index
2582
2724
  loop do
2583
- if has_terminal?('\G[\\d]', true, index)
2725
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2584
2726
  r11 = true
2585
2727
  @index += 1
2586
2728
  else
2729
+ terminal_parse_failure('[\\d]')
2587
2730
  r11 = nil
2588
2731
  end
2589
2732
  if r11
@@ -2599,6 +2742,9 @@ module Timing
2599
2742
  @index = i10
2600
2743
  r10 = nil
2601
2744
  else
2745
+ if s10.size < 2
2746
+ @terminal_failures.pop
2747
+ end
2602
2748
  r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
2603
2749
  end
2604
2750
  s8 << r10
@@ -2627,26 +2773,29 @@ module Timing
2627
2773
  r1 = nil
2628
2774
  end
2629
2775
  if r1
2776
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2630
2777
  r0 = r1
2631
2778
  else
2632
- if has_terminal?('beginning', false, index)
2633
- r12 = instantiate_node(HourMinuteSecond,input, index...(index + 9))
2634
- @index += 9
2779
+ if (match_len = has_terminal?('beginning', false, index))
2780
+ r12 = instantiate_node(HourMinuteSecond,input, index...(index + match_len))
2781
+ @index += match_len
2635
2782
  else
2636
- terminal_parse_failure('beginning')
2783
+ terminal_parse_failure('\'beginning\'')
2637
2784
  r12 = nil
2638
2785
  end
2639
2786
  if r12
2787
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
2640
2788
  r0 = r12
2641
2789
  else
2642
- if has_terminal?('end', false, index)
2643
- r13 = instantiate_node(HourMinuteSecond,input, index...(index + 3))
2644
- @index += 3
2790
+ if (match_len = has_terminal?('end', false, index))
2791
+ r13 = instantiate_node(HourMinuteSecond,input, index...(index + match_len))
2792
+ @index += match_len
2645
2793
  else
2646
- terminal_parse_failure('end')
2794
+ terminal_parse_failure('\'end\'')
2647
2795
  r13 = nil
2648
2796
  end
2649
2797
  if r13
2798
+ r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
2650
2799
  r0 = r13
2651
2800
  else
2652
2801
  @index = i0
@@ -2665,7 +2814,7 @@ module Timing
2665
2814
  if node_cache[:integer].has_key?(index)
2666
2815
  cached = node_cache[:integer][index]
2667
2816
  if cached
2668
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2817
+ node_cache[:integer][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2669
2818
  @index = cached.interval.end
2670
2819
  end
2671
2820
  return cached
@@ -2673,10 +2822,11 @@ module Timing
2673
2822
 
2674
2823
  s0, i0 = [], index
2675
2824
  loop do
2676
- if has_terminal?('\G[\\d]', true, index)
2825
+ if has_terminal?(@regexps[gr = '\A[\\d]'] ||= Regexp.new(gr), :regexp, index)
2677
2826
  r1 = true
2678
2827
  @index += 1
2679
2828
  else
2829
+ terminal_parse_failure('[\\d]')
2680
2830
  r1 = nil
2681
2831
  end
2682
2832
  if r1
@@ -2702,16 +2852,17 @@ module Timing
2702
2852
  if node_cache[:space].has_key?(index)
2703
2853
  cached = node_cache[:space][index]
2704
2854
  if cached
2705
- cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2855
+ node_cache[:space][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2706
2856
  @index = cached.interval.end
2707
2857
  end
2708
2858
  return cached
2709
2859
  end
2710
2860
 
2711
- if has_terminal?('\G[\\s\\t\\n]', true, index)
2861
+ if has_terminal?(@regexps[gr = '\A[\\s\\t\\n]'] ||= Regexp.new(gr), :regexp, index)
2712
2862
  r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
2713
2863
  @index += 1
2714
2864
  else
2865
+ terminal_parse_failure('[\\s\\t\\n]')
2715
2866
  r0 = nil
2716
2867
  end
2717
2868