coral0 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/bin/coral0 +109 -0
  3. data/coral0.gemspec +16 -0
  4. data/lib/coral.rb +3454 -0
  5. metadata +74 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 617764e826438c671e5b1ac86770c765647b08f5b8990f784255fd5f1c1cf053
4
+ data.tar.gz: 76e96c0d957d447227c9c1b4624391ae001576f94a6a48a50d41bea3b24b0144
5
+ SHA512:
6
+ metadata.gz: 16330de9442bd3e5c992d226005f6ea44f7fff1b79af4a6df753867b181bfe632e3d7dd34db934f6859d0bca20fda92d30d47be4bfbc65d5ada732b735920047
7
+ data.tar.gz: ef487c9a7fad5119761447088f2456d0e53403a8b60a334ca675185f8b4a2bf59e1c2a9602e35596aaff7d1a782e331e9d697e927aa2a9886f7ee4fd9c513d15
data/bin/coral0 ADDED
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env ruby -KU
2
+ require 'pp'
3
+ require 'yaml'
4
+ require 'treetop'
5
+ require 'scanf'
6
+ require 'time'
7
+ require 'json'
8
+
9
+ Encoding.default_external = Encoding::UTF_8
10
+
11
+ require 'coral'
12
+
13
+ class Treetop::Runtime::SyntaxNode
14
+ def ast
15
+ fail "undefined_ast #{inspect}"
16
+ end
17
+ def ast1 # devhack
18
+ "#{inspect[10..20]}--#{text_value[0..15]}"
19
+ end
20
+ def mkgen(name, genparm)
21
+ nm = name.text_value
22
+ if el = genparm.elements
23
+ ["gen", nm, *genparm.ast] # XXX
24
+ else
25
+ ["name", nm]
26
+ end
27
+ end
28
+ def wrapop(op, first, rest)
29
+ a = first.ast
30
+ b = rest.map(&:ast)
31
+ if b.size != 0
32
+ [op, a, *b]
33
+ else
34
+ a
35
+ end
36
+ end
37
+ def wrapop0(op, all)
38
+ a = all.map(&:ast)
39
+ if a.size == 1
40
+ a[0]
41
+ else
42
+ [op, *a]
43
+ end
44
+ end
45
+ def tvtoi(el, default)
46
+ v = el.text_value
47
+ if v == ''
48
+ default
49
+ else
50
+ v.to_i
51
+ end
52
+ end
53
+ def repwrap(el, val)
54
+ if el.text_value == ''
55
+ val
56
+ else
57
+ ["rep", *el.ast, val]
58
+ end
59
+ end
60
+ end
61
+
62
+
63
+ def process_text(input, output)
64
+ warn "* converting locally from CoRAL Text #{input} to CoRAL JSON #{output}" if $options.verbose
65
+ coral_file = File.read(input)
66
+ parser = CORALParser.new
67
+ ast = parser.parse coral_file
68
+ if ast
69
+ puts "Writing to #{output}."
70
+ File.open(output, "w") do |f|
71
+ # f.write JSON.pretty_generate(ast.ast)
72
+ PP.pp(ast.ast, f)
73
+ end
74
+ else
75
+ puts parser.failure_reason
76
+ parser.failure_reason =~ /^(Expected .+) after/m
77
+ puts "#{$1.gsub("\n", '<<<NEWLINE>>>')}:"
78
+ puts coral_file.lines.to_a[parser.failure_line - 1]
79
+ puts "#{'~' * (parser.failure_column - 1)}^"
80
+ end
81
+ end
82
+
83
+ require 'optparse'
84
+ require 'ostruct'
85
+ $options = OpenStruct.new
86
+
87
+ op = OptionParser.new do |opts|
88
+ opts.banner = "Usage: coral0 [options] file.coral|file.coral-text|file.coral-json"
89
+
90
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
91
+ $options.verbose = v
92
+ end
93
+ end
94
+ op.parse!
95
+
96
+ case ARGV.size
97
+ when 1
98
+ fn = ARGV[0]
99
+ case fn
100
+ when /(.*)\.coral-text\z/
101
+ process_text(fn, "#$1.coral-json")
102
+ else
103
+ warn "Unknown file type: #{fn}"
104
+ exit 1
105
+ end
106
+ else
107
+ puts op
108
+ exit 1
109
+ end
data/coral0.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "coral0"
3
+ s.version = "0.1.0"
4
+ s.summary = "Support tools for the CoRAL IoT format"
5
+ s.description = %q{Support tools for the CoRAL IoT format}
6
+ s.author = "Carsten Bormann"
7
+ s.email = "cabo@tzi.org"
8
+ s.license = "MIT"
9
+ s.homepage = "http://github.com/cabo/coral0"
10
+ s.files = Dir['lib/**/*.rb'] + %w(coral0.gemspec) + Dir['bin/*']
11
+ s.executables = Dir['bin/*'].map {|x| File.basename(x)}
12
+ s.required_ruby_version = '>= 2.3'
13
+ s.require_paths = ["lib"]
14
+ s.add_dependency('abnftt', '~> 0.1')
15
+ s.add_dependency('treetop')
16
+ end
data/lib/coral.rb ADDED
@@ -0,0 +1,3454 @@
1
+ # Encoding: UTF-8
2
+ # Autogenerated from a Treetop grammar. Edits may be lost.
3
+
4
+
5
+ module CORAL
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :body
10
+ end
11
+
12
+ module Body0
13
+ def S
14
+ elements[1]
15
+ end
16
+ end
17
+
18
+ module Body1
19
+ def S
20
+ elements[0]
21
+ end
22
+
23
+ end
24
+
25
+ module Body2
26
+ def ast
27
+ ["coral", *elements[1].elements.map{|el| el.elements[0].ast}]
28
+ end
29
+ end
30
+
31
+ def _nt_body
32
+ start_index = index
33
+ if node_cache[:body].has_key?(index)
34
+ cached = node_cache[:body][index]
35
+ if cached
36
+ node_cache[:body][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
37
+ @index = cached.interval.end
38
+ end
39
+ return cached
40
+ end
41
+
42
+ i0, s0 = index, []
43
+ r1 = _nt_S
44
+ s0 << r1
45
+ if r1
46
+ s2, i2 = [], index
47
+ loop do
48
+ i3, s3 = index, []
49
+ i4 = index
50
+ r5 = _nt_link
51
+ if r5
52
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
53
+ r4 = r5
54
+ else
55
+ r6 = _nt_form
56
+ if r6
57
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
58
+ r4 = r6
59
+ else
60
+ r7 = _nt_representation
61
+ if r7
62
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
63
+ r4 = r7
64
+ else
65
+ r8 = _nt_directive
66
+ if r8
67
+ r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
68
+ r4 = r8
69
+ else
70
+ @index = i4
71
+ r4 = nil
72
+ end
73
+ end
74
+ end
75
+ end
76
+ s3 << r4
77
+ if r4
78
+ r9 = _nt_S
79
+ s3 << r9
80
+ end
81
+ if s3.last
82
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
83
+ r3.extend(Body0)
84
+ else
85
+ @index = i3
86
+ r3 = nil
87
+ end
88
+ if r3
89
+ s2 << r3
90
+ else
91
+ break
92
+ end
93
+ end
94
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
95
+ s0 << r2
96
+ end
97
+ if s0.last
98
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
99
+ r0.extend(Body1)
100
+ r0.extend(Body2)
101
+ else
102
+ @index = i0
103
+ r0 = nil
104
+ end
105
+
106
+ node_cache[:body][start_index] = r0
107
+
108
+ r0
109
+ end
110
+
111
+ module Link0
112
+ def S1
113
+ elements[0]
114
+ end
115
+
116
+ def S2
117
+ elements[2]
118
+ end
119
+
120
+ def body
121
+ elements[3]
122
+ end
123
+
124
+ def S3
125
+ elements[4]
126
+ end
127
+
128
+ end
129
+
130
+ module Link1
131
+ def relationtype
132
+ elements[0]
133
+ end
134
+
135
+ def S
136
+ elements[1]
137
+ end
138
+
139
+ def linktarget
140
+ elements[2]
141
+ end
142
+
143
+ end
144
+
145
+ module Link2
146
+ def ast
147
+ ["link", relationtype.ast, linktarget.ast, elements[3].respond_to?(:body) && elements[3].body.ast]
148
+ end
149
+ end
150
+
151
+ def _nt_link
152
+ start_index = index
153
+ if node_cache[:link].has_key?(index)
154
+ cached = node_cache[:link][index]
155
+ if cached
156
+ node_cache[:link][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
157
+ @index = cached.interval.end
158
+ end
159
+ return cached
160
+ end
161
+
162
+ i0, s0 = index, []
163
+ r1 = _nt_relationtype
164
+ s0 << r1
165
+ if r1
166
+ r2 = _nt_S
167
+ s0 << r2
168
+ if r2
169
+ r3 = _nt_linktarget
170
+ s0 << r3
171
+ if r3
172
+ i5, s5 = index, []
173
+ r6 = _nt_S
174
+ s5 << r6
175
+ if r6
176
+ if (match_len = has_terminal?("{", false, index))
177
+ r7 = true
178
+ @index += match_len
179
+ else
180
+ terminal_parse_failure('"{"')
181
+ r7 = nil
182
+ end
183
+ s5 << r7
184
+ if r7
185
+ r8 = _nt_S
186
+ s5 << r8
187
+ if r8
188
+ r9 = _nt_body
189
+ s5 << r9
190
+ if r9
191
+ r10 = _nt_S
192
+ s5 << r10
193
+ if r10
194
+ if (match_len = has_terminal?("}", false, index))
195
+ r11 = true
196
+ @index += match_len
197
+ else
198
+ terminal_parse_failure('"}"')
199
+ r11 = nil
200
+ end
201
+ s5 << r11
202
+ end
203
+ end
204
+ end
205
+ end
206
+ end
207
+ if s5.last
208
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
209
+ r5.extend(Link0)
210
+ else
211
+ @index = i5
212
+ r5 = nil
213
+ end
214
+ if r5
215
+ r4 = r5
216
+ else
217
+ r4 = instantiate_node(SyntaxNode,input, index...index)
218
+ end
219
+ s0 << r4
220
+ end
221
+ end
222
+ end
223
+ if s0.last
224
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
225
+ r0.extend(Link1)
226
+ r0.extend(Link2)
227
+ else
228
+ @index = i0
229
+ r0 = nil
230
+ end
231
+
232
+ node_cache[:link][start_index] = r0
233
+
234
+ r0
235
+ end
236
+
237
+ def _nt_relationtype
238
+ start_index = index
239
+ if node_cache[:relationtype].has_key?(index)
240
+ cached = node_cache[:relationtype][index]
241
+ if cached
242
+ node_cache[:relationtype][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
243
+ @index = cached.interval.end
244
+ end
245
+ return cached
246
+ end
247
+
248
+ r0 = _nt_iqs
249
+
250
+ node_cache[:relationtype][start_index] = r0
251
+
252
+ r0
253
+ end
254
+
255
+ def _nt_iqs
256
+ start_index = index
257
+ if node_cache[:iqs].has_key?(index)
258
+ cached = node_cache[:iqs][index]
259
+ if cached
260
+ node_cache[:iqs][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
261
+ @index = cached.interval.end
262
+ end
263
+ return cached
264
+ end
265
+
266
+ i0 = index
267
+ r1 = _nt_iri
268
+ if r1
269
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
270
+ r0 = r1
271
+ else
272
+ r2 = _nt_qualifiedname
273
+ if r2
274
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
275
+ r0 = r2
276
+ else
277
+ r3 = _nt_simplename
278
+ if r3
279
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
280
+ r0 = r3
281
+ else
282
+ @index = i0
283
+ r0 = nil
284
+ end
285
+ end
286
+ end
287
+
288
+ node_cache[:iqs][start_index] = r0
289
+
290
+ r0
291
+ end
292
+
293
+ module Simplename0
294
+ def ast
295
+ ["simple", text_value]
296
+ end
297
+ end
298
+
299
+ def _nt_simplename
300
+ start_index = index
301
+ if node_cache[:simplename].has_key?(index)
302
+ cached = node_cache[:simplename][index]
303
+ if cached
304
+ node_cache[:simplename][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
305
+ @index = cached.interval.end
306
+ end
307
+ return cached
308
+ end
309
+
310
+ r0 = _nt_identifier
311
+ r0.extend(Simplename0)
312
+ r0.extend(Simplename0)
313
+
314
+ node_cache[:simplename][start_index] = r0
315
+
316
+ r0
317
+ end
318
+
319
+ module Qualifiedname0
320
+ def identifier1
321
+ elements[0]
322
+ end
323
+
324
+ def identifier2
325
+ elements[2]
326
+ end
327
+ end
328
+
329
+ module Qualifiedname1
330
+ def ast
331
+ ["qual", identifier1.ast, identifier2.ast]
332
+ end
333
+ end
334
+
335
+ def _nt_qualifiedname
336
+ start_index = index
337
+ if node_cache[:qualifiedname].has_key?(index)
338
+ cached = node_cache[:qualifiedname][index]
339
+ if cached
340
+ node_cache[:qualifiedname][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
341
+ @index = cached.interval.end
342
+ end
343
+ return cached
344
+ end
345
+
346
+ i0, s0 = index, []
347
+ r1 = _nt_identifier
348
+ s0 << r1
349
+ if r1
350
+ if (match_len = has_terminal?(":", false, index))
351
+ r2 = true
352
+ @index += match_len
353
+ else
354
+ terminal_parse_failure('":"')
355
+ r2 = nil
356
+ end
357
+ s0 << r2
358
+ if r2
359
+ r3 = _nt_identifier
360
+ s0 << r3
361
+ end
362
+ end
363
+ if s0.last
364
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
365
+ r0.extend(Qualifiedname0)
366
+ r0.extend(Qualifiedname1)
367
+ else
368
+ @index = i0
369
+ r0 = nil
370
+ end
371
+
372
+ node_cache[:qualifiedname][start_index] = r0
373
+
374
+ r0
375
+ end
376
+
377
+ def _nt_linktarget
378
+ start_index = index
379
+ if node_cache[:linktarget].has_key?(index)
380
+ cached = node_cache[:linktarget][index]
381
+ if cached
382
+ node_cache[:linktarget][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
383
+ @index = cached.interval.end
384
+ end
385
+ return cached
386
+ end
387
+
388
+ i0 = index
389
+ r1 = _nt_iriref
390
+ if r1
391
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
392
+ r0 = r1
393
+ else
394
+ r2 = _nt_literal
395
+ if r2
396
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
397
+ r0 = r2
398
+ else
399
+ @index = i0
400
+ r0 = nil
401
+ end
402
+ end
403
+
404
+ node_cache[:linktarget][start_index] = r0
405
+
406
+ r0
407
+ end
408
+
409
+ module Form0
410
+ def S1
411
+ elements[0]
412
+ end
413
+
414
+ def S2
415
+ elements[2]
416
+ end
417
+
418
+ def formfields
419
+ elements[3]
420
+ end
421
+
422
+ def S3
423
+ elements[4]
424
+ end
425
+
426
+ end
427
+
428
+ module Form1
429
+ def operationtype
430
+ elements[0]
431
+ end
432
+
433
+ def S1
434
+ elements[1]
435
+ end
436
+
437
+ def S2
438
+ elements[3]
439
+ end
440
+
441
+ def method
442
+ elements[4]
443
+ end
444
+
445
+ def S3
446
+ elements[5]
447
+ end
448
+
449
+ def submissiontarget
450
+ elements[6]
451
+ end
452
+
453
+ end
454
+
455
+ module Form2
456
+ def ast
457
+ ["form", operationtype.ast, method.ast, submissiontarget.ast, elements[7].respond_to?(:formfields) ? elements[7].formfields.ast : []]
458
+ end
459
+ end
460
+
461
+ def _nt_form
462
+ start_index = index
463
+ if node_cache[:form].has_key?(index)
464
+ cached = node_cache[:form][index]
465
+ if cached
466
+ node_cache[:form][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
467
+ @index = cached.interval.end
468
+ end
469
+ return cached
470
+ end
471
+
472
+ i0, s0 = index, []
473
+ r1 = _nt_operationtype
474
+ s0 << r1
475
+ if r1
476
+ r2 = _nt_S
477
+ s0 << r2
478
+ if r2
479
+ if (match_len = has_terminal?("->", false, index))
480
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
481
+ @index += match_len
482
+ else
483
+ terminal_parse_failure('"->"')
484
+ r3 = nil
485
+ end
486
+ s0 << r3
487
+ if r3
488
+ r4 = _nt_S
489
+ s0 << r4
490
+ if r4
491
+ r5 = _nt_method
492
+ s0 << r5
493
+ if r5
494
+ r6 = _nt_S
495
+ s0 << r6
496
+ if r6
497
+ r7 = _nt_submissiontarget
498
+ s0 << r7
499
+ if r7
500
+ i9, s9 = index, []
501
+ r10 = _nt_S
502
+ s9 << r10
503
+ if r10
504
+ if (match_len = has_terminal?("[", false, index))
505
+ r11 = true
506
+ @index += match_len
507
+ else
508
+ terminal_parse_failure('"["')
509
+ r11 = nil
510
+ end
511
+ s9 << r11
512
+ if r11
513
+ r12 = _nt_S
514
+ s9 << r12
515
+ if r12
516
+ r13 = _nt_formfields
517
+ s9 << r13
518
+ if r13
519
+ r14 = _nt_S
520
+ s9 << r14
521
+ if r14
522
+ if (match_len = has_terminal?("]", false, index))
523
+ r15 = true
524
+ @index += match_len
525
+ else
526
+ terminal_parse_failure('"]"')
527
+ r15 = nil
528
+ end
529
+ s9 << r15
530
+ end
531
+ end
532
+ end
533
+ end
534
+ end
535
+ if s9.last
536
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
537
+ r9.extend(Form0)
538
+ else
539
+ @index = i9
540
+ r9 = nil
541
+ end
542
+ if r9
543
+ r8 = r9
544
+ else
545
+ r8 = instantiate_node(SyntaxNode,input, index...index)
546
+ end
547
+ s0 << r8
548
+ end
549
+ end
550
+ end
551
+ end
552
+ end
553
+ end
554
+ end
555
+ if s0.last
556
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
557
+ r0.extend(Form1)
558
+ r0.extend(Form2)
559
+ else
560
+ @index = i0
561
+ r0 = nil
562
+ end
563
+
564
+ node_cache[:form][start_index] = r0
565
+
566
+ r0
567
+ end
568
+
569
+ def _nt_operationtype
570
+ start_index = index
571
+ if node_cache[:operationtype].has_key?(index)
572
+ cached = node_cache[:operationtype][index]
573
+ if cached
574
+ node_cache[:operationtype][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
575
+ @index = cached.interval.end
576
+ end
577
+ return cached
578
+ end
579
+
580
+ r0 = _nt_iqs
581
+
582
+ node_cache[:operationtype][start_index] = r0
583
+
584
+ r0
585
+ end
586
+
587
+ def _nt_method
588
+ start_index = index
589
+ if node_cache[:method].has_key?(index)
590
+ cached = node_cache[:method][index]
591
+ if cached
592
+ node_cache[:method][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
593
+ @index = cached.interval.end
594
+ end
595
+ return cached
596
+ end
597
+
598
+ r0 = _nt_identifier
599
+
600
+ node_cache[:method][start_index] = r0
601
+
602
+ r0
603
+ end
604
+
605
+ def _nt_submissiontarget
606
+ start_index = index
607
+ if node_cache[:submissiontarget].has_key?(index)
608
+ cached = node_cache[:submissiontarget][index]
609
+ if cached
610
+ node_cache[:submissiontarget][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
611
+ @index = cached.interval.end
612
+ end
613
+ return cached
614
+ end
615
+
616
+ r0 = _nt_iriref
617
+
618
+ node_cache[:submissiontarget][start_index] = r0
619
+
620
+ r0
621
+ end
622
+
623
+ module Formfields0
624
+ def formfieldtype
625
+ elements[0]
626
+ end
627
+
628
+ def S1
629
+ elements[1]
630
+ end
631
+
632
+ def formfieldvalue
633
+ elements[2]
634
+ end
635
+
636
+ def S2
637
+ elements[3]
638
+ end
639
+ end
640
+
641
+ module Formfields1
642
+ def ast
643
+ elements.map{|x| [x.formfieldtype.ast, x.formfieldvalue.ast]}
644
+ end
645
+ end
646
+
647
+ def _nt_formfields
648
+ start_index = index
649
+ if node_cache[:formfields].has_key?(index)
650
+ cached = node_cache[:formfields][index]
651
+ if cached
652
+ node_cache[:formfields][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
653
+ @index = cached.interval.end
654
+ end
655
+ return cached
656
+ end
657
+
658
+ s0, i0 = [], index
659
+ loop do
660
+ i1, s1 = index, []
661
+ r2 = _nt_formfieldtype
662
+ s1 << r2
663
+ if r2
664
+ r3 = _nt_S
665
+ s1 << r3
666
+ if r3
667
+ r4 = _nt_formfieldvalue
668
+ s1 << r4
669
+ if r4
670
+ r5 = _nt_S
671
+ s1 << r5
672
+ end
673
+ end
674
+ end
675
+ if s1.last
676
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
677
+ r1.extend(Formfields0)
678
+ else
679
+ @index = i1
680
+ r1 = nil
681
+ end
682
+ if r1
683
+ s0 << r1
684
+ else
685
+ break
686
+ end
687
+ end
688
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
689
+ r0.extend(Formfields1)
690
+ r0.extend(Formfields1)
691
+
692
+ node_cache[:formfields][start_index] = r0
693
+
694
+ r0
695
+ end
696
+
697
+ def _nt_formfieldtype
698
+ start_index = index
699
+ if node_cache[:formfieldtype].has_key?(index)
700
+ cached = node_cache[:formfieldtype][index]
701
+ if cached
702
+ node_cache[:formfieldtype][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
703
+ @index = cached.interval.end
704
+ end
705
+ return cached
706
+ end
707
+
708
+ r0 = _nt_iqs
709
+
710
+ node_cache[:formfieldtype][start_index] = r0
711
+
712
+ r0
713
+ end
714
+
715
+ def _nt_formfieldvalue
716
+ start_index = index
717
+ if node_cache[:formfieldvalue].has_key?(index)
718
+ cached = node_cache[:formfieldvalue][index]
719
+ if cached
720
+ node_cache[:formfieldvalue][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
721
+ @index = cached.interval.end
722
+ end
723
+ return cached
724
+ end
725
+
726
+ i0 = index
727
+ r1 = _nt_iriref
728
+ if r1
729
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
730
+ r0 = r1
731
+ else
732
+ r2 = _nt_literal
733
+ if r2
734
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
735
+ r0 = r2
736
+ else
737
+ @index = i0
738
+ r0 = nil
739
+ end
740
+ end
741
+
742
+ node_cache[:formfieldvalue][start_index] = r0
743
+
744
+ r0
745
+ end
746
+
747
+ module Representation0
748
+ def S1
749
+ elements[0]
750
+ end
751
+
752
+ def S2
753
+ elements[2]
754
+ end
755
+
756
+ def representationmetadata
757
+ elements[3]
758
+ end
759
+
760
+ end
761
+
762
+ module Representation1
763
+ def S
764
+ elements[1]
765
+ end
766
+
767
+ def bytes
768
+ elements[2]
769
+ end
770
+
771
+ end
772
+
773
+ module Representation2
774
+ def ast
775
+ ["repr", bytes.ast, elements[3].respond_to?(:representationmetadata) ? elements[3].representationmetadata.ast : []]
776
+ end
777
+ end
778
+
779
+ def _nt_representation
780
+ start_index = index
781
+ if node_cache[:representation].has_key?(index)
782
+ cached = node_cache[:representation][index]
783
+ if cached
784
+ node_cache[:representation][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
785
+ @index = cached.interval.end
786
+ end
787
+ return cached
788
+ end
789
+
790
+ i0, s0 = index, []
791
+ if (match_len = has_terminal?("*", false, index))
792
+ r1 = true
793
+ @index += match_len
794
+ else
795
+ terminal_parse_failure('"*"')
796
+ r1 = nil
797
+ end
798
+ s0 << r1
799
+ if r1
800
+ r2 = _nt_S
801
+ s0 << r2
802
+ if r2
803
+ r3 = _nt_bytes
804
+ s0 << r3
805
+ if r3
806
+ i5, s5 = index, []
807
+ r6 = _nt_S
808
+ s5 << r6
809
+ if r6
810
+ if (match_len = has_terminal?("[", false, index))
811
+ r7 = true
812
+ @index += match_len
813
+ else
814
+ terminal_parse_failure('"["')
815
+ r7 = nil
816
+ end
817
+ s5 << r7
818
+ if r7
819
+ r8 = _nt_S
820
+ s5 << r8
821
+ if r8
822
+ r9 = _nt_representationmetadata
823
+ s5 << r9
824
+ if r9
825
+ if (match_len = has_terminal?("]", false, index))
826
+ r10 = true
827
+ @index += match_len
828
+ else
829
+ terminal_parse_failure('"]"')
830
+ r10 = nil
831
+ end
832
+ s5 << r10
833
+ end
834
+ end
835
+ end
836
+ end
837
+ if s5.last
838
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
839
+ r5.extend(Representation0)
840
+ else
841
+ @index = i5
842
+ r5 = nil
843
+ end
844
+ if r5
845
+ r4 = r5
846
+ else
847
+ r4 = instantiate_node(SyntaxNode,input, index...index)
848
+ end
849
+ s0 << r4
850
+ end
851
+ end
852
+ end
853
+ if s0.last
854
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
855
+ r0.extend(Representation1)
856
+ r0.extend(Representation2)
857
+ else
858
+ @index = i0
859
+ r0 = nil
860
+ end
861
+
862
+ node_cache[:representation][start_index] = r0
863
+
864
+ r0
865
+ end
866
+
867
+ module Representationmetadata0
868
+ def metadataname
869
+ elements[0]
870
+ end
871
+
872
+ def S1
873
+ elements[1]
874
+ end
875
+
876
+ def metadatavalue
877
+ elements[2]
878
+ end
879
+
880
+ def S2
881
+ elements[3]
882
+ end
883
+ end
884
+
885
+ module Representationmetadata1
886
+ def ast
887
+ elements.map{|x| [x.metadataname.ast, x.metadatavalue.ast]}
888
+ end
889
+ end
890
+
891
+ def _nt_representationmetadata
892
+ start_index = index
893
+ if node_cache[:representationmetadata].has_key?(index)
894
+ cached = node_cache[:representationmetadata][index]
895
+ if cached
896
+ node_cache[:representationmetadata][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
897
+ @index = cached.interval.end
898
+ end
899
+ return cached
900
+ end
901
+
902
+ s0, i0 = [], index
903
+ loop do
904
+ i1, s1 = index, []
905
+ r2 = _nt_metadataname
906
+ s1 << r2
907
+ if r2
908
+ r3 = _nt_S
909
+ s1 << r3
910
+ if r3
911
+ r4 = _nt_metadatavalue
912
+ s1 << r4
913
+ if r4
914
+ r5 = _nt_S
915
+ s1 << r5
916
+ end
917
+ end
918
+ end
919
+ if s1.last
920
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
921
+ r1.extend(Representationmetadata0)
922
+ else
923
+ @index = i1
924
+ r1 = nil
925
+ end
926
+ if r1
927
+ s0 << r1
928
+ else
929
+ break
930
+ end
931
+ end
932
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
933
+ r0.extend(Representationmetadata1)
934
+ r0.extend(Representationmetadata1)
935
+
936
+ node_cache[:representationmetadata][start_index] = r0
937
+
938
+ r0
939
+ end
940
+
941
+ def _nt_metadataname
942
+ start_index = index
943
+ if node_cache[:metadataname].has_key?(index)
944
+ cached = node_cache[:metadataname][index]
945
+ if cached
946
+ node_cache[:metadataname][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
947
+ @index = cached.interval.end
948
+ end
949
+ return cached
950
+ end
951
+
952
+ r0 = _nt_iqs
953
+
954
+ node_cache[:metadataname][start_index] = r0
955
+
956
+ r0
957
+ end
958
+
959
+ def _nt_metadatavalue
960
+ start_index = index
961
+ if node_cache[:metadatavalue].has_key?(index)
962
+ cached = node_cache[:metadatavalue][index]
963
+ if cached
964
+ node_cache[:metadatavalue][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
965
+ @index = cached.interval.end
966
+ end
967
+ return cached
968
+ end
969
+
970
+ i0 = index
971
+ r1 = _nt_iriref
972
+ if r1
973
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
974
+ r0 = r1
975
+ else
976
+ r2 = _nt_literal
977
+ if r2
978
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
979
+ r0 = r2
980
+ else
981
+ @index = i0
982
+ r0 = nil
983
+ end
984
+ end
985
+
986
+ node_cache[:metadatavalue][start_index] = r0
987
+
988
+ r0
989
+ end
990
+
991
+ def _nt_directive
992
+ start_index = index
993
+ if node_cache[:directive].has_key?(index)
994
+ cached = node_cache[:directive][index]
995
+ if cached
996
+ node_cache[:directive][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
997
+ @index = cached.interval.end
998
+ end
999
+ return cached
1000
+ end
1001
+
1002
+ i0 = index
1003
+ r1 = _nt_basedirective
1004
+ if r1
1005
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1006
+ r0 = r1
1007
+ else
1008
+ r2 = _nt_usingdirective
1009
+ if r2
1010
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1011
+ r0 = r2
1012
+ else
1013
+ @index = i0
1014
+ r0 = nil
1015
+ end
1016
+ end
1017
+
1018
+ node_cache[:directive][start_index] = r0
1019
+
1020
+ r0
1021
+ end
1022
+
1023
+ module Basedirective0
1024
+ def S
1025
+ elements[1]
1026
+ end
1027
+
1028
+ def base
1029
+ elements[2]
1030
+ end
1031
+ end
1032
+
1033
+ module Basedirective1
1034
+ def ast
1035
+ ["base", base.ast]
1036
+ end
1037
+ end
1038
+
1039
+ def _nt_basedirective
1040
+ start_index = index
1041
+ if node_cache[:basedirective].has_key?(index)
1042
+ cached = node_cache[:basedirective][index]
1043
+ if cached
1044
+ node_cache[:basedirective][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1045
+ @index = cached.interval.end
1046
+ end
1047
+ return cached
1048
+ end
1049
+
1050
+ i0, s0 = index, []
1051
+ if (match_len = has_terminal?("#base", :insens, index))
1052
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1053
+ @index += match_len
1054
+ else
1055
+ terminal_parse_failure('"#base"')
1056
+ r1 = nil
1057
+ end
1058
+ s0 << r1
1059
+ if r1
1060
+ r2 = _nt_S
1061
+ s0 << r2
1062
+ if r2
1063
+ r3 = _nt_base
1064
+ s0 << r3
1065
+ end
1066
+ end
1067
+ if s0.last
1068
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1069
+ r0.extend(Basedirective0)
1070
+ r0.extend(Basedirective1)
1071
+ else
1072
+ @index = i0
1073
+ r0 = nil
1074
+ end
1075
+
1076
+ node_cache[:basedirective][start_index] = r0
1077
+
1078
+ r0
1079
+ end
1080
+
1081
+ def _nt_base
1082
+ start_index = index
1083
+ if node_cache[:base].has_key?(index)
1084
+ cached = node_cache[:base][index]
1085
+ if cached
1086
+ node_cache[:base][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1087
+ @index = cached.interval.end
1088
+ end
1089
+ return cached
1090
+ end
1091
+
1092
+ r0 = _nt_iriref
1093
+
1094
+ node_cache[:base][start_index] = r0
1095
+
1096
+ r0
1097
+ end
1098
+
1099
+ module Usingdirective0
1100
+ def S1
1101
+ elements[0]
1102
+ end
1103
+
1104
+ def identifier
1105
+ elements[1]
1106
+ end
1107
+
1108
+ def S2
1109
+ elements[2]
1110
+ end
1111
+
1112
+ end
1113
+
1114
+ module Usingdirective1
1115
+ def S
1116
+ elements[2]
1117
+ end
1118
+
1119
+ def iri
1120
+ elements[3]
1121
+ end
1122
+ end
1123
+
1124
+ module Usingdirective2
1125
+ def ast
1126
+ ["using", elements[1].respond_to?(:identifier) && elements[1].identifier.ast, iri.ast]
1127
+ end
1128
+ end
1129
+
1130
+ def _nt_usingdirective
1131
+ start_index = index
1132
+ if node_cache[:usingdirective].has_key?(index)
1133
+ cached = node_cache[:usingdirective][index]
1134
+ if cached
1135
+ node_cache[:usingdirective][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1136
+ @index = cached.interval.end
1137
+ end
1138
+ return cached
1139
+ end
1140
+
1141
+ i0, s0 = index, []
1142
+ if (match_len = has_terminal?("#using", :insens, index))
1143
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1144
+ @index += match_len
1145
+ else
1146
+ terminal_parse_failure('"#using"')
1147
+ r1 = nil
1148
+ end
1149
+ s0 << r1
1150
+ if r1
1151
+ i3, s3 = index, []
1152
+ r4 = _nt_S
1153
+ s3 << r4
1154
+ if r4
1155
+ r5 = _nt_identifier
1156
+ s3 << r5
1157
+ if r5
1158
+ r6 = _nt_S
1159
+ s3 << r6
1160
+ if r6
1161
+ if (match_len = has_terminal?("=", false, index))
1162
+ r7 = true
1163
+ @index += match_len
1164
+ else
1165
+ terminal_parse_failure('"="')
1166
+ r7 = nil
1167
+ end
1168
+ s3 << r7
1169
+ end
1170
+ end
1171
+ end
1172
+ if s3.last
1173
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1174
+ r3.extend(Usingdirective0)
1175
+ else
1176
+ @index = i3
1177
+ r3 = nil
1178
+ end
1179
+ if r3
1180
+ r2 = r3
1181
+ else
1182
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1183
+ end
1184
+ s0 << r2
1185
+ if r2
1186
+ r8 = _nt_S
1187
+ s0 << r8
1188
+ if r8
1189
+ r9 = _nt_iri
1190
+ s0 << r9
1191
+ end
1192
+ end
1193
+ end
1194
+ if s0.last
1195
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1196
+ r0.extend(Usingdirective1)
1197
+ r0.extend(Usingdirective2)
1198
+ else
1199
+ @index = i0
1200
+ r0 = nil
1201
+ end
1202
+
1203
+ node_cache[:usingdirective][start_index] = r0
1204
+
1205
+ r0
1206
+ end
1207
+
1208
+ module Iri0
1209
+ def ast
1210
+ ["iri", text_value[1...-1]]
1211
+ end
1212
+ end
1213
+
1214
+ def _nt_iri
1215
+ start_index = index
1216
+ if node_cache[:iri].has_key?(index)
1217
+ cached = node_cache[:iri][index]
1218
+ if cached
1219
+ node_cache[:iri][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1220
+ @index = cached.interval.end
1221
+ end
1222
+ return cached
1223
+ end
1224
+
1225
+ r0 = _nt_angled
1226
+ r0.extend(Iri0)
1227
+ r0.extend(Iri0)
1228
+
1229
+ node_cache[:iri][start_index] = r0
1230
+
1231
+ r0
1232
+ end
1233
+
1234
+ module Iriref0
1235
+ def ast
1236
+ ["iriref", text_value[1...-1]]
1237
+ end
1238
+ end
1239
+
1240
+ def _nt_iriref
1241
+ start_index = index
1242
+ if node_cache[:iriref].has_key?(index)
1243
+ cached = node_cache[:iriref][index]
1244
+ if cached
1245
+ node_cache[:iriref][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1246
+ @index = cached.interval.end
1247
+ end
1248
+ return cached
1249
+ end
1250
+
1251
+ r0 = _nt_angled
1252
+ r0.extend(Iriref0)
1253
+ r0.extend(Iriref0)
1254
+
1255
+ node_cache[:iriref][start_index] = r0
1256
+
1257
+ r0
1258
+ end
1259
+
1260
+ module Identifier0
1261
+ def ast
1262
+ text_value
1263
+ end
1264
+ end
1265
+
1266
+ def _nt_identifier
1267
+ start_index = index
1268
+ if node_cache[:identifier].has_key?(index)
1269
+ cached = node_cache[:identifier][index]
1270
+ if cached
1271
+ node_cache[:identifier][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1272
+ @index = cached.interval.end
1273
+ end
1274
+ return cached
1275
+ end
1276
+
1277
+ r0 = _nt_id
1278
+ r0.extend(Identifier0)
1279
+ r0.extend(Identifier0)
1280
+
1281
+ node_cache[:identifier][start_index] = r0
1282
+
1283
+ r0
1284
+ end
1285
+
1286
+ module Boolean0
1287
+ def ast1() true end
1288
+ end
1289
+
1290
+ module Boolean1
1291
+ def ast1() false end
1292
+ end
1293
+
1294
+ def _nt_boolean
1295
+ start_index = index
1296
+ if node_cache[:boolean].has_key?(index)
1297
+ cached = node_cache[:boolean][index]
1298
+ if cached
1299
+ node_cache[:boolean][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1300
+ @index = cached.interval.end
1301
+ end
1302
+ return cached
1303
+ end
1304
+
1305
+ i0 = index
1306
+ if (match_len = has_terminal?("true", :insens, index))
1307
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1308
+ r1.extend(Boolean0)
1309
+ @index += match_len
1310
+ else
1311
+ terminal_parse_failure('"true"')
1312
+ r1 = nil
1313
+ end
1314
+ if r1
1315
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1316
+ r0 = r1
1317
+ else
1318
+ if (match_len = has_terminal?("false", :insens, index))
1319
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1320
+ r2.extend(Boolean1)
1321
+ @index += match_len
1322
+ else
1323
+ terminal_parse_failure('"false"')
1324
+ r2 = nil
1325
+ end
1326
+ if r2
1327
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1328
+ r0 = r2
1329
+ else
1330
+ @index = i0
1331
+ r0 = nil
1332
+ end
1333
+ end
1334
+
1335
+ node_cache[:boolean][start_index] = r0
1336
+
1337
+ r0
1338
+ end
1339
+
1340
+ module Literal0
1341
+ def ast
1342
+ ["literal", ast1]
1343
+ end
1344
+ end
1345
+
1346
+ def _nt_literal
1347
+ start_index = index
1348
+ if node_cache[:literal].has_key?(index)
1349
+ cached = node_cache[:literal][index]
1350
+ if cached
1351
+ node_cache[:literal][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1352
+ @index = cached.interval.end
1353
+ end
1354
+ return cached
1355
+ end
1356
+
1357
+ i0 = index
1358
+ i1 = index
1359
+ r2 = _nt_boolean
1360
+ if r2
1361
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1362
+ r1 = r2
1363
+ r1.extend(Literal0)
1364
+ r1.extend(Literal0)
1365
+ else
1366
+ r3 = _nt_number
1367
+ if r3
1368
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1369
+ r1 = r3
1370
+ r1.extend(Literal0)
1371
+ r1.extend(Literal0)
1372
+ else
1373
+ r4 = _nt_text
1374
+ if r4
1375
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1376
+ r1 = r4
1377
+ r1.extend(Literal0)
1378
+ r1.extend(Literal0)
1379
+ else
1380
+ @index = i1
1381
+ r1 = nil
1382
+ end
1383
+ end
1384
+ end
1385
+ if r1
1386
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1387
+ r0 = r1
1388
+ else
1389
+ r5 = _nt_datetime
1390
+ if r5
1391
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1392
+ r0 = r5
1393
+ else
1394
+ r6 = _nt_bytes
1395
+ if r6
1396
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
1397
+ r0 = r6
1398
+ else
1399
+ @index = i0
1400
+ r0 = nil
1401
+ end
1402
+ end
1403
+ end
1404
+
1405
+ node_cache[:literal][start_index] = r0
1406
+
1407
+ r0
1408
+ end
1409
+
1410
+ module Uint0
1411
+ def DIGIT1
1412
+ elements[0]
1413
+ end
1414
+
1415
+ end
1416
+
1417
+ module Uint1
1418
+ end
1419
+
1420
+ module Uint2
1421
+ end
1422
+
1423
+ def _nt_uint
1424
+ start_index = index
1425
+ if node_cache[:uint].has_key?(index)
1426
+ cached = node_cache[:uint][index]
1427
+ if cached
1428
+ node_cache[:uint][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1429
+ @index = cached.interval.end
1430
+ end
1431
+ return cached
1432
+ end
1433
+
1434
+ i0 = index
1435
+ i1, s1 = index, []
1436
+ r2 = _nt_DIGIT1
1437
+ s1 << r2
1438
+ if r2
1439
+ s3, i3 = [], index
1440
+ loop do
1441
+ r4 = _nt_DIGIT
1442
+ if r4
1443
+ s3 << r4
1444
+ else
1445
+ break
1446
+ end
1447
+ end
1448
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1449
+ s1 << r3
1450
+ end
1451
+ if s1.last
1452
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1453
+ r1.extend(Uint0)
1454
+ else
1455
+ @index = i1
1456
+ r1 = nil
1457
+ end
1458
+ if r1
1459
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1460
+ r0 = r1
1461
+ else
1462
+ i5, s5 = index, []
1463
+ if (match_len = has_terminal?("0x", :insens, index))
1464
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1465
+ @index += match_len
1466
+ else
1467
+ terminal_parse_failure('"0x"')
1468
+ r6 = nil
1469
+ end
1470
+ s5 << r6
1471
+ if r6
1472
+ s7, i7 = [], index
1473
+ loop do
1474
+ r8 = _nt_HEXDIG
1475
+ if r8
1476
+ s7 << r8
1477
+ else
1478
+ break
1479
+ end
1480
+ end
1481
+ if s7.empty?
1482
+ @index = i7
1483
+ r7 = nil
1484
+ else
1485
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1486
+ end
1487
+ s5 << r7
1488
+ end
1489
+ if s5.last
1490
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1491
+ r5.extend(Uint1)
1492
+ else
1493
+ @index = i5
1494
+ r5 = nil
1495
+ end
1496
+ if r5
1497
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1498
+ r0 = r5
1499
+ else
1500
+ i9, s9 = index, []
1501
+ if (match_len = has_terminal?("0b", :insens, index))
1502
+ r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1503
+ @index += match_len
1504
+ else
1505
+ terminal_parse_failure('"0b"')
1506
+ r10 = nil
1507
+ end
1508
+ s9 << r10
1509
+ if r10
1510
+ s11, i11 = [], index
1511
+ loop do
1512
+ r12 = _nt_BINDIG
1513
+ if r12
1514
+ s11 << r12
1515
+ else
1516
+ break
1517
+ end
1518
+ end
1519
+ if s11.empty?
1520
+ @index = i11
1521
+ r11 = nil
1522
+ else
1523
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
1524
+ end
1525
+ s9 << r11
1526
+ end
1527
+ if s9.last
1528
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1529
+ r9.extend(Uint2)
1530
+ else
1531
+ @index = i9
1532
+ r9 = nil
1533
+ end
1534
+ if r9
1535
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
1536
+ r0 = r9
1537
+ else
1538
+ if (match_len = has_terminal?("0", false, index))
1539
+ r13 = true
1540
+ @index += match_len
1541
+ else
1542
+ terminal_parse_failure('"0"')
1543
+ r13 = nil
1544
+ end
1545
+ if r13
1546
+ r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true
1547
+ r0 = r13
1548
+ else
1549
+ @index = i0
1550
+ r0 = nil
1551
+ end
1552
+ end
1553
+ end
1554
+ end
1555
+
1556
+ node_cache[:uint][start_index] = r0
1557
+
1558
+ r0
1559
+ end
1560
+
1561
+ module Int0
1562
+ def uint
1563
+ elements[1]
1564
+ end
1565
+ end
1566
+
1567
+ def _nt_int
1568
+ start_index = index
1569
+ if node_cache[:int].has_key?(index)
1570
+ cached = node_cache[:int][index]
1571
+ if cached
1572
+ node_cache[:int][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1573
+ @index = cached.interval.end
1574
+ end
1575
+ return cached
1576
+ end
1577
+
1578
+ i0, s0 = index, []
1579
+ if (match_len = has_terminal?("-", false, index))
1580
+ r2 = true
1581
+ @index += match_len
1582
+ else
1583
+ terminal_parse_failure('"-"')
1584
+ r2 = nil
1585
+ end
1586
+ if r2
1587
+ r1 = r2
1588
+ else
1589
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1590
+ end
1591
+ s0 << r1
1592
+ if r1
1593
+ r3 = _nt_uint
1594
+ s0 << r3
1595
+ end
1596
+ if s0.last
1597
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1598
+ r0.extend(Int0)
1599
+ else
1600
+ @index = i0
1601
+ r0 = nil
1602
+ end
1603
+
1604
+ node_cache[:int][start_index] = r0
1605
+
1606
+ r0
1607
+ end
1608
+
1609
+ module Number0
1610
+ def fraction
1611
+ elements[1]
1612
+ end
1613
+ end
1614
+
1615
+ module Number1
1616
+ def exponent
1617
+ elements[1]
1618
+ end
1619
+ end
1620
+
1621
+ module Number2
1622
+ def int
1623
+ elements[0]
1624
+ end
1625
+
1626
+ end
1627
+
1628
+ module Number3
1629
+ def ast1
1630
+ eval(text_value)
1631
+ end
1632
+ end
1633
+
1634
+ def _nt_number
1635
+ start_index = index
1636
+ if node_cache[:number].has_key?(index)
1637
+ cached = node_cache[:number][index]
1638
+ if cached
1639
+ node_cache[:number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1640
+ @index = cached.interval.end
1641
+ end
1642
+ return cached
1643
+ end
1644
+
1645
+ i0 = index
1646
+ r1 = _nt_hexfloat
1647
+ if r1
1648
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1649
+ r0 = r1
1650
+ else
1651
+ i2, s2 = index, []
1652
+ r3 = _nt_int
1653
+ s2 << r3
1654
+ if r3
1655
+ i5, s5 = index, []
1656
+ if (match_len = has_terminal?(".", false, index))
1657
+ r6 = true
1658
+ @index += match_len
1659
+ else
1660
+ terminal_parse_failure('"."')
1661
+ r6 = nil
1662
+ end
1663
+ s5 << r6
1664
+ if r6
1665
+ r7 = _nt_fraction
1666
+ s5 << r7
1667
+ end
1668
+ if s5.last
1669
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1670
+ r5.extend(Number0)
1671
+ else
1672
+ @index = i5
1673
+ r5 = nil
1674
+ end
1675
+ if r5
1676
+ r4 = r5
1677
+ else
1678
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1679
+ end
1680
+ s2 << r4
1681
+ if r4
1682
+ i9, s9 = index, []
1683
+ if (match_len = has_terminal?("e", :insens, index))
1684
+ r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1685
+ @index += match_len
1686
+ else
1687
+ terminal_parse_failure('"e"')
1688
+ r10 = nil
1689
+ end
1690
+ s9 << r10
1691
+ if r10
1692
+ r11 = _nt_exponent
1693
+ s9 << r11
1694
+ end
1695
+ if s9.last
1696
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1697
+ r9.extend(Number1)
1698
+ else
1699
+ @index = i9
1700
+ r9 = nil
1701
+ end
1702
+ if r9
1703
+ r8 = r9
1704
+ else
1705
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1706
+ end
1707
+ s2 << r8
1708
+ end
1709
+ end
1710
+ if s2.last
1711
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1712
+ r2.extend(Number2)
1713
+ r2.extend(Number3)
1714
+ else
1715
+ @index = i2
1716
+ r2 = nil
1717
+ end
1718
+ if r2
1719
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1720
+ r0 = r2
1721
+ else
1722
+ @index = i0
1723
+ r0 = nil
1724
+ end
1725
+ end
1726
+
1727
+ node_cache[:number][start_index] = r0
1728
+
1729
+ r0
1730
+ end
1731
+
1732
+ module Hexfloat0
1733
+ end
1734
+
1735
+ module Hexfloat1
1736
+ def exponent
1737
+ elements[4]
1738
+ end
1739
+ end
1740
+
1741
+ module Hexfloat2
1742
+ def ast1
1743
+ Float(text_value)
1744
+ end
1745
+ end
1746
+
1747
+ def _nt_hexfloat
1748
+ start_index = index
1749
+ if node_cache[:hexfloat].has_key?(index)
1750
+ cached = node_cache[:hexfloat][index]
1751
+ if cached
1752
+ node_cache[:hexfloat][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1753
+ @index = cached.interval.end
1754
+ end
1755
+ return cached
1756
+ end
1757
+
1758
+ i0, s0 = index, []
1759
+ if (match_len = has_terminal?("0x", :insens, index))
1760
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1761
+ @index += match_len
1762
+ else
1763
+ terminal_parse_failure('"0x"')
1764
+ r1 = nil
1765
+ end
1766
+ s0 << r1
1767
+ if r1
1768
+ s2, i2 = [], index
1769
+ loop do
1770
+ r3 = _nt_HEXDIG
1771
+ if r3
1772
+ s2 << r3
1773
+ else
1774
+ break
1775
+ end
1776
+ end
1777
+ if s2.empty?
1778
+ @index = i2
1779
+ r2 = nil
1780
+ else
1781
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1782
+ end
1783
+ s0 << r2
1784
+ if r2
1785
+ i5, s5 = index, []
1786
+ if (match_len = has_terminal?(".", false, index))
1787
+ r6 = true
1788
+ @index += match_len
1789
+ else
1790
+ terminal_parse_failure('"."')
1791
+ r6 = nil
1792
+ end
1793
+ s5 << r6
1794
+ if r6
1795
+ s7, i7 = [], index
1796
+ loop do
1797
+ r8 = _nt_HEXDIG
1798
+ if r8
1799
+ s7 << r8
1800
+ else
1801
+ break
1802
+ end
1803
+ end
1804
+ if s7.empty?
1805
+ @index = i7
1806
+ r7 = nil
1807
+ else
1808
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1809
+ end
1810
+ s5 << r7
1811
+ end
1812
+ if s5.last
1813
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1814
+ r5.extend(Hexfloat0)
1815
+ else
1816
+ @index = i5
1817
+ r5 = nil
1818
+ end
1819
+ if r5
1820
+ r4 = r5
1821
+ else
1822
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1823
+ end
1824
+ s0 << r4
1825
+ if r4
1826
+ if (match_len = has_terminal?("p", :insens, index))
1827
+ r9 = instantiate_node(SyntaxNode,input, index...(index + match_len))
1828
+ @index += match_len
1829
+ else
1830
+ terminal_parse_failure('"p"')
1831
+ r9 = nil
1832
+ end
1833
+ s0 << r9
1834
+ if r9
1835
+ r10 = _nt_exponent
1836
+ s0 << r10
1837
+ end
1838
+ end
1839
+ end
1840
+ end
1841
+ if s0.last
1842
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1843
+ r0.extend(Hexfloat1)
1844
+ r0.extend(Hexfloat2)
1845
+ else
1846
+ @index = i0
1847
+ r0 = nil
1848
+ end
1849
+
1850
+ node_cache[:hexfloat][start_index] = r0
1851
+
1852
+ r0
1853
+ end
1854
+
1855
+ def _nt_fraction
1856
+ start_index = index
1857
+ if node_cache[:fraction].has_key?(index)
1858
+ cached = node_cache[:fraction][index]
1859
+ if cached
1860
+ node_cache[:fraction][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1861
+ @index = cached.interval.end
1862
+ end
1863
+ return cached
1864
+ end
1865
+
1866
+ s0, i0 = [], index
1867
+ loop do
1868
+ r1 = _nt_DIGIT
1869
+ if r1
1870
+ s0 << r1
1871
+ else
1872
+ break
1873
+ end
1874
+ end
1875
+ if s0.empty?
1876
+ @index = i0
1877
+ r0 = nil
1878
+ else
1879
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1880
+ end
1881
+
1882
+ node_cache[:fraction][start_index] = r0
1883
+
1884
+ r0
1885
+ end
1886
+
1887
+ module Exponent0
1888
+ end
1889
+
1890
+ def _nt_exponent
1891
+ start_index = index
1892
+ if node_cache[:exponent].has_key?(index)
1893
+ cached = node_cache[:exponent][index]
1894
+ if cached
1895
+ node_cache[:exponent][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1896
+ @index = cached.interval.end
1897
+ end
1898
+ return cached
1899
+ end
1900
+
1901
+ i0, s0 = index, []
1902
+ i2 = index
1903
+ if (match_len = has_terminal?("+", false, index))
1904
+ r3 = true
1905
+ @index += match_len
1906
+ else
1907
+ terminal_parse_failure('"+"')
1908
+ r3 = nil
1909
+ end
1910
+ if r3
1911
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1912
+ r2 = r3
1913
+ else
1914
+ if (match_len = has_terminal?("-", false, index))
1915
+ r4 = true
1916
+ @index += match_len
1917
+ else
1918
+ terminal_parse_failure('"-"')
1919
+ r4 = nil
1920
+ end
1921
+ if r4
1922
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
1923
+ r2 = r4
1924
+ else
1925
+ @index = i2
1926
+ r2 = nil
1927
+ end
1928
+ end
1929
+ if r2
1930
+ r1 = r2
1931
+ else
1932
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1933
+ end
1934
+ s0 << r1
1935
+ if r1
1936
+ s5, i5 = [], index
1937
+ loop do
1938
+ r6 = _nt_DIGIT
1939
+ if r6
1940
+ s5 << r6
1941
+ else
1942
+ break
1943
+ end
1944
+ end
1945
+ if s5.empty?
1946
+ @index = i5
1947
+ r5 = nil
1948
+ else
1949
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1950
+ end
1951
+ s0 << r5
1952
+ end
1953
+ if s0.last
1954
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1955
+ r0.extend(Exponent0)
1956
+ else
1957
+ @index = i0
1958
+ r0 = nil
1959
+ end
1960
+
1961
+ node_cache[:exponent][start_index] = r0
1962
+
1963
+ r0
1964
+ end
1965
+
1966
+ module Text0
1967
+ end
1968
+
1969
+ module Text1
1970
+ def ast1
1971
+ eval(text_value)
1972
+ end
1973
+ end
1974
+
1975
+ def _nt_text
1976
+ start_index = index
1977
+ if node_cache[:text].has_key?(index)
1978
+ cached = node_cache[:text][index]
1979
+ if cached
1980
+ node_cache[:text][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1981
+ @index = cached.interval.end
1982
+ end
1983
+ return cached
1984
+ end
1985
+
1986
+ i0, s0 = index, []
1987
+ if (match_len = has_terminal?("\"", false, index))
1988
+ r1 = true
1989
+ @index += match_len
1990
+ else
1991
+ terminal_parse_failure('"\\""')
1992
+ r1 = nil
1993
+ end
1994
+ s0 << r1
1995
+ if r1
1996
+ s2, i2 = [], index
1997
+ loop do
1998
+ r3 = _nt_SCHAR
1999
+ if r3
2000
+ s2 << r3
2001
+ else
2002
+ break
2003
+ end
2004
+ end
2005
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2006
+ s0 << r2
2007
+ if r2
2008
+ if (match_len = has_terminal?("\"", false, index))
2009
+ r4 = true
2010
+ @index += match_len
2011
+ else
2012
+ terminal_parse_failure('"\\""')
2013
+ r4 = nil
2014
+ end
2015
+ s0 << r4
2016
+ end
2017
+ end
2018
+ if s0.last
2019
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2020
+ r0.extend(Text0)
2021
+ r0.extend(Text1)
2022
+ else
2023
+ @index = i0
2024
+ r0 = nil
2025
+ end
2026
+
2027
+ node_cache[:text][start_index] = r0
2028
+
2029
+ r0
2030
+ end
2031
+
2032
+ def _nt_SCHAR
2033
+ start_index = index
2034
+ if node_cache[:SCHAR].has_key?(index)
2035
+ cached = node_cache[:SCHAR][index]
2036
+ if cached
2037
+ node_cache[:SCHAR][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2038
+ @index = cached.interval.end
2039
+ end
2040
+ return cached
2041
+ end
2042
+
2043
+ i0 = index
2044
+ if has_terminal?(@regexps[gr = '\A[\\ -!]'] ||= Regexp.new(gr), :regexp, index)
2045
+ r1 = true
2046
+ @index += 1
2047
+ else
2048
+ terminal_parse_failure('[\\ -!]')
2049
+ r1 = nil
2050
+ end
2051
+ if r1
2052
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2053
+ r0 = r1
2054
+ else
2055
+ if has_terminal?(@regexps[gr = '\A[\\#-\\[]'] ||= Regexp.new(gr), :regexp, index)
2056
+ r2 = true
2057
+ @index += 1
2058
+ else
2059
+ terminal_parse_failure('[\\#-\\[]')
2060
+ r2 = nil
2061
+ end
2062
+ if r2
2063
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2064
+ r0 = r2
2065
+ else
2066
+ if has_terminal?(@regexps[gr = '\A[\\]-~]'] ||= Regexp.new(gr), :regexp, index)
2067
+ r3 = true
2068
+ @index += 1
2069
+ else
2070
+ terminal_parse_failure('[\\]-~]')
2071
+ r3 = nil
2072
+ end
2073
+ if r3
2074
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2075
+ r0 = r3
2076
+ else
2077
+ if has_terminal?(@regexps[gr = '\A[€-􏿽]'] ||= Regexp.new(gr), :regexp, index)
2078
+ r4 = true
2079
+ @index += 1
2080
+ else
2081
+ terminal_parse_failure('[€-􏿽]')
2082
+ r4 = nil
2083
+ end
2084
+ if r4
2085
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2086
+ r0 = r4
2087
+ else
2088
+ r5 = _nt_SESC
2089
+ if r5
2090
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2091
+ r0 = r5
2092
+ else
2093
+ @index = i0
2094
+ r0 = nil
2095
+ end
2096
+ end
2097
+ end
2098
+ end
2099
+ end
2100
+
2101
+ node_cache[:SCHAR][start_index] = r0
2102
+
2103
+ r0
2104
+ end
2105
+
2106
+ module SESC0
2107
+ end
2108
+
2109
+ def _nt_SESC
2110
+ start_index = index
2111
+ if node_cache[:SESC].has_key?(index)
2112
+ cached = node_cache[:SESC][index]
2113
+ if cached
2114
+ node_cache[:SESC][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2115
+ @index = cached.interval.end
2116
+ end
2117
+ return cached
2118
+ end
2119
+
2120
+ i0, s0 = index, []
2121
+ if (match_len = has_terminal?("\\", false, index))
2122
+ r1 = true
2123
+ @index += match_len
2124
+ else
2125
+ terminal_parse_failure('"\\\\"')
2126
+ r1 = nil
2127
+ end
2128
+ s0 << r1
2129
+ if r1
2130
+ i2 = index
2131
+ r3 = _nt_hexadecimalescape
2132
+ if r3
2133
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2134
+ r2 = r3
2135
+ else
2136
+ r4 = _nt_unicodeescape
2137
+ if r4
2138
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2139
+ r2 = r4
2140
+ else
2141
+ i5 = index
2142
+ if has_terminal?(@regexps[gr = '\A[\\ -~]'] ||= Regexp.new(gr), :regexp, index)
2143
+ r6 = true
2144
+ @index += 1
2145
+ else
2146
+ terminal_parse_failure('[\\ -~]')
2147
+ r6 = nil
2148
+ end
2149
+ if r6
2150
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2151
+ r5 = r6
2152
+ else
2153
+ if has_terminal?(@regexps[gr = '\A[€-􏿽]'] ||= Regexp.new(gr), :regexp, index)
2154
+ r7 = true
2155
+ @index += 1
2156
+ else
2157
+ terminal_parse_failure('[€-􏿽]')
2158
+ r7 = nil
2159
+ end
2160
+ if r7
2161
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2162
+ r5 = r7
2163
+ else
2164
+ @index = i5
2165
+ r5 = nil
2166
+ end
2167
+ end
2168
+ if r5
2169
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2170
+ r2 = r5
2171
+ else
2172
+ @index = i2
2173
+ r2 = nil
2174
+ end
2175
+ end
2176
+ end
2177
+ s0 << r2
2178
+ end
2179
+ if s0.last
2180
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2181
+ r0.extend(SESC0)
2182
+ else
2183
+ @index = i0
2184
+ r0 = nil
2185
+ end
2186
+
2187
+ node_cache[:SESC][start_index] = r0
2188
+
2189
+ r0
2190
+ end
2191
+
2192
+ module Hexadecimalescape0
2193
+ def HEXDIG
2194
+ elements[1]
2195
+ end
2196
+ end
2197
+
2198
+ def _nt_hexadecimalescape
2199
+ start_index = index
2200
+ if node_cache[:hexadecimalescape].has_key?(index)
2201
+ cached = node_cache[:hexadecimalescape][index]
2202
+ if cached
2203
+ node_cache[:hexadecimalescape][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2204
+ @index = cached.interval.end
2205
+ end
2206
+ return cached
2207
+ end
2208
+
2209
+ i0, s0 = index, []
2210
+ if (match_len = has_terminal?("x", :insens, index))
2211
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2212
+ @index += match_len
2213
+ else
2214
+ terminal_parse_failure('"x"')
2215
+ r1 = nil
2216
+ end
2217
+ s0 << r1
2218
+ if r1
2219
+ r2 = _nt_HEXDIG
2220
+ s0 << r2
2221
+ end
2222
+ if s0.last
2223
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2224
+ r0.extend(Hexadecimalescape0)
2225
+ else
2226
+ @index = i0
2227
+ r0 = nil
2228
+ end
2229
+
2230
+ node_cache[:hexadecimalescape][start_index] = r0
2231
+
2232
+ r0
2233
+ end
2234
+
2235
+ module Unicodeescape0
2236
+ def HEXDIG
2237
+ elements[1]
2238
+ end
2239
+ end
2240
+
2241
+ module Unicodeescape1
2242
+ def HEXDIG
2243
+ elements[1]
2244
+ end
2245
+ end
2246
+
2247
+ def _nt_unicodeescape
2248
+ start_index = index
2249
+ if node_cache[:unicodeescape].has_key?(index)
2250
+ cached = node_cache[:unicodeescape][index]
2251
+ if cached
2252
+ node_cache[:unicodeescape][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2253
+ @index = cached.interval.end
2254
+ end
2255
+ return cached
2256
+ end
2257
+
2258
+ i0 = index
2259
+ i1, s1 = index, []
2260
+ if (match_len = has_terminal?("u", false, index))
2261
+ r2 = true
2262
+ @index += match_len
2263
+ else
2264
+ terminal_parse_failure('"u"')
2265
+ r2 = nil
2266
+ end
2267
+ s1 << r2
2268
+ if r2
2269
+ r3 = _nt_HEXDIG
2270
+ s1 << r3
2271
+ end
2272
+ if s1.last
2273
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2274
+ r1.extend(Unicodeescape0)
2275
+ else
2276
+ @index = i1
2277
+ r1 = nil
2278
+ end
2279
+ if r1
2280
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2281
+ r0 = r1
2282
+ else
2283
+ i4, s4 = index, []
2284
+ if (match_len = has_terminal?("U", false, index))
2285
+ r5 = true
2286
+ @index += match_len
2287
+ else
2288
+ terminal_parse_failure('"U"')
2289
+ r5 = nil
2290
+ end
2291
+ s4 << r5
2292
+ if r5
2293
+ r6 = _nt_HEXDIG
2294
+ s4 << r6
2295
+ end
2296
+ if s4.last
2297
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2298
+ r4.extend(Unicodeescape1)
2299
+ else
2300
+ @index = i4
2301
+ r4 = nil
2302
+ end
2303
+ if r4
2304
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2305
+ r0 = r4
2306
+ else
2307
+ @index = i0
2308
+ r0 = nil
2309
+ end
2310
+ end
2311
+
2312
+ node_cache[:unicodeescape][start_index] = r0
2313
+
2314
+ r0
2315
+ end
2316
+
2317
+ module Angled0
2318
+ end
2319
+
2320
+ def _nt_angled
2321
+ start_index = index
2322
+ if node_cache[:angled].has_key?(index)
2323
+ cached = node_cache[:angled][index]
2324
+ if cached
2325
+ node_cache[:angled][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2326
+ @index = cached.interval.end
2327
+ end
2328
+ return cached
2329
+ end
2330
+
2331
+ i0, s0 = index, []
2332
+ if (match_len = has_terminal?("<", false, index))
2333
+ r1 = true
2334
+ @index += match_len
2335
+ else
2336
+ terminal_parse_failure('"<"')
2337
+ r1 = nil
2338
+ end
2339
+ s0 << r1
2340
+ if r1
2341
+ s2, i2 = [], index
2342
+ loop do
2343
+ r3 = _nt_ACHAR
2344
+ if r3
2345
+ s2 << r3
2346
+ else
2347
+ break
2348
+ end
2349
+ end
2350
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2351
+ s0 << r2
2352
+ if r2
2353
+ if (match_len = has_terminal?(">", false, index))
2354
+ r4 = true
2355
+ @index += match_len
2356
+ else
2357
+ terminal_parse_failure('">"')
2358
+ r4 = nil
2359
+ end
2360
+ s0 << r4
2361
+ end
2362
+ end
2363
+ if s0.last
2364
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2365
+ r0.extend(Angled0)
2366
+ else
2367
+ @index = i0
2368
+ r0 = nil
2369
+ end
2370
+
2371
+ node_cache[:angled][start_index] = r0
2372
+
2373
+ r0
2374
+ end
2375
+
2376
+ def _nt_ACHAR
2377
+ start_index = index
2378
+ if node_cache[:ACHAR].has_key?(index)
2379
+ cached = node_cache[:ACHAR][index]
2380
+ if cached
2381
+ node_cache[:ACHAR][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2382
+ @index = cached.interval.end
2383
+ end
2384
+ return cached
2385
+ end
2386
+
2387
+ i0 = index
2388
+ if has_terminal?(@regexps[gr = '\A[\\ -=]'] ||= Regexp.new(gr), :regexp, index)
2389
+ r1 = true
2390
+ @index += 1
2391
+ else
2392
+ terminal_parse_failure('[\\ -=]')
2393
+ r1 = nil
2394
+ end
2395
+ if r1
2396
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2397
+ r0 = r1
2398
+ else
2399
+ if has_terminal?(@regexps[gr = '\A[\\?-\\[]'] ||= Regexp.new(gr), :regexp, index)
2400
+ r2 = true
2401
+ @index += 1
2402
+ else
2403
+ terminal_parse_failure('[\\?-\\[]')
2404
+ r2 = nil
2405
+ end
2406
+ if r2
2407
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2408
+ r0 = r2
2409
+ else
2410
+ if has_terminal?(@regexps[gr = '\A[\\]-~]'] ||= Regexp.new(gr), :regexp, index)
2411
+ r3 = true
2412
+ @index += 1
2413
+ else
2414
+ terminal_parse_failure('[\\]-~]')
2415
+ r3 = nil
2416
+ end
2417
+ if r3
2418
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2419
+ r0 = r3
2420
+ else
2421
+ if has_terminal?(@regexps[gr = '\A[€-􏿽]'] ||= Regexp.new(gr), :regexp, index)
2422
+ r4 = true
2423
+ @index += 1
2424
+ else
2425
+ terminal_parse_failure('[€-􏿽]')
2426
+ r4 = nil
2427
+ end
2428
+ if r4
2429
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2430
+ r0 = r4
2431
+ else
2432
+ r5 = _nt_SESC
2433
+ if r5
2434
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2435
+ r0 = r5
2436
+ else
2437
+ @index = i0
2438
+ r0 = nil
2439
+ end
2440
+ end
2441
+ end
2442
+ end
2443
+ end
2444
+
2445
+ node_cache[:ACHAR][start_index] = r0
2446
+
2447
+ r0
2448
+ end
2449
+
2450
+ module Datetime0
2451
+ def DOLLAR1
2452
+ elements[0]
2453
+ end
2454
+
2455
+ def datetime1
2456
+ elements[1]
2457
+ end
2458
+
2459
+ def DOLLAR2
2460
+ elements[2]
2461
+ end
2462
+ end
2463
+
2464
+ module Datetime1
2465
+ def ast
2466
+ datetime1.ast
2467
+ end
2468
+ end
2469
+
2470
+ def _nt_datetime
2471
+ start_index = index
2472
+ if node_cache[:datetime].has_key?(index)
2473
+ cached = node_cache[:datetime][index]
2474
+ if cached
2475
+ node_cache[:datetime][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2476
+ @index = cached.interval.end
2477
+ end
2478
+ return cached
2479
+ end
2480
+
2481
+ i0, s0 = index, []
2482
+ r1 = _nt_DOLLAR
2483
+ s0 << r1
2484
+ if r1
2485
+ r2 = _nt_datetime1
2486
+ s0 << r2
2487
+ if r2
2488
+ r3 = _nt_DOLLAR
2489
+ s0 << r3
2490
+ end
2491
+ end
2492
+ if s0.last
2493
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2494
+ r0.extend(Datetime0)
2495
+ r0.extend(Datetime1)
2496
+ else
2497
+ @index = i0
2498
+ r0 = nil
2499
+ end
2500
+
2501
+ node_cache[:datetime][start_index] = r0
2502
+
2503
+ r0
2504
+ end
2505
+
2506
+ module Datetime10
2507
+ def ast
2508
+ ["time", Time.parse(text_value).to_i]
2509
+ end
2510
+ end
2511
+
2512
+ def _nt_datetime1
2513
+ start_index = index
2514
+ if node_cache[:datetime1].has_key?(index)
2515
+ cached = node_cache[:datetime1][index]
2516
+ if cached
2517
+ node_cache[:datetime1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2518
+ @index = cached.interval.end
2519
+ end
2520
+ return cached
2521
+ end
2522
+
2523
+ s0, i0 = [], index
2524
+ loop do
2525
+ i1 = index
2526
+ if has_terminal?(@regexps[gr = '\A[\\ -\\#]'] ||= Regexp.new(gr), :regexp, index)
2527
+ r2 = true
2528
+ @index += 1
2529
+ else
2530
+ terminal_parse_failure('[\\ -\\#]')
2531
+ r2 = nil
2532
+ end
2533
+ if r2
2534
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2535
+ r1 = r2
2536
+ else
2537
+ if has_terminal?(@regexps[gr = '\A[%-~]'] ||= Regexp.new(gr), :regexp, index)
2538
+ r3 = true
2539
+ @index += 1
2540
+ else
2541
+ terminal_parse_failure('[%-~]')
2542
+ r3 = nil
2543
+ end
2544
+ if r3
2545
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2546
+ r1 = r3
2547
+ else
2548
+ @index = i1
2549
+ r1 = nil
2550
+ end
2551
+ end
2552
+ if r1
2553
+ s0 << r1
2554
+ else
2555
+ break
2556
+ end
2557
+ end
2558
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2559
+ r0.extend(Datetime10)
2560
+ r0.extend(Datetime10)
2561
+
2562
+ node_cache[:datetime1][start_index] = r0
2563
+
2564
+ r0
2565
+ end
2566
+
2567
+ def _nt_DOLLAR
2568
+ start_index = index
2569
+ if node_cache[:DOLLAR].has_key?(index)
2570
+ cached = node_cache[:DOLLAR][index]
2571
+ if cached
2572
+ node_cache[:DOLLAR][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2573
+ @index = cached.interval.end
2574
+ end
2575
+ return cached
2576
+ end
2577
+
2578
+ if (match_len = has_terminal?("$", false, index))
2579
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2580
+ @index += match_len
2581
+ else
2582
+ terminal_parse_failure('"$"')
2583
+ r0 = nil
2584
+ end
2585
+
2586
+ node_cache[:DOLLAR][start_index] = r0
2587
+
2588
+ r0
2589
+ end
2590
+
2591
+ module Bytes0
2592
+ end
2593
+
2594
+ module Bytes1
2595
+ def ast
2596
+ ["bytes", elements[0].text_value, elements[2].text_value]
2597
+ end
2598
+ end
2599
+
2600
+ def _nt_bytes
2601
+ start_index = index
2602
+ if node_cache[:bytes].has_key?(index)
2603
+ cached = node_cache[:bytes][index]
2604
+ if cached
2605
+ node_cache[:bytes][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2606
+ @index = cached.interval.end
2607
+ end
2608
+ return cached
2609
+ end
2610
+
2611
+ i0, s0 = index, []
2612
+ r2 = _nt_bsqual
2613
+ if r2
2614
+ r1 = r2
2615
+ else
2616
+ r1 = instantiate_node(SyntaxNode,input, index...index)
2617
+ end
2618
+ s0 << r1
2619
+ if r1
2620
+ if (match_len = has_terminal?("'", false, index))
2621
+ r3 = true
2622
+ @index += match_len
2623
+ else
2624
+ terminal_parse_failure('"\'"')
2625
+ r3 = nil
2626
+ end
2627
+ s0 << r3
2628
+ if r3
2629
+ s4, i4 = [], index
2630
+ loop do
2631
+ r5 = _nt_BCHAR
2632
+ if r5
2633
+ s4 << r5
2634
+ else
2635
+ break
2636
+ end
2637
+ end
2638
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2639
+ s0 << r4
2640
+ if r4
2641
+ if (match_len = has_terminal?("'", false, index))
2642
+ r6 = true
2643
+ @index += match_len
2644
+ else
2645
+ terminal_parse_failure('"\'"')
2646
+ r6 = nil
2647
+ end
2648
+ s0 << r6
2649
+ end
2650
+ end
2651
+ end
2652
+ if s0.last
2653
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2654
+ r0.extend(Bytes0)
2655
+ r0.extend(Bytes1)
2656
+ else
2657
+ @index = i0
2658
+ r0 = nil
2659
+ end
2660
+
2661
+ node_cache[:bytes][start_index] = r0
2662
+
2663
+ r0
2664
+ end
2665
+
2666
+ def _nt_BCHAR
2667
+ start_index = index
2668
+ if node_cache[:BCHAR].has_key?(index)
2669
+ cached = node_cache[:BCHAR][index]
2670
+ if cached
2671
+ node_cache[:BCHAR][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2672
+ @index = cached.interval.end
2673
+ end
2674
+ return cached
2675
+ end
2676
+
2677
+ i0 = index
2678
+ if has_terminal?(@regexps[gr = '\A[\\ -&]'] ||= Regexp.new(gr), :regexp, index)
2679
+ r1 = true
2680
+ @index += 1
2681
+ else
2682
+ terminal_parse_failure('[\\ -&]')
2683
+ r1 = nil
2684
+ end
2685
+ if r1
2686
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2687
+ r0 = r1
2688
+ else
2689
+ if has_terminal?(@regexps[gr = '\A[\\(-\\[]'] ||= Regexp.new(gr), :regexp, index)
2690
+ r2 = true
2691
+ @index += 1
2692
+ else
2693
+ terminal_parse_failure('[\\(-\\[]')
2694
+ r2 = nil
2695
+ end
2696
+ if r2
2697
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2698
+ r0 = r2
2699
+ else
2700
+ if has_terminal?(@regexps[gr = '\A[\\]-􏿽]'] ||= Regexp.new(gr), :regexp, index)
2701
+ r3 = true
2702
+ @index += 1
2703
+ else
2704
+ terminal_parse_failure('[\\]-􏿽]')
2705
+ r3 = nil
2706
+ end
2707
+ if r3
2708
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2709
+ r0 = r3
2710
+ else
2711
+ r4 = _nt_SESC
2712
+ if r4
2713
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2714
+ r0 = r4
2715
+ else
2716
+ r5 = _nt_CRLF
2717
+ if r5
2718
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
2719
+ r0 = r5
2720
+ else
2721
+ @index = i0
2722
+ r0 = nil
2723
+ end
2724
+ end
2725
+ end
2726
+ end
2727
+ end
2728
+
2729
+ node_cache[:BCHAR][start_index] = r0
2730
+
2731
+ r0
2732
+ end
2733
+
2734
+ def _nt_bsqual
2735
+ start_index = index
2736
+ if node_cache[:bsqual].has_key?(index)
2737
+ cached = node_cache[:bsqual][index]
2738
+ if cached
2739
+ node_cache[:bsqual][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2740
+ @index = cached.interval.end
2741
+ end
2742
+ return cached
2743
+ end
2744
+
2745
+ i0 = index
2746
+ if (match_len = has_terminal?("h", :insens, index))
2747
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2748
+ @index += match_len
2749
+ else
2750
+ terminal_parse_failure('"h"')
2751
+ r1 = nil
2752
+ end
2753
+ if r1
2754
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2755
+ r0 = r1
2756
+ else
2757
+ if (match_len = has_terminal?("b16", :insens, index))
2758
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2759
+ @index += match_len
2760
+ else
2761
+ terminal_parse_failure('"b16"')
2762
+ r2 = nil
2763
+ end
2764
+ if r2
2765
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2766
+ r0 = r2
2767
+ else
2768
+ if (match_len = has_terminal?("b32", :insens, index))
2769
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2770
+ @index += match_len
2771
+ else
2772
+ terminal_parse_failure('"b32"')
2773
+ r3 = nil
2774
+ end
2775
+ if r3
2776
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2777
+ r0 = r3
2778
+ else
2779
+ if (match_len = has_terminal?("b64", :insens, index))
2780
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
2781
+ @index += match_len
2782
+ else
2783
+ terminal_parse_failure('"b64"')
2784
+ r4 = nil
2785
+ end
2786
+ if r4
2787
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
2788
+ r0 = r4
2789
+ else
2790
+ @index = i0
2791
+ r0 = nil
2792
+ end
2793
+ end
2794
+ end
2795
+ end
2796
+
2797
+ node_cache[:bsqual][start_index] = r0
2798
+
2799
+ r0
2800
+ end
2801
+
2802
+ module Id0
2803
+ end
2804
+
2805
+ module Id1
2806
+ def EALPHA
2807
+ elements[0]
2808
+ end
2809
+
2810
+ end
2811
+
2812
+ def _nt_id
2813
+ start_index = index
2814
+ if node_cache[:id].has_key?(index)
2815
+ cached = node_cache[:id][index]
2816
+ if cached
2817
+ node_cache[:id][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2818
+ @index = cached.interval.end
2819
+ end
2820
+ return cached
2821
+ end
2822
+
2823
+ i0, s0 = index, []
2824
+ r1 = _nt_EALPHA
2825
+ s0 << r1
2826
+ if r1
2827
+ s2, i2 = [], index
2828
+ loop do
2829
+ i3, s3 = index, []
2830
+ s4, i4 = [], index
2831
+ loop do
2832
+ i5 = index
2833
+ if (match_len = has_terminal?("-", false, index))
2834
+ r6 = true
2835
+ @index += match_len
2836
+ else
2837
+ terminal_parse_failure('"-"')
2838
+ r6 = nil
2839
+ end
2840
+ if r6
2841
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
2842
+ r5 = r6
2843
+ else
2844
+ if (match_len = has_terminal?(".", false, index))
2845
+ r7 = true
2846
+ @index += match_len
2847
+ else
2848
+ terminal_parse_failure('"."')
2849
+ r7 = nil
2850
+ end
2851
+ if r7
2852
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
2853
+ r5 = r7
2854
+ else
2855
+ @index = i5
2856
+ r5 = nil
2857
+ end
2858
+ end
2859
+ if r5
2860
+ s4 << r5
2861
+ else
2862
+ break
2863
+ end
2864
+ end
2865
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2866
+ s3 << r4
2867
+ if r4
2868
+ i8 = index
2869
+ r9 = _nt_EALPHA
2870
+ if r9
2871
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
2872
+ r8 = r9
2873
+ else
2874
+ r10 = _nt_DIGIT
2875
+ if r10
2876
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
2877
+ r8 = r10
2878
+ else
2879
+ @index = i8
2880
+ r8 = nil
2881
+ end
2882
+ end
2883
+ s3 << r8
2884
+ end
2885
+ if s3.last
2886
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2887
+ r3.extend(Id0)
2888
+ else
2889
+ @index = i3
2890
+ r3 = nil
2891
+ end
2892
+ if r3
2893
+ s2 << r3
2894
+ else
2895
+ break
2896
+ end
2897
+ end
2898
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2899
+ s0 << r2
2900
+ end
2901
+ if s0.last
2902
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2903
+ r0.extend(Id1)
2904
+ else
2905
+ @index = i0
2906
+ r0 = nil
2907
+ end
2908
+
2909
+ node_cache[:id][start_index] = r0
2910
+
2911
+ r0
2912
+ end
2913
+
2914
+ def _nt_ALPHA
2915
+ start_index = index
2916
+ if node_cache[:ALPHA].has_key?(index)
2917
+ cached = node_cache[:ALPHA][index]
2918
+ if cached
2919
+ node_cache[:ALPHA][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2920
+ @index = cached.interval.end
2921
+ end
2922
+ return cached
2923
+ end
2924
+
2925
+ i0 = index
2926
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
2927
+ r1 = true
2928
+ @index += 1
2929
+ else
2930
+ terminal_parse_failure('[A-Z]')
2931
+ r1 = nil
2932
+ end
2933
+ if r1
2934
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2935
+ r0 = r1
2936
+ else
2937
+ if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
2938
+ r2 = true
2939
+ @index += 1
2940
+ else
2941
+ terminal_parse_failure('[a-z]')
2942
+ r2 = nil
2943
+ end
2944
+ if r2
2945
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2946
+ r0 = r2
2947
+ else
2948
+ @index = i0
2949
+ r0 = nil
2950
+ end
2951
+ end
2952
+
2953
+ node_cache[:ALPHA][start_index] = r0
2954
+
2955
+ r0
2956
+ end
2957
+
2958
+ def _nt_EALPHA
2959
+ start_index = index
2960
+ if node_cache[:EALPHA].has_key?(index)
2961
+ cached = node_cache[:EALPHA][index]
2962
+ if cached
2963
+ node_cache[:EALPHA][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
2964
+ @index = cached.interval.end
2965
+ end
2966
+ return cached
2967
+ end
2968
+
2969
+ i0 = index
2970
+ r1 = _nt_ALPHA
2971
+ if r1
2972
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2973
+ r0 = r1
2974
+ else
2975
+ if (match_len = has_terminal?("@", false, index))
2976
+ r2 = true
2977
+ @index += match_len
2978
+ else
2979
+ terminal_parse_failure('"@"')
2980
+ r2 = nil
2981
+ end
2982
+ if r2
2983
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
2984
+ r0 = r2
2985
+ else
2986
+ if (match_len = has_terminal?("_", false, index))
2987
+ r3 = true
2988
+ @index += match_len
2989
+ else
2990
+ terminal_parse_failure('"_"')
2991
+ r3 = nil
2992
+ end
2993
+ if r3
2994
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
2995
+ r0 = r3
2996
+ else
2997
+ if (match_len = has_terminal?("$", false, index))
2998
+ r4 = true
2999
+ @index += match_len
3000
+ else
3001
+ terminal_parse_failure('"$"')
3002
+ r4 = nil
3003
+ end
3004
+ if r4
3005
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3006
+ r0 = r4
3007
+ else
3008
+ @index = i0
3009
+ r0 = nil
3010
+ end
3011
+ end
3012
+ end
3013
+ end
3014
+
3015
+ node_cache[:EALPHA][start_index] = r0
3016
+
3017
+ r0
3018
+ end
3019
+
3020
+ def _nt_DIGIT
3021
+ start_index = index
3022
+ if node_cache[:DIGIT].has_key?(index)
3023
+ cached = node_cache[:DIGIT][index]
3024
+ if cached
3025
+ node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3026
+ @index = cached.interval.end
3027
+ end
3028
+ return cached
3029
+ end
3030
+
3031
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
3032
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3033
+ @index += 1
3034
+ else
3035
+ terminal_parse_failure('[0-9]')
3036
+ r0 = nil
3037
+ end
3038
+
3039
+ node_cache[:DIGIT][start_index] = r0
3040
+
3041
+ r0
3042
+ end
3043
+
3044
+ def _nt_DIGIT1
3045
+ start_index = index
3046
+ if node_cache[:DIGIT1].has_key?(index)
3047
+ cached = node_cache[:DIGIT1][index]
3048
+ if cached
3049
+ node_cache[:DIGIT1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3050
+ @index = cached.interval.end
3051
+ end
3052
+ return cached
3053
+ end
3054
+
3055
+ if has_terminal?(@regexps[gr = '\A[1-9]'] ||= Regexp.new(gr), :regexp, index)
3056
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3057
+ @index += 1
3058
+ else
3059
+ terminal_parse_failure('[1-9]')
3060
+ r0 = nil
3061
+ end
3062
+
3063
+ node_cache[:DIGIT1][start_index] = r0
3064
+
3065
+ r0
3066
+ end
3067
+
3068
+ def _nt_HEXDIG
3069
+ start_index = index
3070
+ if node_cache[:HEXDIG].has_key?(index)
3071
+ cached = node_cache[:HEXDIG][index]
3072
+ if cached
3073
+ node_cache[:HEXDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3074
+ @index = cached.interval.end
3075
+ end
3076
+ return cached
3077
+ end
3078
+
3079
+ i0 = index
3080
+ r1 = _nt_DIGIT
3081
+ if r1
3082
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3083
+ r0 = r1
3084
+ else
3085
+ if (match_len = has_terminal?("a", :insens, index))
3086
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3087
+ @index += match_len
3088
+ else
3089
+ terminal_parse_failure('"A"')
3090
+ r2 = nil
3091
+ end
3092
+ if r2
3093
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3094
+ r0 = r2
3095
+ else
3096
+ if (match_len = has_terminal?("b", :insens, index))
3097
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3098
+ @index += match_len
3099
+ else
3100
+ terminal_parse_failure('"B"')
3101
+ r3 = nil
3102
+ end
3103
+ if r3
3104
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3105
+ r0 = r3
3106
+ else
3107
+ if (match_len = has_terminal?("c", :insens, index))
3108
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3109
+ @index += match_len
3110
+ else
3111
+ terminal_parse_failure('"C"')
3112
+ r4 = nil
3113
+ end
3114
+ if r4
3115
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3116
+ r0 = r4
3117
+ else
3118
+ if (match_len = has_terminal?("d", :insens, index))
3119
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3120
+ @index += match_len
3121
+ else
3122
+ terminal_parse_failure('"D"')
3123
+ r5 = nil
3124
+ end
3125
+ if r5
3126
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3127
+ r0 = r5
3128
+ else
3129
+ if (match_len = has_terminal?("e", :insens, index))
3130
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3131
+ @index += match_len
3132
+ else
3133
+ terminal_parse_failure('"E"')
3134
+ r6 = nil
3135
+ end
3136
+ if r6
3137
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
3138
+ r0 = r6
3139
+ else
3140
+ if (match_len = has_terminal?("f", :insens, index))
3141
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3142
+ @index += match_len
3143
+ else
3144
+ terminal_parse_failure('"F"')
3145
+ r7 = nil
3146
+ end
3147
+ if r7
3148
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
3149
+ r0 = r7
3150
+ else
3151
+ @index = i0
3152
+ r0 = nil
3153
+ end
3154
+ end
3155
+ end
3156
+ end
3157
+ end
3158
+ end
3159
+ end
3160
+
3161
+ node_cache[:HEXDIG][start_index] = r0
3162
+
3163
+ r0
3164
+ end
3165
+
3166
+ def _nt_BINDIG
3167
+ start_index = index
3168
+ if node_cache[:BINDIG].has_key?(index)
3169
+ cached = node_cache[:BINDIG][index]
3170
+ if cached
3171
+ node_cache[:BINDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3172
+ @index = cached.interval.end
3173
+ end
3174
+ return cached
3175
+ end
3176
+
3177
+ if has_terminal?(@regexps[gr = '\A[0-1]'] ||= Regexp.new(gr), :regexp, index)
3178
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
3179
+ @index += 1
3180
+ else
3181
+ terminal_parse_failure('[0-1]')
3182
+ r0 = nil
3183
+ end
3184
+
3185
+ node_cache[:BINDIG][start_index] = r0
3186
+
3187
+ r0
3188
+ end
3189
+
3190
+ def _nt_S
3191
+ start_index = index
3192
+ if node_cache[:S].has_key?(index)
3193
+ cached = node_cache[:S][index]
3194
+ if cached
3195
+ node_cache[:S][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3196
+ @index = cached.interval.end
3197
+ end
3198
+ return cached
3199
+ end
3200
+
3201
+ s0, i0 = [], index
3202
+ loop do
3203
+ r1 = _nt_WS
3204
+ if r1
3205
+ s0 << r1
3206
+ else
3207
+ break
3208
+ end
3209
+ end
3210
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3211
+
3212
+ node_cache[:S][start_index] = r0
3213
+
3214
+ r0
3215
+ end
3216
+
3217
+ def _nt_WS
3218
+ start_index = index
3219
+ if node_cache[:WS].has_key?(index)
3220
+ cached = node_cache[:WS][index]
3221
+ if cached
3222
+ node_cache[:WS][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3223
+ @index = cached.interval.end
3224
+ end
3225
+ return cached
3226
+ end
3227
+
3228
+ i0 = index
3229
+ r1 = _nt_SP
3230
+ if r1
3231
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3232
+ r0 = r1
3233
+ else
3234
+ r2 = _nt_NL
3235
+ if r2
3236
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3237
+ r0 = r2
3238
+ else
3239
+ @index = i0
3240
+ r0 = nil
3241
+ end
3242
+ end
3243
+
3244
+ node_cache[:WS][start_index] = r0
3245
+
3246
+ r0
3247
+ end
3248
+
3249
+ def _nt_SP
3250
+ start_index = index
3251
+ if node_cache[:SP].has_key?(index)
3252
+ cached = node_cache[:SP][index]
3253
+ if cached
3254
+ node_cache[:SP][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3255
+ @index = cached.interval.end
3256
+ end
3257
+ return cached
3258
+ end
3259
+
3260
+ if (match_len = has_terminal?(" ", false, index))
3261
+ r0 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3262
+ @index += match_len
3263
+ else
3264
+ terminal_parse_failure('" "')
3265
+ r0 = nil
3266
+ end
3267
+
3268
+ node_cache[:SP][start_index] = r0
3269
+
3270
+ r0
3271
+ end
3272
+
3273
+ def _nt_NL
3274
+ start_index = index
3275
+ if node_cache[:NL].has_key?(index)
3276
+ cached = node_cache[:NL][index]
3277
+ if cached
3278
+ node_cache[:NL][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3279
+ @index = cached.interval.end
3280
+ end
3281
+ return cached
3282
+ end
3283
+
3284
+ i0 = index
3285
+ r1 = _nt_COMMENT
3286
+ if r1
3287
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3288
+ r0 = r1
3289
+ else
3290
+ r2 = _nt_CRLF
3291
+ if r2
3292
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3293
+ r0 = r2
3294
+ else
3295
+ @index = i0
3296
+ r0 = nil
3297
+ end
3298
+ end
3299
+
3300
+ node_cache[:NL][start_index] = r0
3301
+
3302
+ r0
3303
+ end
3304
+
3305
+ module COMMENT0
3306
+ def CRLF
3307
+ elements[2]
3308
+ end
3309
+ end
3310
+
3311
+ def _nt_COMMENT
3312
+ start_index = index
3313
+ if node_cache[:COMMENT].has_key?(index)
3314
+ cached = node_cache[:COMMENT][index]
3315
+ if cached
3316
+ node_cache[:COMMENT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3317
+ @index = cached.interval.end
3318
+ end
3319
+ return cached
3320
+ end
3321
+
3322
+ i0, s0 = index, []
3323
+ if (match_len = has_terminal?("//", false, index))
3324
+ r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3325
+ @index += match_len
3326
+ else
3327
+ terminal_parse_failure('"//"')
3328
+ r1 = nil
3329
+ end
3330
+ s0 << r1
3331
+ if r1
3332
+ s2, i2 = [], index
3333
+ loop do
3334
+ r3 = _nt_PCHAR
3335
+ if r3
3336
+ s2 << r3
3337
+ else
3338
+ break
3339
+ end
3340
+ end
3341
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3342
+ s0 << r2
3343
+ if r2
3344
+ r4 = _nt_CRLF
3345
+ s0 << r4
3346
+ end
3347
+ end
3348
+ if s0.last
3349
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3350
+ r0.extend(COMMENT0)
3351
+ else
3352
+ @index = i0
3353
+ r0 = nil
3354
+ end
3355
+
3356
+ node_cache[:COMMENT][start_index] = r0
3357
+
3358
+ r0
3359
+ end
3360
+
3361
+ def _nt_PCHAR
3362
+ start_index = index
3363
+ if node_cache[:PCHAR].has_key?(index)
3364
+ cached = node_cache[:PCHAR][index]
3365
+ if cached
3366
+ node_cache[:PCHAR][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3367
+ @index = cached.interval.end
3368
+ end
3369
+ return cached
3370
+ end
3371
+
3372
+ i0 = index
3373
+ if has_terminal?(@regexps[gr = '\A[\\ -~]'] ||= Regexp.new(gr), :regexp, index)
3374
+ r1 = true
3375
+ @index += 1
3376
+ else
3377
+ terminal_parse_failure('[\\ -~]')
3378
+ r1 = nil
3379
+ end
3380
+ if r1
3381
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3382
+ r0 = r1
3383
+ else
3384
+ if has_terminal?(@regexps[gr = '\A[€-􏿽]'] ||= Regexp.new(gr), :regexp, index)
3385
+ r2 = true
3386
+ @index += 1
3387
+ else
3388
+ terminal_parse_failure('[€-􏿽]')
3389
+ r2 = nil
3390
+ end
3391
+ if r2
3392
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3393
+ r0 = r2
3394
+ else
3395
+ @index = i0
3396
+ r0 = nil
3397
+ end
3398
+ end
3399
+
3400
+ node_cache[:PCHAR][start_index] = r0
3401
+
3402
+ r0
3403
+ end
3404
+
3405
+ def _nt_CRLF
3406
+ start_index = index
3407
+ if node_cache[:CRLF].has_key?(index)
3408
+ cached = node_cache[:CRLF][index]
3409
+ if cached
3410
+ node_cache[:CRLF][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3411
+ @index = cached.interval.end
3412
+ end
3413
+ return cached
3414
+ end
3415
+
3416
+ i0 = index
3417
+ if (match_len = has_terminal?("\n", false, index))
3418
+ r1 = true
3419
+ @index += match_len
3420
+ else
3421
+ terminal_parse_failure('"\\n"')
3422
+ r1 = nil
3423
+ end
3424
+ if r1
3425
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3426
+ r0 = r1
3427
+ else
3428
+ if (match_len = has_terminal?("\r\n", false, index))
3429
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3430
+ @index += match_len
3431
+ else
3432
+ terminal_parse_failure('"\\r\\n"')
3433
+ r2 = nil
3434
+ end
3435
+ if r2
3436
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3437
+ r0 = r2
3438
+ else
3439
+ @index = i0
3440
+ r0 = nil
3441
+ end
3442
+ end
3443
+
3444
+ node_cache[:CRLF][start_index] = r0
3445
+
3446
+ r0
3447
+ end
3448
+
3449
+ end
3450
+
3451
+ class CORALParser < Treetop::Runtime::CompiledParser
3452
+ include CORAL
3453
+ end
3454
+