coral0 0.1.0

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.
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
+