csv_parser 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1342 @@
1
+ # Autogenerated from a Treetop grammar. Edits may be lost.
2
+
3
+
4
+ module CsvParser
5
+ module Csv
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :records
10
+ end
11
+
12
+ include ParserExtensions
13
+
14
+ def _nt_records
15
+ start_index = index
16
+ if node_cache[:records].has_key?(index)
17
+ cached = node_cache[:records][index]
18
+ if cached
19
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
20
+ @index = cached.interval.end
21
+ end
22
+ return cached
23
+ end
24
+
25
+ i0 = index
26
+ r1 = _nt_non_empty_records
27
+ if r1
28
+ r0 = r1
29
+ else
30
+ r2 = _nt_empty_records
31
+ if r2
32
+ r0 = r2
33
+ else
34
+ @index = i0
35
+ r0 = nil
36
+ end
37
+ end
38
+
39
+ node_cache[:records][start_index] = r0
40
+
41
+ r0
42
+ end
43
+
44
+ module NonEmptyRecords0
45
+ def first_record
46
+ elements[0]
47
+ end
48
+
49
+ def other_records
50
+ elements[1]
51
+ end
52
+ end
53
+
54
+ module NonEmptyRecords1
55
+ def value
56
+ arr = [first_record.value]
57
+ rest = other_records.value
58
+ if rest
59
+ arr.push(*rest)
60
+ end
61
+ arr
62
+ end
63
+ end
64
+
65
+ def _nt_non_empty_records
66
+ start_index = index
67
+ if node_cache[:non_empty_records].has_key?(index)
68
+ cached = node_cache[:non_empty_records][index]
69
+ if cached
70
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
71
+ @index = cached.interval.end
72
+ end
73
+ return cached
74
+ end
75
+
76
+ i0, s0 = index, []
77
+ r1 = _nt_first_record
78
+ s0 << r1
79
+ if r1
80
+ r2 = _nt_other_records
81
+ s0 << r2
82
+ end
83
+ if s0.last
84
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
85
+ r0.extend(NonEmptyRecords0)
86
+ r0.extend(NonEmptyRecords1)
87
+ else
88
+ @index = i0
89
+ r0 = nil
90
+ end
91
+
92
+ node_cache[:non_empty_records][start_index] = r0
93
+
94
+ r0
95
+ end
96
+
97
+ module EmptyRecords0
98
+ def value
99
+ []
100
+ end
101
+ end
102
+
103
+ def _nt_empty_records
104
+ start_index = index
105
+ if node_cache[:empty_records].has_key?(index)
106
+ cached = node_cache[:empty_records][index]
107
+ if cached
108
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
109
+ @index = cached.interval.end
110
+ end
111
+ return cached
112
+ end
113
+
114
+ if has_terminal?('', false, index)
115
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 0))
116
+ r0.extend(EmptyRecords0)
117
+ @index += 0
118
+ else
119
+ terminal_parse_failure('')
120
+ r0 = nil
121
+ end
122
+
123
+ node_cache[:empty_records][start_index] = r0
124
+
125
+ r0
126
+ end
127
+
128
+ module FirstRecord0
129
+ def non_empty_record
130
+ elements[2]
131
+ end
132
+
133
+ end
134
+
135
+ module FirstRecord1
136
+ def value
137
+ non_empty_record.value
138
+ end
139
+ end
140
+
141
+ def _nt_first_record
142
+ start_index = index
143
+ if node_cache[:first_record].has_key?(index)
144
+ cached = node_cache[:first_record][index]
145
+ if cached
146
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
147
+ @index = cached.interval.end
148
+ end
149
+ return cached
150
+ end
151
+
152
+ i0, s0 = index, []
153
+ if has_terminal?('', false, index)
154
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 0))
155
+ @index += 0
156
+ else
157
+ terminal_parse_failure('')
158
+ r1 = nil
159
+ end
160
+ s0 << r1
161
+ if r1
162
+ i2 = index
163
+ r3 = lambda { |s| @first_record = true; true }.call(s0)
164
+ if r3
165
+ @index = i2
166
+ r2 = instantiate_node(SyntaxNode,input, index...index)
167
+ else
168
+ r2 = nil
169
+ end
170
+ s0 << r2
171
+ if r2
172
+ r4 = _nt_non_empty_record
173
+ s0 << r4
174
+ if r4
175
+ i5 = index
176
+ r6 = lambda { |s| @first_record_length = @record_length; true }.call(s0)
177
+ if r6
178
+ @index = i5
179
+ r5 = instantiate_node(SyntaxNode,input, index...index)
180
+ else
181
+ r5 = nil
182
+ end
183
+ s0 << r5
184
+ end
185
+ end
186
+ end
187
+ if s0.last
188
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
189
+ r0.extend(FirstRecord0)
190
+ r0.extend(FirstRecord1)
191
+ else
192
+ @index = i0
193
+ r0 = nil
194
+ end
195
+
196
+ node_cache[:first_record][start_index] = r0
197
+
198
+ r0
199
+ end
200
+
201
+ module OtherRecords0
202
+ def empty_record
203
+ elements[0]
204
+ end
205
+
206
+ def record_sep
207
+ elements[1]
208
+ end
209
+ end
210
+
211
+ module OtherRecords1
212
+ def record_sep
213
+ elements[0]
214
+ end
215
+
216
+ def non_empty_record
217
+ elements[2]
218
+ end
219
+ end
220
+
221
+ module OtherRecords2
222
+ def record_sep
223
+ elements[0]
224
+ end
225
+
226
+ def empty_record
227
+ elements[1]
228
+ end
229
+ end
230
+
231
+ module OtherRecords3
232
+ end
233
+
234
+ module OtherRecords4
235
+ end
236
+
237
+ module OtherRecords5
238
+ def value
239
+ val = elements[1].elements.collect { |elt| elt.non_empty_record.value }
240
+ val.empty? ? nil : val
241
+ end
242
+ end
243
+
244
+ module OtherRecords6
245
+ def record_sep
246
+ elements[0]
247
+ end
248
+
249
+ def record
250
+ elements[1]
251
+ end
252
+ end
253
+
254
+ module OtherRecords7
255
+ end
256
+
257
+ module OtherRecords8
258
+ def value
259
+ val = elements[1].elements.collect { |elt| elt.record.value }
260
+ val.empty? ? nil : val
261
+ end
262
+ end
263
+
264
+ module OtherRecords9
265
+ end
266
+
267
+ module OtherRecords10
268
+ def value
269
+ elements[2].value
270
+ end
271
+ end
272
+
273
+ def _nt_other_records
274
+ start_index = index
275
+ if node_cache[:other_records].has_key?(index)
276
+ cached = node_cache[:other_records][index]
277
+ if cached
278
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
279
+ @index = cached.interval.end
280
+ end
281
+ return cached
282
+ end
283
+
284
+ i0, s0 = index, []
285
+ if has_terminal?('', false, index)
286
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 0))
287
+ @index += 0
288
+ else
289
+ terminal_parse_failure('')
290
+ r1 = nil
291
+ end
292
+ s0 << r1
293
+ if r1
294
+ i2 = index
295
+ r3 = lambda { |s| @first_record = false; true }.call(s0)
296
+ if r3
297
+ @index = i2
298
+ r2 = instantiate_node(SyntaxNode,input, index...index)
299
+ else
300
+ r2 = nil
301
+ end
302
+ s0 << r2
303
+ if r2
304
+ i4 = index
305
+ i5, s5 = index, []
306
+ i6 = index
307
+ r7 = lambda { |s| skip_empty_record? }.call(s5)
308
+ if r7
309
+ @index = i6
310
+ r6 = instantiate_node(SyntaxNode,input, index...index)
311
+ else
312
+ r6 = nil
313
+ end
314
+ s5 << r6
315
+ if r6
316
+ s8, i8 = [], index
317
+ loop do
318
+ i9, s9 = index, []
319
+ r10 = _nt_record_sep
320
+ s9 << r10
321
+ if r10
322
+ s11, i11 = [], index
323
+ loop do
324
+ i12, s12 = index, []
325
+ r13 = _nt_empty_record
326
+ s12 << r13
327
+ if r13
328
+ r14 = _nt_record_sep
329
+ s12 << r14
330
+ end
331
+ if s12.last
332
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
333
+ r12.extend(OtherRecords0)
334
+ else
335
+ @index = i12
336
+ r12 = nil
337
+ end
338
+ if r12
339
+ s11 << r12
340
+ else
341
+ break
342
+ end
343
+ end
344
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
345
+ s9 << r11
346
+ if r11
347
+ r15 = _nt_non_empty_record
348
+ s9 << r15
349
+ end
350
+ end
351
+ if s9.last
352
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
353
+ r9.extend(OtherRecords1)
354
+ else
355
+ @index = i9
356
+ r9 = nil
357
+ end
358
+ if r9
359
+ s8 << r9
360
+ else
361
+ break
362
+ end
363
+ end
364
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
365
+ s5 << r8
366
+ if r8
367
+ i17, s17 = index, []
368
+ i18 = index
369
+ r19 = lambda { |s| skip_empty_record? }.call(s17)
370
+ if r19
371
+ @index = i18
372
+ r18 = instantiate_node(SyntaxNode,input, index...index)
373
+ else
374
+ r18 = nil
375
+ end
376
+ s17 << r18
377
+ if r18
378
+ s20, i20 = [], index
379
+ loop do
380
+ i21, s21 = index, []
381
+ r22 = _nt_record_sep
382
+ s21 << r22
383
+ if r22
384
+ r23 = _nt_empty_record
385
+ s21 << r23
386
+ end
387
+ if s21.last
388
+ r21 = instantiate_node(SyntaxNode,input, i21...index, s21)
389
+ r21.extend(OtherRecords2)
390
+ else
391
+ @index = i21
392
+ r21 = nil
393
+ end
394
+ if r21
395
+ s20 << r21
396
+ else
397
+ break
398
+ end
399
+ end
400
+ if s20.empty?
401
+ @index = i20
402
+ r20 = nil
403
+ else
404
+ r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
405
+ end
406
+ s17 << r20
407
+ end
408
+ if s17.last
409
+ r17 = instantiate_node(SyntaxNode,input, i17...index, s17)
410
+ r17.extend(OtherRecords3)
411
+ else
412
+ @index = i17
413
+ r17 = nil
414
+ end
415
+ if r17
416
+ r16 = r17
417
+ else
418
+ r16 = instantiate_node(SyntaxNode,input, index...index)
419
+ end
420
+ s5 << r16
421
+ end
422
+ end
423
+ if s5.last
424
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
425
+ r5.extend(OtherRecords4)
426
+ r5.extend(OtherRecords5)
427
+ else
428
+ @index = i5
429
+ r5 = nil
430
+ end
431
+ if r5
432
+ r4 = r5
433
+ else
434
+ i24, s24 = index, []
435
+ i25 = index
436
+ r26 = lambda { |s| !skip_empty_record? }.call(s24)
437
+ if r26
438
+ @index = i25
439
+ r25 = instantiate_node(SyntaxNode,input, index...index)
440
+ else
441
+ r25 = nil
442
+ end
443
+ s24 << r25
444
+ if r25
445
+ s27, i27 = [], index
446
+ loop do
447
+ i28, s28 = index, []
448
+ r29 = _nt_record_sep
449
+ s28 << r29
450
+ if r29
451
+ r30 = _nt_record
452
+ s28 << r30
453
+ end
454
+ if s28.last
455
+ r28 = instantiate_node(SyntaxNode,input, i28...index, s28)
456
+ r28.extend(OtherRecords6)
457
+ else
458
+ @index = i28
459
+ r28 = nil
460
+ end
461
+ if r28
462
+ s27 << r28
463
+ else
464
+ break
465
+ end
466
+ end
467
+ r27 = instantiate_node(SyntaxNode,input, i27...index, s27)
468
+ s24 << r27
469
+ end
470
+ if s24.last
471
+ r24 = instantiate_node(SyntaxNode,input, i24...index, s24)
472
+ r24.extend(OtherRecords7)
473
+ r24.extend(OtherRecords8)
474
+ else
475
+ @index = i24
476
+ r24 = nil
477
+ end
478
+ if r24
479
+ r4 = r24
480
+ else
481
+ @index = i4
482
+ r4 = nil
483
+ end
484
+ end
485
+ s0 << r4
486
+ end
487
+ end
488
+ if s0.last
489
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
490
+ r0.extend(OtherRecords9)
491
+ r0.extend(OtherRecords10)
492
+ else
493
+ @index = i0
494
+ r0 = nil
495
+ end
496
+
497
+ node_cache[:other_records][start_index] = r0
498
+
499
+ r0
500
+ end
501
+
502
+ def _nt_record
503
+ start_index = index
504
+ if node_cache[:record].has_key?(index)
505
+ cached = node_cache[:record][index]
506
+ if cached
507
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
508
+ @index = cached.interval.end
509
+ end
510
+ return cached
511
+ end
512
+
513
+ i0 = index
514
+ r1 = _nt_non_empty_record
515
+ if r1
516
+ r0 = r1
517
+ else
518
+ r2 = _nt_empty_record
519
+ if r2
520
+ r0 = r2
521
+ else
522
+ @index = i0
523
+ r0 = nil
524
+ end
525
+ end
526
+
527
+ node_cache[:record][start_index] = r0
528
+
529
+ r0
530
+ end
531
+
532
+ module NonEmptyRecord0
533
+ def field_sep
534
+ elements[1]
535
+ end
536
+
537
+ def field
538
+ elements[2]
539
+ end
540
+
541
+ end
542
+
543
+ module NonEmptyRecord1
544
+ def first
545
+ elements[0]
546
+ end
547
+
548
+ def rest
549
+ elements[2]
550
+ end
551
+
552
+ end
553
+
554
+ module NonEmptyRecord2
555
+ def value
556
+ arr = [first.value]
557
+ rest.elements.each do |elt|
558
+ arr << elt.field.value
559
+ end
560
+ arr
561
+ end
562
+ end
563
+
564
+ def _nt_non_empty_record
565
+ start_index = index
566
+ if node_cache[:non_empty_record].has_key?(index)
567
+ cached = node_cache[:non_empty_record][index]
568
+ if cached
569
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
570
+ @index = cached.interval.end
571
+ end
572
+ return cached
573
+ end
574
+
575
+ i0, s0 = index, []
576
+ r1 = _nt_field
577
+ s0 << r1
578
+ if r1
579
+ i2 = index
580
+ r3 = lambda { |s| @record_length = 1; @warning = nil; true }.call(s0)
581
+ if r3
582
+ @index = i2
583
+ r2 = instantiate_node(SyntaxNode,input, index...index)
584
+ else
585
+ r2 = nil
586
+ end
587
+ s0 << r2
588
+ if r2
589
+ s4, i4 = [], index
590
+ loop do
591
+ i5, s5 = index, []
592
+ i6 = index
593
+ r7 = lambda { |s|
594
+ if @first_record || @record_length < @first_record_length
595
+ true
596
+ else
597
+ if allow_uneven_records?
598
+ @warning ||= [:extra_fields, input.line_of(index + 1), input.column_of(index + 1)]
599
+ true
600
+ else
601
+ @failure_type = :extra_fields
602
+ false
603
+ end
604
+ end
605
+ }.call(s5)
606
+ if r7
607
+ @index = i6
608
+ r6 = instantiate_node(SyntaxNode,input, index...index)
609
+ else
610
+ r6 = nil
611
+ end
612
+ s5 << r6
613
+ if r6
614
+ r8 = _nt_field_sep
615
+ s5 << r8
616
+ if r8
617
+ r9 = _nt_field
618
+ s5 << r9
619
+ if r9
620
+ i10 = index
621
+ r11 = lambda { |s| @record_length += 1; true }.call(s5)
622
+ if r11
623
+ @index = i10
624
+ r10 = instantiate_node(SyntaxNode,input, index...index)
625
+ else
626
+ r10 = nil
627
+ end
628
+ s5 << r10
629
+ end
630
+ end
631
+ end
632
+ if s5.last
633
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
634
+ r5.extend(NonEmptyRecord0)
635
+ else
636
+ @index = i5
637
+ r5 = nil
638
+ end
639
+ if r5
640
+ s4 << r5
641
+ else
642
+ break
643
+ end
644
+ end
645
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
646
+ s0 << r4
647
+ if r4
648
+ i12 = index
649
+ r13 = lambda { |s|
650
+ if @first_record || @record_length >= @first_record_length
651
+ if @warning
652
+ warnings << @warning
653
+ end
654
+ true
655
+ else
656
+ if allow_uneven_records?
657
+ warnings << [:missing_fields, input.line_of(index), input.column_of(index)]
658
+ true
659
+ else
660
+ @failure_type = :missing_fields
661
+ false
662
+ end
663
+ end
664
+ }.call(s0)
665
+ if r13
666
+ @index = i12
667
+ r12 = instantiate_node(SyntaxNode,input, index...index)
668
+ else
669
+ r12 = nil
670
+ end
671
+ s0 << r12
672
+ end
673
+ end
674
+ end
675
+ if s0.last
676
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
677
+ r0.extend(NonEmptyRecord1)
678
+ r0.extend(NonEmptyRecord2)
679
+ else
680
+ @index = i0
681
+ r0 = nil
682
+ end
683
+
684
+ node_cache[:non_empty_record][start_index] = r0
685
+
686
+ r0
687
+ end
688
+
689
+ module EmptyRecord0
690
+ end
691
+
692
+ module EmptyRecord1
693
+ def value
694
+ []
695
+ end
696
+ end
697
+
698
+ def _nt_empty_record
699
+ start_index = index
700
+ if node_cache[:empty_record].has_key?(index)
701
+ cached = node_cache[:empty_record][index]
702
+ if cached
703
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
704
+ @index = cached.interval.end
705
+ end
706
+ return cached
707
+ end
708
+
709
+ i0, s0 = index, []
710
+ if has_terminal?('', false, index)
711
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 0))
712
+ @index += 0
713
+ else
714
+ terminal_parse_failure('')
715
+ r1 = nil
716
+ end
717
+ s0 << r1
718
+ if r1
719
+ i2 = index
720
+ r3 = lambda { |s|
721
+ if allow_empty_record?
722
+ true
723
+ else
724
+ @failure_type = :missing_fields
725
+ false
726
+ end
727
+ }.call(s0)
728
+ if r3
729
+ @index = i2
730
+ r2 = instantiate_node(SyntaxNode,input, index...index)
731
+ else
732
+ r2 = nil
733
+ end
734
+ s0 << r2
735
+ end
736
+ if s0.last
737
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
738
+ r0.extend(EmptyRecord0)
739
+ r0.extend(EmptyRecord1)
740
+ else
741
+ @index = i0
742
+ r0 = nil
743
+ end
744
+
745
+ node_cache[:empty_record][start_index] = r0
746
+
747
+ r0
748
+ end
749
+
750
+ module Field0
751
+ def value
752
+ elements.map(&:text_value).join
753
+ end
754
+ end
755
+
756
+ module Field1
757
+ def value
758
+ elements[1..-2].map(&:text_value).join
759
+ end
760
+ end
761
+
762
+ def _nt_field
763
+ start_index = index
764
+ if node_cache[:field].has_key?(index)
765
+ cached = node_cache[:field][index]
766
+ if cached
767
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
768
+ @index = cached.interval.end
769
+ end
770
+ return cached
771
+ end
772
+
773
+ i0 = index
774
+ r1 = _nt_unquoted_text
775
+ r1.extend(Field0)
776
+ if r1
777
+ r0 = r1
778
+ else
779
+ r2 = _nt_quoted_text
780
+ r2.extend(Field1)
781
+ if r2
782
+ r0 = r2
783
+ else
784
+ @index = i0
785
+ r0 = nil
786
+ end
787
+ end
788
+
789
+ node_cache[:field][start_index] = r0
790
+
791
+ r0
792
+ end
793
+
794
+ module QuotedText0
795
+ end
796
+
797
+ module QuotedText1
798
+ end
799
+
800
+ module QuotedText2
801
+ def quote
802
+ elements[0]
803
+ end
804
+
805
+ end
806
+
807
+ def _nt_quoted_text
808
+ start_index = index
809
+ if node_cache[:quoted_text].has_key?(index)
810
+ cached = node_cache[:quoted_text][index]
811
+ if cached
812
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
813
+ @index = cached.interval.end
814
+ end
815
+ return cached
816
+ end
817
+
818
+ i0, s0 = index, []
819
+ r1 = _nt_quote
820
+ s0 << r1
821
+ if r1
822
+ s2, i2 = [], index
823
+ loop do
824
+ i3, s3 = index, []
825
+ i4 = index
826
+ r5 = _nt_quote
827
+ if r5
828
+ r4 = nil
829
+ else
830
+ @index = i4
831
+ r4 = instantiate_node(SyntaxNode,input, index...index)
832
+ end
833
+ s3 << r4
834
+ if r4
835
+ if index < input_length
836
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
837
+ @index += 1
838
+ else
839
+ terminal_parse_failure("any character")
840
+ r6 = nil
841
+ end
842
+ s3 << r6
843
+ end
844
+ if s3.last
845
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
846
+ r3.extend(QuotedText0)
847
+ else
848
+ @index = i3
849
+ r3 = nil
850
+ end
851
+ if r3
852
+ s2 << r3
853
+ else
854
+ break
855
+ end
856
+ end
857
+ if s2.empty?
858
+ @index = i2
859
+ r2 = nil
860
+ else
861
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
862
+ end
863
+ s0 << r2
864
+ if r2
865
+ i7 = index
866
+ r8 = _nt_quote
867
+ if r8
868
+ r7 = r8
869
+ else
870
+ i9, s9 = index, []
871
+ if has_terminal?('', false, index)
872
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 0))
873
+ @index += 0
874
+ else
875
+ terminal_parse_failure('')
876
+ r10 = nil
877
+ end
878
+ s9 << r10
879
+ if r10
880
+ i11 = index
881
+ r12 = lambda { |s| @failure_type = :missing_quote; @failure_index = start_index; true }.call(s9)
882
+ if r12
883
+ r11 = nil
884
+ else
885
+ @index = i11
886
+ r11 = instantiate_node(SyntaxNode,input, index...index)
887
+ end
888
+ s9 << r11
889
+ end
890
+ if s9.last
891
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
892
+ r9.extend(QuotedText1)
893
+ else
894
+ @index = i9
895
+ r9 = nil
896
+ end
897
+ if r9
898
+ r7 = r9
899
+ else
900
+ @index = i7
901
+ r7 = nil
902
+ end
903
+ end
904
+ s0 << r7
905
+ end
906
+ end
907
+ if s0.last
908
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
909
+ r0.extend(QuotedText2)
910
+ else
911
+ @index = i0
912
+ r0 = nil
913
+ end
914
+
915
+ node_cache[:quoted_text][start_index] = r0
916
+
917
+ r0
918
+ end
919
+
920
+ module UnquotedText0
921
+ end
922
+
923
+ module UnquotedText1
924
+ end
925
+
926
+ def _nt_unquoted_text
927
+ start_index = index
928
+ if node_cache[:unquoted_text].has_key?(index)
929
+ cached = node_cache[:unquoted_text][index]
930
+ if cached
931
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
932
+ @index = cached.interval.end
933
+ end
934
+ return cached
935
+ end
936
+
937
+ s0, i0 = [], index
938
+ loop do
939
+ i1, s1 = index, []
940
+ i2 = index
941
+ r3 = _nt_field_sep
942
+ if r3
943
+ r2 = nil
944
+ else
945
+ @index = i2
946
+ r2 = instantiate_node(SyntaxNode,input, index...index)
947
+ end
948
+ s1 << r2
949
+ if r2
950
+ i4 = index
951
+ r5 = _nt_record_sep
952
+ if r5
953
+ r4 = nil
954
+ else
955
+ @index = i4
956
+ r4 = instantiate_node(SyntaxNode,input, index...index)
957
+ end
958
+ s1 << r4
959
+ if r4
960
+ i6 = index
961
+ i7 = index
962
+ r8 = _nt_quote
963
+ if r8
964
+ r7 = nil
965
+ else
966
+ @index = i7
967
+ r7 = instantiate_node(SyntaxNode,input, index...index)
968
+ end
969
+ if r7
970
+ r6 = r7
971
+ else
972
+ i9, s9 = index, []
973
+ if has_terminal?('', false, index)
974
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 0))
975
+ @index += 0
976
+ else
977
+ terminal_parse_failure('')
978
+ r10 = nil
979
+ end
980
+ s9 << r10
981
+ if r10
982
+ i11 = index
983
+ r12 = lambda { |s| @failure_type = :stray_quote; true }.call(s9)
984
+ if r12
985
+ r11 = nil
986
+ else
987
+ @index = i11
988
+ r11 = instantiate_node(SyntaxNode,input, index...index)
989
+ end
990
+ s9 << r11
991
+ end
992
+ if s9.last
993
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
994
+ r9.extend(UnquotedText0)
995
+ else
996
+ @index = i9
997
+ r9 = nil
998
+ end
999
+ if r9
1000
+ r6 = r9
1001
+ else
1002
+ @index = i6
1003
+ r6 = nil
1004
+ end
1005
+ end
1006
+ s1 << r6
1007
+ if r6
1008
+ if index < input_length
1009
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
1010
+ @index += 1
1011
+ else
1012
+ terminal_parse_failure("any character")
1013
+ r13 = nil
1014
+ end
1015
+ s1 << r13
1016
+ end
1017
+ end
1018
+ end
1019
+ if s1.last
1020
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1021
+ r1.extend(UnquotedText1)
1022
+ else
1023
+ @index = i1
1024
+ r1 = nil
1025
+ end
1026
+ if r1
1027
+ s0 << r1
1028
+ else
1029
+ break
1030
+ end
1031
+ end
1032
+ if s0.empty?
1033
+ @index = i0
1034
+ r0 = nil
1035
+ else
1036
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1037
+ end
1038
+
1039
+ node_cache[:unquoted_text][start_index] = r0
1040
+
1041
+ r0
1042
+ end
1043
+
1044
+ module FieldSep0
1045
+ end
1046
+
1047
+ module FieldSep1
1048
+ end
1049
+
1050
+ def _nt_field_sep
1051
+ start_index = index
1052
+ if node_cache[:field_sep].has_key?(index)
1053
+ cached = node_cache[:field_sep][index]
1054
+ if cached
1055
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1056
+ @index = cached.interval.end
1057
+ end
1058
+ return cached
1059
+ end
1060
+
1061
+ i0, s0 = index, []
1062
+ i1 = index
1063
+ r2 = lambda { |s| @field_sep_index = 0; true }.call(s0)
1064
+ if r2
1065
+ @index = i1
1066
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1067
+ else
1068
+ r1 = nil
1069
+ end
1070
+ s0 << r1
1071
+ if r1
1072
+ s3, i3 = [], index
1073
+ loop do
1074
+ i4, s4 = index, []
1075
+ i5 = index
1076
+ r6 = _nt_record_sep
1077
+ if r6
1078
+ r5 = nil
1079
+ else
1080
+ @index = i5
1081
+ r5 = instantiate_node(SyntaxNode,input, index...index)
1082
+ end
1083
+ s4 << r5
1084
+ if r5
1085
+ i7 = index
1086
+ r8 = _nt_quote
1087
+ if r8
1088
+ r7 = nil
1089
+ else
1090
+ @index = i7
1091
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1092
+ end
1093
+ s4 << r7
1094
+ if r7
1095
+ if index < input_length
1096
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1097
+ @index += 1
1098
+ else
1099
+ terminal_parse_failure("any character")
1100
+ r9 = nil
1101
+ end
1102
+ s4 << r9
1103
+ if r9
1104
+ i10 = index
1105
+ r11 = lambda { |s|
1106
+ if @field_sep_index < field_sep.length &&
1107
+ s[2].text_value == field_sep[@field_sep_index]
1108
+ @field_sep_index += 1
1109
+ true
1110
+ else
1111
+ false
1112
+ end
1113
+ }.call(s4)
1114
+ if r11
1115
+ @index = i10
1116
+ r10 = instantiate_node(SyntaxNode,input, index...index)
1117
+ else
1118
+ r10 = nil
1119
+ end
1120
+ s4 << r10
1121
+ end
1122
+ end
1123
+ end
1124
+ if s4.last
1125
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1126
+ r4.extend(FieldSep0)
1127
+ else
1128
+ @index = i4
1129
+ r4 = nil
1130
+ end
1131
+ if r4
1132
+ s3 << r4
1133
+ else
1134
+ break
1135
+ end
1136
+ end
1137
+ if s3.empty?
1138
+ @index = i3
1139
+ r3 = nil
1140
+ else
1141
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1142
+ end
1143
+ s0 << r3
1144
+ if r3
1145
+ i12 = index
1146
+ r13 = lambda { |s| s.map(&:text_value).join == field_sep }.call(s0)
1147
+ if r13
1148
+ @index = i12
1149
+ r12 = instantiate_node(SyntaxNode,input, index...index)
1150
+ else
1151
+ r12 = nil
1152
+ end
1153
+ s0 << r12
1154
+ end
1155
+ end
1156
+ if s0.last
1157
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1158
+ r0.extend(FieldSep1)
1159
+ else
1160
+ @index = i0
1161
+ r0 = nil
1162
+ end
1163
+
1164
+ node_cache[:field_sep][start_index] = r0
1165
+
1166
+ r0
1167
+ end
1168
+
1169
+ module RecordSep0
1170
+ end
1171
+
1172
+ module RecordSep1
1173
+ end
1174
+
1175
+ def _nt_record_sep
1176
+ start_index = index
1177
+ if node_cache[:record_sep].has_key?(index)
1178
+ cached = node_cache[:record_sep][index]
1179
+ if cached
1180
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1181
+ @index = cached.interval.end
1182
+ end
1183
+ return cached
1184
+ end
1185
+
1186
+ i0, s0 = index, []
1187
+ i1 = index
1188
+ r2 = lambda { |s| @record_sep_index = 0; true }.call(s0)
1189
+ if r2
1190
+ @index = i1
1191
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1192
+ else
1193
+ r1 = nil
1194
+ end
1195
+ s0 << r1
1196
+ if r1
1197
+ s3, i3 = [], index
1198
+ loop do
1199
+ i4, s4 = index, []
1200
+ if index < input_length
1201
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
1202
+ @index += 1
1203
+ else
1204
+ terminal_parse_failure("any character")
1205
+ r5 = nil
1206
+ end
1207
+ s4 << r5
1208
+ if r5
1209
+ i6 = index
1210
+ r7 = lambda { |s|
1211
+ if @record_sep_index < record_sep.length &&
1212
+ s[0].text_value == record_sep[@record_sep_index]
1213
+ @record_sep_index += 1
1214
+ true
1215
+ else
1216
+ false
1217
+ end
1218
+ }.call(s4)
1219
+ if r7
1220
+ @index = i6
1221
+ r6 = instantiate_node(SyntaxNode,input, index...index)
1222
+ else
1223
+ r6 = nil
1224
+ end
1225
+ s4 << r6
1226
+ end
1227
+ if s4.last
1228
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1229
+ r4.extend(RecordSep0)
1230
+ else
1231
+ @index = i4
1232
+ r4 = nil
1233
+ end
1234
+ if r4
1235
+ s3 << r4
1236
+ else
1237
+ break
1238
+ end
1239
+ end
1240
+ if s3.empty?
1241
+ @index = i3
1242
+ r3 = nil
1243
+ else
1244
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1245
+ end
1246
+ s0 << r3
1247
+ if r3
1248
+ i8 = index
1249
+ r9 = lambda { |s| s.map(&:text_value).join == record_sep }.call(s0)
1250
+ if r9
1251
+ @index = i8
1252
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1253
+ else
1254
+ r8 = nil
1255
+ end
1256
+ s0 << r8
1257
+ end
1258
+ end
1259
+ if s0.last
1260
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1261
+ r0.extend(RecordSep1)
1262
+ else
1263
+ @index = i0
1264
+ r0 = nil
1265
+ end
1266
+
1267
+ node_cache[:record_sep][start_index] = r0
1268
+
1269
+ r0
1270
+ end
1271
+
1272
+ module Quote0
1273
+ end
1274
+
1275
+ def _nt_quote
1276
+ start_index = index
1277
+ if node_cache[:quote].has_key?(index)
1278
+ cached = node_cache[:quote][index]
1279
+ if cached
1280
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1281
+ @index = cached.interval.end
1282
+ end
1283
+ return cached
1284
+ end
1285
+
1286
+ i0, s0 = index, []
1287
+ i1 = index
1288
+ if has_terminal?("\\", false, index)
1289
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1290
+ @index += 1
1291
+ else
1292
+ terminal_parse_failure("\\")
1293
+ r2 = nil
1294
+ end
1295
+ if r2
1296
+ r1 = nil
1297
+ else
1298
+ @index = i1
1299
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1300
+ end
1301
+ s0 << r1
1302
+ if r1
1303
+ if index < input_length
1304
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1305
+ @index += 1
1306
+ else
1307
+ terminal_parse_failure("any character")
1308
+ r3 = nil
1309
+ end
1310
+ s0 << r3
1311
+ if r3
1312
+ i4 = index
1313
+ r5 = lambda { |s| s[1].text_value[0] == quote_char[0] }.call(s0)
1314
+ if r5
1315
+ @index = i4
1316
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1317
+ else
1318
+ r4 = nil
1319
+ end
1320
+ s0 << r4
1321
+ end
1322
+ end
1323
+ if s0.last
1324
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1325
+ r0.extend(Quote0)
1326
+ else
1327
+ @index = i0
1328
+ r0 = nil
1329
+ end
1330
+
1331
+ node_cache[:quote][start_index] = r0
1332
+
1333
+ r0
1334
+ end
1335
+
1336
+ end
1337
+
1338
+ class CsvParser < Treetop::Runtime::CompiledParser
1339
+ include Csv
1340
+ end
1341
+
1342
+ end