edn-abnf 0.0.10 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,5 +19,6 @@ end
19
19
 
20
20
 
21
21
  require 'cbor-diagnostic-app/dt'
22
+ require 'cbor-diagnostic-app/ip'
22
23
  require 'cbor-diagnostic-app/h'
23
24
  require 'cbor-diagnostic-app/b64'
@@ -289,13 +289,13 @@ module EDNGRAMMAR
289
289
  r0
290
290
  end
291
291
 
292
- module String0
292
+ module String10
293
293
  def spec
294
294
  elements[1]
295
295
  end
296
296
  end
297
297
 
298
- module String1
298
+ module String11
299
299
  def ast
300
300
  if ei = spec.text_value[1..-1]
301
301
  warn "*** ignoring unimplemented encoding indicator #{ei.inspect} for #{elements[0].text_value}"
@@ -304,12 +304,12 @@ module EDNGRAMMAR
304
304
  end
305
305
  end
306
306
 
307
- def _nt_string
307
+ def _nt_string1
308
308
  start_index = index
309
- if node_cache[:string].has_key?(index)
310
- cached = node_cache[:string][index]
309
+ if node_cache[:string1].has_key?(index)
310
+ cached = node_cache[:string1][index]
311
311
  if cached
312
- node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
312
+ node_cache[:string1][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
313
313
  @index = cached.interval.end
314
314
  end
315
315
  return cached
@@ -338,8 +338,180 @@ module EDNGRAMMAR
338
338
  end
339
339
  if s0.last
340
340
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
341
- r0.extend(String0)
341
+ r0.extend(String10)
342
+ r0.extend(String11)
343
+ else
344
+ @index = i0
345
+ r0 = nil
346
+ end
347
+
348
+ node_cache[:string1][start_index] = r0
349
+
350
+ r0
351
+ end
352
+
353
+ def _nt_string1e
354
+ start_index = index
355
+ if node_cache[:string1e].has_key?(index)
356
+ cached = node_cache[:string1e][index]
357
+ if cached
358
+ node_cache[:string1e][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
359
+ @index = cached.interval.end
360
+ end
361
+ return cached
362
+ end
363
+
364
+ i0 = index
365
+ r1 = _nt_string1
366
+ if r1
367
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
368
+ r0 = r1
369
+ else
370
+ r2 = _nt_ellipsis
371
+ if r2
372
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
373
+ r0 = r2
374
+ else
375
+ @index = i0
376
+ r0 = nil
377
+ end
378
+ end
379
+
380
+ node_cache[:string1e][start_index] = r0
381
+
382
+ r0
383
+ end
384
+
385
+ module Ellipsis0
386
+ def ast; CBOR::Tagged.new(888, nil) end
387
+ end
388
+
389
+ def _nt_ellipsis
390
+ start_index = index
391
+ if node_cache[:ellipsis].has_key?(index)
392
+ cached = node_cache[:ellipsis][index]
393
+ if cached
394
+ node_cache[:ellipsis][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
395
+ @index = cached.interval.end
396
+ end
397
+ return cached
398
+ end
399
+
400
+ s0, i0 = [], index
401
+ loop do
402
+ if (match_len = has_terminal?(".", false, index))
403
+ r1 = true
404
+ @index += match_len
405
+ else
406
+ terminal_parse_failure('"."')
407
+ r1 = nil
408
+ end
409
+ if r1
410
+ s0 << r1
411
+ else
412
+ break
413
+ end
414
+ end
415
+ if s0.size < 3
416
+ @index = i0
417
+ r0 = nil
418
+ else
419
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
420
+ r0.extend(Ellipsis0)
421
+ r0.extend(Ellipsis0)
422
+ end
423
+
424
+ node_cache[:ellipsis][start_index] = r0
425
+
426
+ r0
427
+ end
428
+
429
+ module String0
430
+ def S
431
+ elements[0]
432
+ end
433
+
434
+ def string1e
435
+ elements[1]
436
+ end
437
+ end
438
+
439
+ module String1
440
+ def string1e
441
+ elements[0]
442
+ end
443
+
444
+ end
445
+
446
+ module String2
447
+ def join1(s)
448
+ s.join # XXX -- look at encoding and ei
449
+ end
450
+ def unpack_chunk(c, s)
451
+ if c == String
452
+ join1(s)
453
+ else
454
+ unless c == CBOR::Tagged && s.first.tag == 888 && s.first.value == nil # XXX check all values?
455
+ raise "*** unjoinable chunks #{c.inspect} #{s.inspect}" if s.size != 1
456
+ end
457
+ s.first
458
+ end
459
+ end
460
+ def ast
461
+ arr = [elements[0].ast] + elements[1].elements.map {|x| x.elements[1].ast}
462
+ charr = arr.chunk(&:class).to_a
463
+ if charr.size == 1
464
+ unpack_chunk(*charr.first)
465
+ else
466
+ CBOR::Tagged.new(888, charr.map {|x| unpack_chunk(*x)})
467
+ end
468
+ end
469
+ end
470
+
471
+ def _nt_string
472
+ start_index = index
473
+ if node_cache[:string].has_key?(index)
474
+ cached = node_cache[:string][index]
475
+ if cached
476
+ node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
477
+ @index = cached.interval.end
478
+ end
479
+ return cached
480
+ end
481
+
482
+ i0, s0 = index, []
483
+ r1 = _nt_string1e
484
+ s0 << r1
485
+ if r1
486
+ s2, i2 = [], index
487
+ loop do
488
+ i3, s3 = index, []
489
+ r4 = _nt_S
490
+ s3 << r4
491
+ if r4
492
+ r5 = _nt_string1e
493
+ s3 << r5
494
+ end
495
+ if s3.last
496
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
497
+ r3.extend(String0)
498
+ else
499
+ @index = i3
500
+ r3 = nil
501
+ end
502
+ if r3
503
+ s2 << r3
504
+ else
505
+ break
506
+ end
507
+ end
508
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
509
+ s0 << r2
510
+ end
511
+ if s0.last
512
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
342
513
  r0.extend(String1)
514
+ r0.extend(String2)
343
515
  else
344
516
  @index = i0
345
517
  r0 = nil
@@ -1228,6 +1400,13 @@ module EDNGRAMMAR
1228
1400
 
1229
1401
  end
1230
1402
 
1403
+ module AppPrefix1
1404
+ def ucalpha
1405
+ elements[0]
1406
+ end
1407
+
1408
+ end
1409
+
1231
1410
  def _nt_app_prefix
1232
1411
  start_index = index
1233
1412
  if node_cache[:app_prefix].has_key?(index)
@@ -1239,28 +1418,64 @@ module EDNGRAMMAR
1239
1418
  return cached
1240
1419
  end
1241
1420
 
1242
- i0, s0 = index, []
1243
- r1 = _nt_lcalpha
1244
- s0 << r1
1245
- if r1
1246
- s2, i2 = [], index
1421
+ i0 = index
1422
+ i1, s1 = index, []
1423
+ r2 = _nt_lcalpha
1424
+ s1 << r2
1425
+ if r2
1426
+ s3, i3 = [], index
1247
1427
  loop do
1248
- r3 = _nt_lcalnum
1249
- if r3
1250
- s2 << r3
1428
+ r4 = _nt_lcalnum
1429
+ if r4
1430
+ s3 << r4
1251
1431
  else
1252
1432
  break
1253
1433
  end
1254
1434
  end
1255
- r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1256
- s0 << r2
1435
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1436
+ s1 << r3
1257
1437
  end
1258
- if s0.last
1259
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1260
- r0.extend(AppPrefix0)
1438
+ if s1.last
1439
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1440
+ r1.extend(AppPrefix0)
1261
1441
  else
1262
- @index = i0
1263
- r0 = nil
1442
+ @index = i1
1443
+ r1 = nil
1444
+ end
1445
+ if r1
1446
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
1447
+ r0 = r1
1448
+ else
1449
+ i5, s5 = index, []
1450
+ r6 = _nt_ucalpha
1451
+ s5 << r6
1452
+ if r6
1453
+ s7, i7 = [], index
1454
+ loop do
1455
+ r8 = _nt_ucalnum
1456
+ if r8
1457
+ s7 << r8
1458
+ else
1459
+ break
1460
+ end
1461
+ end
1462
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
1463
+ s5 << r7
1464
+ end
1465
+ if s5.last
1466
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1467
+ r5.extend(AppPrefix1)
1468
+ else
1469
+ @index = i5
1470
+ r5 = nil
1471
+ end
1472
+ if r5
1473
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
1474
+ r0 = r5
1475
+ else
1476
+ @index = i0
1477
+ r0 = nil
1478
+ end
1264
1479
  end
1265
1480
 
1266
1481
  node_cache[:app_prefix][start_index] = r0
@@ -1284,7 +1499,8 @@ module EDNGRAMMAR
1284
1499
  app = app_prefix.text_value
1285
1500
  # Find a better place to put a default initialization
1286
1501
  EDNGRAMMAR.const_set(:APPS, Hash.new { |h, k|
1287
- h[k] = begin ::CBOR_DIAG.const_get("App_#{app}")
1502
+ h[k] = begin ::CBOR_DIAG.const_get("App_#{app.downcase}")
1503
+
1288
1504
  rescue NameError
1289
1505
  raise ArgumentError, "cbor-diagnostic: Unknown application-oriented extension '#{k}'", caller
1290
1506
  end
@@ -3924,6 +4140,62 @@ module EDNGRAMMAR
3924
4140
  r0
3925
4141
  end
3926
4142
 
4143
+ def _nt_ucalpha
4144
+ start_index = index
4145
+ if node_cache[:ucalpha].has_key?(index)
4146
+ cached = node_cache[:ucalpha][index]
4147
+ if cached
4148
+ node_cache[:ucalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4149
+ @index = cached.interval.end
4150
+ end
4151
+ return cached
4152
+ end
4153
+
4154
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
4155
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
4156
+ @index += 1
4157
+ else
4158
+ terminal_parse_failure('[A-Z]')
4159
+ r0 = nil
4160
+ end
4161
+
4162
+ node_cache[:ucalpha][start_index] = r0
4163
+
4164
+ r0
4165
+ end
4166
+
4167
+ def _nt_ucalnum
4168
+ start_index = index
4169
+ if node_cache[:ucalnum].has_key?(index)
4170
+ cached = node_cache[:ucalnum][index]
4171
+ if cached
4172
+ node_cache[:ucalnum][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
4173
+ @index = cached.interval.end
4174
+ end
4175
+ return cached
4176
+ end
4177
+
4178
+ i0 = index
4179
+ r1 = _nt_ucalpha
4180
+ if r1
4181
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
4182
+ r0 = r1
4183
+ else
4184
+ r2 = _nt_DIGIT
4185
+ if r2
4186
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
4187
+ r0 = r2
4188
+ else
4189
+ @index = i0
4190
+ r0 = nil
4191
+ end
4192
+ end
4193
+
4194
+ node_cache[:ucalnum][start_index] = r0
4195
+
4196
+ r0
4197
+ end
4198
+
3927
4199
  def _nt_wordchar
3928
4200
  start_index = index
3929
4201
  if node_cache[:wordchar].has_key?(index)
@@ -3952,13 +4224,7 @@ module EDNGRAMMAR
3952
4224
  r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3953
4225
  r0 = r2
3954
4226
  else
3955
- if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
3956
- r3 = true
3957
- @index += 1
3958
- else
3959
- terminal_parse_failure('[A-Z]')
3960
- r3 = nil
3961
- end
4227
+ r3 = _nt_ucalpha
3962
4228
  if r3
3963
4229
  r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3964
4230
  r0 = r3
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.0.10
4
+ version: 0.0.12
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-12 00:00:00.000000000 Z
11
+ date: 2023-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,8 +94,12 @@ files:
94
94
  - edn-abnf.gemspec
95
95
  - lib/cbor-diagnostic-app/b64.rb
96
96
  - lib/cbor-diagnostic-app/b64grammar.rb
97
+ - lib/cbor-diagnostic-app/dt.rb
98
+ - lib/cbor-diagnostic-app/dtgrammar.rb
97
99
  - lib/cbor-diagnostic-app/h.rb
98
100
  - lib/cbor-diagnostic-app/hgrammar.rb
101
+ - lib/cbor-diagnostic-app/ip.rb
102
+ - lib/cbor-diagnostic-app/ipgrammar.rb
99
103
  - lib/edn-abnf.rb
100
104
  - lib/parser/edn-util.rb
101
105
  - lib/parser/edngrammar.rb