edn-abnf 0.1.1 → 0.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7c6889b9d7aa6148fe54cb74e2594c0235b0fe1b6d07192b942d5690aa2b4e55
4
- data.tar.gz: 40a8707339bb46f5c984b292eff1ece51d0fcdb614feae79c224b83d4d9ffa1e
3
+ metadata.gz: 85b82b93fb1a2682e147c29fc1012e178c48f8eae6d60243a7d87abd82c15a3f
4
+ data.tar.gz: d87f8ca88bc659c58629540a5f7fdefab86c53b09662e64e0851dbaadb8525cd
5
5
  SHA512:
6
- metadata.gz: 9e1461595213030be64e5e778bceaf998cd105772948b51a9b3340feba463e3e6c2da6a68de1388eb9fab487b7f6d8b5d3b092b00704d67b77d15829f681266b
7
- data.tar.gz: 8485df1945d7989b762a6d9a94e1395a4228f4fc2126af2c0136af749c3d273d1e72af3d160f3862f8747c33e24411eb084f5fc852138f890f1afa34a2bc4171
6
+ metadata.gz: dc9cedb1fb36395595382a787268954d887bcf240a92379be884224dd383331750ebcbb3e97b6966364476cb26563357e9e15bc2f443936ee9d6cda6835ff77c
7
+ data.tar.gz: ae270987f189617657a5484824b44ef4468dfcd3911dc345492e0c2a56c9710af74086145fe55b5f4291c6373f5b0744a8c4ad4e637a426473a13866c189d042
data/bin/edn-abnf CHANGED
@@ -58,7 +58,7 @@ edn_file = $options.edn
58
58
  if $options.lines
59
59
  CSV.parse(edn_file) do |ok, edn, out|
60
60
  if ok[0] == "#"
61
- puts "# #{ok}, #{edn}, #{out}" if $options.verbose
61
+ puts "# #{ok}, #{edn.inspect}, #{out}" if $options.verbose
62
62
  next
63
63
  end
64
64
  begin
