edn-abnf 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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: []