data/edn-abnf.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "edn-abnf"
3
- s.version = "0.1.1"
4
- s.summary = "CBOR Extended Diagnostic Notation implemented in ABNF"
3
+ s.version = "0.1.3"
4
+ s.summary = "CBOR Extended Diagnostic Notation (EDN) implemented in ABNF"
5
5
  s.description = %q{edn-abnf implements converters and miscellaneous tools for CBOR EDN's ABNF}
6
6
  s.author = "Carsten Bormann"
7
7
  s.email = "cabo@tzi.org"
@@ -8,7 +8,7 @@ class CBOR_DIAG::App_b64
8
8
  raise ArgumentError, "cbor-diagnostic: Parse Error in b64'#{s}':\n" << EDN.reason(parser, s)
9
9
  end
10
10
  # lazy -- not using parse tree...:
11
- t = s.gsub(/\s/, '').chars.each_slice(4).map(&:join)
11
+ t = s.gsub(/\s|#[^\n]*(?:\n|\z)/, '').chars.each_slice(4).map(&:join)
12
12
  if last = t[-1]
13
13
  last << "=" * (4 - last.size)
14
14
  end
@@ -60,6 +60,9 @@ module B64GRAMMAR
60
60
  end
61
61
 
62
62
  module AppStringB644
63
+ end
64
+
65
+ module AppStringB645
63
66
  def B
64
67
  elements[0]
65
68
  end
@@ -238,11 +241,48 @@ module B64GRAMMAR
238
241
  r7 = instantiate_node(SyntaxNode,input, index...index)
239
242
  end
240
243
  s0 << r7
244
+ if r7
245
+ i26, s26 = index, []
246
+ if (match_len = has_terminal?("#", false, index))
247
+ r27 = true
248
+ @index += match_len
249
+ else
250
+ terminal_parse_failure('"#"')
251
+ r27 = nil
252
+ end
253
+ s26 << r27
254
+ if r27
255
+ s28, i28 = [], index
256
+ loop do
257
+ r29 = _nt_inon_lf
258
+ if r29
259
+ s28 << r29
260
+ else
261
+ break
262
+ end
263
+ end
264
+ r28 = instantiate_node(SyntaxNode,input, i28...index, s28)
265
+ s26 << r28
266
+ end
267
+ if s26.last
268
+ r26 = instantiate_node(SyntaxNode,input, i26...index, s26)
269
+ r26.extend(AppStringB644)
270
+ else
271
+ @index = i26
272
+ r26 = nil
273
+ end
274
+ if r26
275
+ r25 = r26
276
+ else
277
+ r25 = instantiate_node(SyntaxNode,input, index...index)
278
+ end
279
+ s0 << r25
280
+ end
241
281
  end
242
282
  end
243
283
  if s0.last
244
284
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
245
- r0.extend(AppStringB644)
285
+ r0.extend(AppStringB645)
246
286
  else
247
287
  @index = i0
248
288
  r0 = nil
@@ -333,6 +373,16 @@ module B64GRAMMAR
333
373
  r0
334
374
  end
335
375
 
376
+ module B0
377
+ def icomment
378
+ elements[0]
379
+ end
380
+
381
+ end
382
+
383
+ module B1
384
+ end
385
+
336
386
  def _nt_B
337
387
  start_index = index
338
388
  if node_cache[:B].has_key?(index)
@@ -344,16 +394,60 @@ module B64GRAMMAR
344
394
  return cached
345
395
  end
346
396
 
347
- s0, i0 = [], index
397
+ i0, s0 = index, []
398
+ s1, i1 = [], index
348
399
  loop do
349
- r1 = _nt_iblank
350
- if r1
351
- s0 << r1
400
+ r2 = _nt_iblank
401
+ if r2
402
+ s1 << r2
352
403
  else
353
404
  break
354
405
  end
355
406
  end
356
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
407
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
408
+ s0 << r1
409
+ if r1
410
+ s3, i3 = [], index
411
+ loop do
412
+ i4, s4 = index, []
413
+ r5 = _nt_icomment
414
+ s4 << r5
415
+ if r5
416
+ s6, i6 = [], index
417
+ loop do
418
+ r7 = _nt_iblank
419
+ if r7
420
+ s6 << r7
421
+ else
422
+ break
423
+ end
424
+ end
425
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
426
+ s4 << r6
427
+ end
428
+ if s4.last
429
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
430
+ r4.extend(B0)
431
+ else
432
+ @index = i4
433
+ r4 = nil
434
+ end
435
+ if r4
436
+ s3 << r4
437
+ else
438
+ break
439
+ end
440
+ end
441
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
442
+ s0 << r3
443
+ end
444
+ if s0.last
445
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
446
+ r0.extend(B1)
447
+ else
448
+ @index = i0
449
+ r0 = nil
450
+ end
357
451
 
358
452
  node_cache[:B][start_index] = r0
359
453
 
@@ -404,26 +498,105 @@ module B64GRAMMAR
404
498
  r0
405
499
  end
406
500
 
407
- def _nt_lcalpha
501
+ module Icomment0
502
+ end
503
+
504
+ def _nt_icomment
408
505
  start_index = index
409
- if node_cache[:lcalpha].has_key?(index)
410
- cached = node_cache[:lcalpha][index]
506
+ if node_cache[:icomment].has_key?(index)
507
+ cached = node_cache[:icomment][index]
411
508
  if cached
412
- node_cache[:lcalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
509
+ node_cache[:icomment][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
413
510
  @index = cached.interval.end
414
511
  end
415
512
  return cached
416
513
  end
417
514
 
418
- if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
419
- r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
420
- @index += 1
515
+ i0, s0 = index, []
516
+ if (match_len = has_terminal?("#", false, index))
517
+ r1 = true
518
+ @index += match_len
519
+ else
520
+ terminal_parse_failure('"#"')
521
+ r1 = nil
522
+ end
523
+ s0 << r1
524
+ if r1
525
+ s2, i2 = [], index
526
+ loop do
527
+ r3 = _nt_inon_lf
528
+ if r3
529
+ s2 << r3
530
+ else
531
+ break
532
+ end
533
+ end
534
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
535
+ s0 << r2
536
+ if r2
537
+ if (match_len = has_terminal?("\n", false, index))
538
+ r4 = true
539
+ @index += match_len
540
+ else
541
+ terminal_parse_failure('"\\n"')
542
+ r4 = nil
543
+ end
544
+ s0 << r4
545
+ end
546
+ end
547
+ if s0.last
548
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
549
+ r0.extend(Icomment0)
421
550
  else
422
- terminal_parse_failure('[a-z]')
551
+ @index = i0
423
552
  r0 = nil
424
553
  end
425
554
 
426
- node_cache[:lcalpha][start_index] = r0
555
+ node_cache[:icomment][start_index] = r0
556
+
557
+ r0
558
+ end
559
+
560
+ def _nt_inon_lf
561
+ start_index = index
562
+ if node_cache[:inon_lf].has_key?(index)
563
+ cached = node_cache[:inon_lf][index]
564
+ if cached
565
+ node_cache[:inon_lf][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
566
+ @index = cached.interval.end
567
+ end
568
+ return cached
569
+ end
570
+
571
+ i0 = index
572
+ if has_terminal?(@regexps[gr = '\A[\\ -퟿]'] ||= Regexp.new(gr), :regexp, index)
573
+ r1 = true
574
+ @index += 1
575
+ else
576
+ terminal_parse_failure('[\\ -퟿]')
577
+ r1 = nil
578
+ end
579
+ if r1
580
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
581
+ r0 = r1
582
+ else
583
+ if has_terminal?(@regexps[gr = '\A[-􏿿]'] ||= Regexp.new(gr), :regexp, index)
584
+ r2 = true
585
+ @index += 1
586
+ else
587
+ terminal_parse_failure('[-􏿿]')
588
+ r2 = nil
589
+ end
590
+ if r2
591
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
592
+ r0 = r2
593
+ else
594
+ @index = i0
595
+ r0 = nil
596
+ end
597
+ end
598
+
599
+ node_cache[:inon_lf][start_index] = r0
427
600
 
428
601
  r0
429
602
  end
@@ -451,7 +624,13 @@ module B64GRAMMAR
451
624
  r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
452
625
  r0 = r1
453
626
  else
454
- r2 = _nt_lcalpha
627
+ if has_terminal?(@regexps[gr = '\A[a-z]'] ||= Regexp.new(gr), :regexp, index)
628
+ r2 = true
629
+ @index += 1
630
+ else
631
+ terminal_parse_failure('[a-z]')
632
+ r2 = nil
633
+ end
455
634
  if r2
456
635
  r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
457
636
  r0 = r2
@@ -48,13 +48,16 @@ module HGRAMMAR
48
48
  end
49
49
 
50
50
  module AppStringH4
51
+ end
52
+
53
+ module AppStringH5
51
54
  def S
52
55
  elements[0]
53
56
  end
54
57
 
55
58
  end
56
59
 
57
- module AppStringH5
60
+ module AppStringH6
58
61
  def unpack_thread(s)
59
62
  case s[0]
60
63
  when CBOR::Tagged
@@ -161,11 +164,48 @@ module HGRAMMAR
161
164
  end
162
165
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
163
166
  s0 << r2
167
+ if r2
168
+ i13, s13 = index, []
169
+ if (match_len = has_terminal?("#", false, index))
170
+ r14 = true
171
+ @index += match_len
172
+ else
173
+ terminal_parse_failure('"#"')
174
+ r14 = nil
175
+ end
176
+ s13 << r14
177
+ if r14
178
+ s15, i15 = [], index
179
+ loop do
180
+ r16 = _nt_non_lf
181
+ if r16
182
+ s15 << r16
183
+ else
184
+ break
185
+ end
186
+ end
187
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
188
+ s13 << r15
189
+ end
190
+ if s13.last
191
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
192
+ r13.extend(AppStringH4)
193
+ else
194
+ @index = i13
195
+ r13 = nil
196
+ end
197
+ if r13
198
+ r12 = r13
199
+ else
200
+ r12 = instantiate_node(SyntaxNode,input, index...index)
201
+ end
202
+ s0 << r12
203
+ end
164
204
  end
165
205
  if s0.last
166
206
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
167
- r0.extend(AppStringH4)
168
207
  r0.extend(AppStringH5)
208
+ r0.extend(AppStringH6)
169
209
  else
170
210
  @index = i0
171
211
  r0 = nil
@@ -222,73 +222,6 @@ module EDNGRAMMAR
222
222
  r0
223
223
  end
224
224
 
225
- module Number0
226
- def spec
227
- elements[1]
228
- end
229
- end
230
-
231
- module Number1
232
- def ast
233
- if ei = spec.text_value[1..-1]
234
- warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
235
- end
236
- elements[0].ast
237
- end
238
- end
239
-
240
- def _nt_number
241
- start_index = index
242
- if node_cache[:number].has_key?(index)
243
- cached = node_cache[:number][index]
244
- if cached
245
- node_cache[:number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
246
- @index = cached.interval.end
247
- end
248
- return cached
249
- end
250
-
251
- i0, s0 = index, []
252
- i1 = index
253
- r2 = _nt_basenumber
254
- if r2
255
- r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
256
- r1 = r2
257
- else
258
- r3 = _nt_decnumber
259
- if r3
260
- r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
261
- r1 = r3
262
- else
263
- r4 = _nt_infin
264
- if r4
265
- r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
266
- r1 = r4
267
- else
268
- @index = i1
269
- r1 = nil
270
- end
271
- end
272
- end
273
- s0 << r1
274
- if r1
275
- r5 = _nt_spec
276
- s0 << r5
277
- end
278
- if s0.last
279
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
280
- r0.extend(Number0)
281
- r0.extend(Number1)
282
- else
283
- @index = i0
284
- r0 = nil
285
- end
286
-
287
- node_cache[:number][start_index] = r0
288
-
289
- r0
290
- end
291
-
292
225
  module String10
293
226
  def spec
294
227
  elements[1]
@@ -522,6 +455,73 @@ module EDNGRAMMAR
522
455
  r0
523
456
  end
524
457
 
458
+ module Number0
459
+ def spec
460
+ elements[1]
461
+ end
462
+ end
463
+
464
+ module Number1
465
+ def ast
466
+ if ei = spec.text_value[1..-1]
467
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
468
+ end
469
+ elements[0].ast
470
+ end
471
+ end
472
+
473
+ def _nt_number
474
+ start_index = index
475
+ if node_cache[:number].has_key?(index)
476
+ cached = node_cache[:number][index]
477
+ if cached
478
+ node_cache[:number][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
479
+ @index = cached.interval.end
480
+ end
481
+ return cached
482
+ end
483
+
484
+ i0, s0 = index, []
485
+ i1 = index
486
+ r2 = _nt_basenumber
487
+ if r2
488
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
489
+ r1 = r2
490
+ else
491
+ r3 = _nt_decnumber
492
+ if r3
493
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
494
+ r1 = r3
495
+ else
496
+ r4 = _nt_infin
497
+ if r4
498
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
499
+ r1 = r4
500
+ else
501
+ @index = i1
502
+ r1 = nil
503
+ end
504
+ end
505
+ end
506
+ s0 << r1
507
+ if r1
508
+ r5 = _nt_spec
509
+ s0 << r5
510
+ end
511
+ if s0.last
512
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
513
+ r0.extend(Number0)
514
+ r0.extend(Number1)
515
+ else
516
+ @index = i0
517
+ r0 = nil
518
+ end
519
+
520
+ node_cache[:number][start_index] = r0
521
+
522
+ r0
523
+ end
524
+
525
525
  def _nt_sign
526
526
  start_index = index
527
527
  if node_cache[:sign].has_key?(index)
@@ -3251,10 +3251,20 @@ module EDNGRAMMAR
3251
3251
  end
3252
3252
 
3253
3253
  module Hexchar0
3254
- def ast; hex_value.chr(Encoding::UTF_8) end
3255
3254
  end
3256
3255
 
3257
3256
  module Hexchar1
3257
+ end
3258
+
3259
+ module Hexchar2
3260
+ def ast; elements[1].hex_value.chr(Encoding::UTF_8) end
3261
+ end
3262
+
3263
+ module Hexchar3
3264
+ def ast; hex_value.chr(Encoding::UTF_8) end
3265
+ end
3266
+
3267
+ module Hexchar4
3258
3268
  def high_surrogate
3259
3269
  elements[0]
3260
3270
  end
@@ -3264,7 +3274,7 @@ module EDNGRAMMAR
3264
3274
  end
3265
3275
  end
3266
3276
 
3267
- module Hexchar2
3277
+ module Hexchar5
3268
3278
  def ast
3269
3279
  ((high_surrogate.ast << 10) + low_surrogate.ast + 0x10000).chr(Encoding::UTF_8)
3270
3280
  end
@@ -3282,54 +3292,142 @@ module EDNGRAMMAR
3282
3292
  end
3283
3293
 
3284
3294
  i0 = index
3285
- r1 = _nt_non_surrogate
3286
- r1.extend(Hexchar0)
3287
- r1.extend(Hexchar0)
3288
- if r1
3289
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3290
- r0 = r1
3295
+ i1, s1 = index, []
3296
+ if (match_len = has_terminal?("{", false, index))
3297
+ r2 = true
3298
+ @index += match_len
3291
3299
  else
3292
- i2, s2 = index, []
3293
- r3 = _nt_high_surrogate
3294
- s2 << r3
3300
+ terminal_parse_failure('"{"')
3301
+ r2 = nil
3302
+ end
3303
+ s1 << r2
3304
+ if r2
3305
+ i3 = index
3306
+ i4, s4 = index, []
3307
+ s5, i5 = [], index
3308
+ loop do
3309
+ if (match_len = has_terminal?("0", false, index))
3310
+ r6 = true
3311
+ @index += match_len
3312
+ else
3313
+ terminal_parse_failure('"0"')
3314
+ r6 = nil
3315
+ end
3316
+ if r6
3317
+ s5 << r6
3318
+ else
3319
+ break
3320
+ end
3321
+ end
3322
+ if s5.empty?
3323
+ @index = i5
3324
+ r5 = nil
3325
+ else
3326
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3327
+ end
3328
+ s4 << r5
3329
+ if r5
3330
+ r8 = _nt_hexscalar
3331
+ if r8
3332
+ r7 = r8
3333
+ else
3334
+ r7 = instantiate_node(SyntaxNode,input, index...index)
3335
+ end
3336
+ s4 << r7
3337
+ end
3338
+ if s4.last
3339
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
3340
+ r4.extend(Hexchar0)
3341
+ else
3342
+ @index = i4
3343
+ r4 = nil
3344
+ end
3345
+ if r4
3346
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
3347
+ r3 = r4
3348
+ else
3349
+ r9 = _nt_hexscalar
3350
+ if r9
3351
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
3352
+ r3 = r9
3353
+ else
3354
+ @index = i3
3355
+ r3 = nil
3356
+ end
3357
+ end
3358
+ s1 << r3
3295
3359
  if r3
3296
- if (match_len = has_terminal?("\\", false, index))
3297
- r4 = true
3360
+ if (match_len = has_terminal?("}", false, index))
3361
+ r10 = true
3298
3362
  @index += match_len
3299
3363
  else
3300
- terminal_parse_failure('"\\\\"')
3301
- r4 = nil
3364
+ terminal_parse_failure('"}"')
3365
+ r10 = nil
3302
3366
  end
3303
- s2 << r4
3304
- if r4
3305
- if (match_len = has_terminal?("u", false, index))
3306
- r5 = true
3367
+ s1 << r10
3368
+ end
3369
+ end
3370
+ if s1.last
3371
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3372
+ r1.extend(Hexchar1)
3373
+ r1.extend(Hexchar2)
3374
+ else
3375
+ @index = i1
3376
+ r1 = nil
3377
+ end
3378
+ if r1
3379
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3380
+ r0 = r1
3381
+ else
3382
+ r11 = _nt_non_surrogate
3383
+ r11.extend(Hexchar3)
3384
+ r11.extend(Hexchar3)
3385
+ if r11
3386
+ r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
3387
+ r0 = r11
3388
+ else
3389
+ i12, s12 = index, []
3390
+ r13 = _nt_high_surrogate
3391
+ s12 << r13
3392
+ if r13
3393
+ if (match_len = has_terminal?("\\", false, index))
3394
+ r14 = true
3307
3395
  @index += match_len
3308
3396
  else
3309
- terminal_parse_failure('"u"')
3310
- r5 = nil
3397
+ terminal_parse_failure('"\\\\"')
3398
+ r14 = nil
3311
3399
  end
3312
- s2 << r5
3313
- if r5
3314
- r6 = _nt_low_surrogate
3315
- s2 << r6
3400
+ s12 << r14
3401
+ if r14
3402
+ if (match_len = has_terminal?("u", false, index))
3403
+ r15 = true
3404
+ @index += match_len
3405
+ else
3406
+ terminal_parse_failure('"u"')
3407
+ r15 = nil
3408
+ end
3409
+ s12 << r15
3410
+ if r15
3411
+ r16 = _nt_low_surrogate
3412
+ s12 << r16
3413
+ end
3316
3414
  end
3317
3415
  end
3318
- end
3319
- if s2.last
3320
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3321
- r2.extend(Hexchar1)
3322
- r2.extend(Hexchar2)
3323
- else
3324
- @index = i2
3325
- r2 = nil
3326
- end
3327
- if r2
3328
- r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3329
- r0 = r2
3330
- else
3331
- @index = i0
3332
- r0 = nil
3416
+ if s12.last
3417
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
3418
+ r12.extend(Hexchar4)
3419
+ r12.extend(Hexchar5)
3420
+ else
3421
+ @index = i12
3422
+ r12 = nil
3423
+ end
3424
+ if r12
3425
+ r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true
3426
+ r0 = r12
3427
+ else
3428
+ @index = i0
3429
+ r0 = nil
3430
+ end
3333
3431
  end
3334
3432
  end
3335
3433
 
@@ -3762,6 +3860,152 @@ module EDNGRAMMAR
3762
3860
  r0
3763
3861
  end
3764
3862
 
3863
+ module Hexscalar0
3864
+ end
3865
+
3866
+ module Hexscalar1
3867
+ def HEXDIG1
3868
+ elements[0]
3869
+ end
3870
+
3871
+ end
3872
+
3873
+ def _nt_hexscalar
3874
+ start_index = index
3875
+ if node_cache[:hexscalar].has_key?(index)
3876
+ cached = node_cache[:hexscalar][index]
3877
+ if cached
3878
+ node_cache[:hexscalar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3879
+ @index = cached.interval.end
3880
+ end
3881
+ return cached
3882
+ end
3883
+
3884
+ i0 = index
3885
+ i1, s1 = index, []
3886
+ if (match_len = has_terminal?("10", false, index))
3887
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
3888
+ @index += match_len
3889
+ else
3890
+ terminal_parse_failure('"10"')
3891
+ r2 = nil
3892
+ end
3893
+ s1 << r2
3894
+ if r2
3895
+ s3, i3 = [], index
3896
+ loop do
3897
+ r4 = _nt_HEXDIG
3898
+ if r4
3899
+ s3 << r4
3900
+ else
3901
+ break
3902
+ end
3903
+ if s3.size == 4
3904
+ break
3905
+ end
3906
+ end
3907
+ if s3.size < 4
3908
+ @index = i3
3909
+ r3 = nil
3910
+ else
3911
+ if s3.size < 4
3912
+ @terminal_failures.pop
3913
+ end
3914
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3915
+ end
3916
+ s1 << r3
3917
+ end
3918
+ if s1.last
3919
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3920
+ r1.extend(Hexscalar0)
3921
+ else
3922
+ @index = i1
3923
+ r1 = nil
3924
+ end
3925
+ if r1
3926
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3927
+ r0 = r1
3928
+ else
3929
+ i5, s5 = index, []
3930
+ r6 = _nt_HEXDIG1
3931
+ s5 << r6
3932
+ if r6
3933
+ s7, i7 = [], index
3934
+ loop do
3935
+ r8 = _nt_HEXDIG
3936
+ if r8
3937
+ s7 << r8
3938
+ else
3939
+ break
3940
+ end
3941
+ if s7.size == 4
3942
+ break
3943
+ end
3944
+ end
3945
+ if s7.size < 4
3946
+ @index = i7
3947
+ r7 = nil
3948
+ else
3949
+ if s7.size < 4
3950
+ @terminal_failures.pop
3951
+ end
3952
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3953
+ end
3954
+ s5 << r7
3955
+ end
3956
+ if s5.last
3957
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3958
+ r5.extend(Hexscalar1)
3959
+ else
3960
+ @index = i5
3961
+ r5 = nil
3962
+ end
3963
+ if r5
3964
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
3965
+ r0 = r5
3966
+ else
3967
+ r9 = _nt_non_surrogate
3968
+ if r9
3969
+ r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
3970
+ r0 = r9
3971
+ else
3972
+ s10, i10 = [], index
3973
+ loop do
3974
+ r11 = _nt_HEXDIG
3975
+ if r11
3976
+ s10 << r11
3977
+ else
3978
+ break
3979
+ end
3980
+ if s10.size == 3
3981
+ break
3982
+ end
3983
+ end
3984
+ if s10.size < 1
3985
+ @index = i10
3986
+ r10 = nil
3987
+ else
3988
+ if s10.size < 3
3989
+ @terminal_failures.pop
3990
+ end
3991
+ r10 = instantiate_node(SyntaxNode,input, i10...index, s10)
3992
+ end
3993
+ if r10
3994
+ r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
3995
+ r0 = r10
3996
+ else
3997
+ @index = i0
3998
+ r0 = nil
3999
+ end
4000
+ end
4001
+ end
4002
+ end
4003
+
4004
+ node_cache[:hexscalar][start_index] = r0
4005
+
4006
+ r0
4007
+ end
4008
+
3765
4009
  def _nt_unescaped
3766
4010
  start_index = index
3767
4011
  if node_cache[:unescaped].has_key?(index)
@@ -4084,6 +4328,104 @@ module EDNGRAMMAR
4084
4328
  r0
4085
4329
  end
4086
4330
 
4331
+ def _nt_HEXDIG1
4332
+ start_index = index
4333
+ if node_cache[:HEXDIG1].has_key?(index)
4334
+ cached = node_cache[:HEXDIG1][index]
4335
+ if cached
4336
+ node_cache[:HEXDIG1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4337
+ @index = cached.interval.end
4338
+ end
4339
+ return cached
4340
+ end
4341
+
4342
+ i0 = index
4343
+ r1 = _nt_DIGIT1
4344
+ if r1
4345
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4346
+ r0 = r1
4347
+ else
4348
+ if (match_len = has_terminal?("a", :insens, index))
4349
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4350
+ @index += match_len
4351
+ else
4352
+ terminal_parse_failure('"A"')
4353
+ r2 = nil
4354
+ end
4355
+ if r2
4356
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4357
+ r0 = r2
4358
+ else
4359
+ if (match_len = has_terminal?("b", :insens, index))
4360
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4361
+ @index += match_len
4362
+ else
4363
+ terminal_parse_failure('"B"')
4364
+ r3 = nil
4365
+ end
4366
+ if r3
4367
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
4368
+ r0 = r3
4369
+ else
4370
+ if (match_len = has_terminal?("c", :insens, index))
4371
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4372
+ @index += match_len
4373
+ else
4374
+ terminal_parse_failure('"C"')
4375
+ r4 = nil
4376
+ end
4377
+ if r4
4378
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
4379
+ r0 = r4
4380
+ else
4381
+ if (match_len = has_terminal?("d", :insens, index))
4382
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4383
+ @index += match_len
4384
+ else
4385
+ terminal_parse_failure('"D"')
4386
+ r5 = nil
4387
+ end
4388
+ if r5
4389
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
4390
+ r0 = r5
4391
+ else
4392
+ if (match_len = has_terminal?("e", :insens, index))
4393
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4394
+ @index += match_len
4395
+ else
4396
+ terminal_parse_failure('"E"')
4397
+ r6 = nil
4398
+ end
4399
+ if r6
4400
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
4401
+ r0 = r6
4402
+ else
4403
+ if (match_len = has_terminal?("f", :insens, index))
4404
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
4405
+ @index += match_len
4406
+ else
4407
+ terminal_parse_failure('"F"')
4408
+ r7 = nil
4409
+ end
4410
+ if r7
4411
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
4412
+ r0 = r7
4413
+ else
4414
+ @index = i0
4415
+ r0 = nil
4416
+ end
4417
+ end
4418
+ end
4419
+ end
4420
+ end
4421
+ end
4422
+ end
4423
+
4424
+ node_cache[:HEXDIG1][start_index] = r0
4425
+
4426
+ r0
4427
+ end
4428
+
4087
4429
  def _nt_lcalpha
4088
4430
  start_index = index
4089
4431
  if node_cache[:lcalpha].has_key?(index)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edn-abnf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-16 00:00:00.000000000 Z
11
+ date: 2024-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -125,5 +125,5 @@ requirements: []
125
125
  rubygems_version: 3.4.10
126
126
  signing_key:
127
127
  specification_version: 4
128
- summary: CBOR Extended Diagnostic Notation implemented in ABNF
128
+ summary: CBOR Extended Diagnostic Notation (EDN) implemented in ABNF
129
129
  test_files: []