edn-abnf 0.0.7 → 0.0.8

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: 65315f840b92a39b734580ff2050ff4e92329048046c9d24ed1d1246858ae8fd
4
- data.tar.gz: 1949f58b8fe44914999cc91a78c14f87d28865cd753d749c0752333448d676a2
3
+ metadata.gz: ad6ca6781c8f1fab8f4be83db41604619f4a38049b13e934f4eea8ab3a2fe757
4
+ data.tar.gz: b8d503680fffa8e5a81232ce301026f9780df6c35aaec80598549fd81fea63ab
5
5
  SHA512:
6
- metadata.gz: 9a559663ff8b81dcccecb561c8226dc5184276f119e08b23195578ead701a92fc1068e7067416a352c41596bbe733f503df7c554dbcb13ba36541da2661f4fd9
7
- data.tar.gz: 6429e1496befd64f71a17e933132c39bfb960e342d40d8616ee4f272d47feafef1f9d5323e075a02007a854990c23e1881e691851cca8545a51a069d10cde171
6
+ metadata.gz: 50ad3b1462112822df91e51617ef5dc0ba704e896be060562d6a42cd6c7f67980121b250ccfd080f11be9f51e406c005b1e37133f41156d1684ba13f07c80e78
7
+ data.tar.gz: 28d52a6d4f5b1e55b85d4cc8534341de042834fb36bb5b6962609332ead01bd66629fc664d4e88adcc0eb6b74948d357be979c4b5266524b61af44a6feee26c4
data/edn-abnf.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "edn-abnf"
3
- s.version = "0.0.7"
3
+ s.version = "0.0.8"
4
4
  s.summary = "CDDL (Concise Data Definition Language) converters and miscellaneous tools"
5
5
  s.description = %q{edn-abnf implements converters and miscellaneous tools for CBOR EDN's ABNF}
6
6
  s.author = "Carsten Bormann"
@@ -187,52 +187,28 @@ module EDNGRAMMAR
187
187
  r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
188
188
  r0 = r3
189
189
  else
190
- r4 = _nt_basenumber
190
+ r4 = _nt_number
191
191
  if r4
192
192
  r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
193
193
  r0 = r4
194
194
  else
195
- r5 = _nt_decnumber
195
+ r5 = _nt_simple
196
196
  if r5
197
197
  r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
198
198
  r0 = r5
199
199
  else
200
- r6 = _nt_infin
200
+ r6 = _nt_string
201
201
  if r6
202
202
  r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
203
203
  r0 = r6
204
204
  else
205
- r7 = _nt_simple
205
+ r7 = _nt_streamstring
206
206
  if r7
207
207
  r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
208
208
  r0 = r7
209
209
  else
210
- r8 = _nt_tstr
211
- if r8
212
- r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true
213
- r0 = r8
214
- else
215
- r9 = _nt_bstr
216
- if r9
217
- r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true
218
- r0 = r9
219
- else
220
- r10 = _nt_embedded
221
- if r10
222
- r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
223
- r0 = r10
224
- else
225
- r11 = _nt_streamstring
226
- if r11
227
- r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
228
- r0 = r11
229
- else
230
- @index = i0
231
- r0 = nil
232
- end
233
- end
234
- end
235
- end
210
+ @index = i0
211
+ r0 = nil
236
212
  end
237
213
  end
238
214
  end
@@ -246,6 +222,128 @@ module EDNGRAMMAR
246
222
  r0
247
223
  end
248
224
 
225
+ module Number0
226
+ def spec
227
+ elements[1]
228
+ end
229
+ end
230
+
231
+ module Number1
232
+ def ast
233
+ elements[0].ast
234
+ end
235
+ end
236
+
237
+ def _nt_number
238
+ start_index = index
239
+ if node_cache[:number].has_key?(index)
240
+ cached = node_cache[:number][index]
241
+ if cached
242
+ node_cache[:number][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
+ i0, s0 = index, []
249
+ i1 = index
250
+ r2 = _nt_basenumber
251
+ if r2
252
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
253
+ r1 = r2
254
+ else
255
+ r3 = _nt_decnumber
256
+ if r3
257
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
258
+ r1 = r3
259
+ else
260
+ r4 = _nt_infin
261
+ if r4
262
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
263
+ r1 = r4
264
+ else
265
+ @index = i1
266
+ r1 = nil
267
+ end
268
+ end
269
+ end
270
+ s0 << r1
271
+ if r1
272
+ r5 = _nt_spec
273
+ s0 << r5
274
+ end
275
+ if s0.last
276
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
277
+ r0.extend(Number0)
278
+ r0.extend(Number1)
279
+ else
280
+ @index = i0
281
+ r0 = nil
282
+ end
283
+
284
+ node_cache[:number][start_index] = r0
285
+
286
+ r0
287
+ end
288
+
289
+ module String0
290
+ def spec
291
+ elements[1]
292
+ end
293
+ end
294
+
295
+ module String1
296
+ def ast
297
+ elements[0].ast
298
+ end
299
+ end
300
+
301
+ def _nt_string
302
+ start_index = index
303
+ if node_cache[:string].has_key?(index)
304
+ cached = node_cache[:string][index]
305
+ if cached
306
+ node_cache[:string][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
307
+ @index = cached.interval.end
308
+ end
309
+ return cached
310
+ end
311
+
312
+ i0, s0 = index, []
313
+ i1 = index
314
+ r2 = _nt_tstr
315
+ if r2
316
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
317
+ r1 = r2
318
+ else
319
+ r3 = _nt_bstr
320
+ if r3
321
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
322
+ r1 = r3
323
+ else
324
+ @index = i1
325
+ r1 = nil
326
+ end
327
+ end
328
+ s0 << r1
329
+ if r1
330
+ r4 = _nt_spec
331
+ s0 << r4
332
+ end
333
+ if s0.last
334
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
335
+ r0.extend(String0)
336
+ r0.extend(String1)
337
+ else
338
+ @index = i0
339
+ r0 = nil
340
+ end
341
+
342
+ node_cache[:string][start_index] = r0
343
+
344
+ r0
345
+ end
346
+
249
347
  def _nt_sign
250
348
  start_index = index
251
349
  if node_cache[:sign].has_key?(index)
@@ -1026,16 +1124,20 @@ module EDNGRAMMAR
1026
1124
  elements[0]
1027
1125
  end
1028
1126
 
1127
+ def spec
1128
+ elements[1]
1129
+ end
1130
+
1029
1131
  def S1
1030
- elements[2]
1132
+ elements[3]
1031
1133
  end
1032
1134
 
1033
1135
  def item
1034
- elements[3]
1136
+ elements[4]
1035
1137
  end
1036
1138
 
1037
1139
  def S2
1038
- elements[4]
1140
+ elements[5]
1039
1141
  end
1040
1142
 
1041
1143
  end
@@ -1061,32 +1163,36 @@ module EDNGRAMMAR
1061
1163
  r1 = _nt_uint
1062
1164
  s0 << r1
1063
1165
  if r1
1064
- if (match_len = has_terminal?("(", false, index))
1065
- r2 = true
1066
- @index += match_len
1067
- else
1068
- terminal_parse_failure('"("')
1069
- r2 = nil
1070
- end
1166
+ r2 = _nt_spec
1071
1167
  s0 << r2
1072
1168
  if r2
1073
- r3 = _nt_S
1169
+ if (match_len = has_terminal?("(", false, index))
1170
+ r3 = true
1171
+ @index += match_len
1172
+ else
1173
+ terminal_parse_failure('"("')
1174
+ r3 = nil
1175
+ end
1074
1176
  s0 << r3
1075
1177
  if r3
1076
- r4 = _nt_item
1178
+ r4 = _nt_S
1077
1179
  s0 << r4
1078
1180
  if r4
1079
- r5 = _nt_S
1181
+ r5 = _nt_item
1080
1182
  s0 << r5
1081
1183
  if r5
1082
- if (match_len = has_terminal?(")", false, index))
1083
- r6 = true
1084
- @index += match_len
1085
- else
1086
- terminal_parse_failure('")"')
1087
- r6 = nil
1088
- end
1184
+ r6 = _nt_S
1089
1185
  s0 << r6
1186
+ if r6
1187
+ if (match_len = has_terminal?(")", false, index))
1188
+ r7 = true
1189
+ @index += match_len
1190
+ else
1191
+ terminal_parse_failure('")"')
1192
+ r7 = nil
1193
+ end
1194
+ s0 << r7
1195
+ end
1090
1196
  end
1091
1197
  end
1092
1198
  end
@@ -1298,8 +1404,14 @@ module EDNGRAMMAR
1298
1404
  r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
1299
1405
  r0 = r2
1300
1406
  else
1301
- @index = i0
1302
- r0 = nil
1407
+ r3 = _nt_embedded
1408
+ if r3
1409
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
1410
+ r0 = r3
1411
+ else
1412
+ @index = i0
1413
+ r0 = nil
1414
+ end
1303
1415
  end
1304
1416
  end
1305
1417
 
@@ -1477,8 +1589,12 @@ module EDNGRAMMAR
1477
1589
  else
1478
1590
  []
1479
1591
  end
1480
- if spec.ast
1481
- r.cbor_stream!
1592
+ if ei = spec.ast
1593
+ if ei == ""
1594
+ r.cbor_stream!
1595
+ else
1596
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after ["
1597
+ end
1482
1598
  end
1483
1599
  r
1484
1600
  end
@@ -1640,8 +1756,12 @@ module EDNGRAMMAR
1640
1756
  else
1641
1757
  {}
1642
1758
  end
1643
- if spec.ast
1644
- r.cbor_stream!
1759
+ if ei = spec.ast
1760
+ if ei == ""
1761
+ r.cbor_stream!
1762
+ else
1763
+ warn "*** ignoring unimplemented encoding indicator #{ei.inspect} after \x7b"
1764
+ end
1645
1765
  end
1646
1766
  r
1647
1767
  end
@@ -2281,7 +2401,7 @@ module EDNGRAMMAR
2281
2401
  elements[1]
2282
2402
  end
2283
2403
 
2284
- def tstr
2404
+ def string
2285
2405
  elements[2]
2286
2406
  end
2287
2407
 
@@ -2295,7 +2415,7 @@ module EDNGRAMMAR
2295
2415
  elements[1]
2296
2416
  end
2297
2417
 
2298
- def tstr
2418
+ def string
2299
2419
  elements[2]
2300
2420
  end
2301
2421
 
@@ -2310,36 +2430,13 @@ module EDNGRAMMAR
2310
2430
  end
2311
2431
 
2312
2432
  module Streamstring2
2313
- def S1
2314
- elements[1]
2315
- end
2316
-
2317
- def bstr
2318
- elements[2]
2319
- end
2320
-
2321
- def S2
2322
- elements[3]
2323
- end
2324
- end
2325
-
2326
- module Streamstring3
2327
- def spec1
2328
- elements[1]
2329
- end
2330
-
2331
- def bstr
2332
- elements[2]
2333
- end
2334
-
2335
- def S
2336
- elements[3]
2337
- end
2338
-
2339
- def OC
2340
- elements[5]
2433
+ def ast
2434
+ strings = [elements[2].ast] + elements[4].elements.map {|x| x.string.ast }
2435
+ unless Set[*strings.map(&:encoding)].size == 1
2436
+ warn "*** mixed streamstring #{strings.cbor_diagnostic}"
2437
+ end
2438
+ strings.join.cbor_stream!(strings.map(&:size))
2341
2439
  end
2342
-
2343
2440
  end
2344
2441
 
2345
2442
  def _nt_streamstring
@@ -2353,182 +2450,88 @@ module EDNGRAMMAR
2353
2450
  return cached
2354
2451
  end
2355
2452
 
2356
- i0 = index
2357
- i1, s1 = index, []
2453
+ i0, s0 = index, []
2358
2454
  if (match_len = has_terminal?("(", false, index))
2359
- r2 = true
2455
+ r1 = true
2360
2456
  @index += match_len
2361
2457
  else
2362
2458
  terminal_parse_failure('"("')
2363
- r2 = nil
2459
+ r1 = nil
2364
2460
  end
2365
- s1 << r2
2366
- if r2
2367
- r3 = _nt_spec1
2368
- s1 << r3
2369
- if r3
2370
- r4 = _nt_tstr
2371
- s1 << r4
2372
- if r4
2373
- r5 = _nt_S
2374
- s1 << r5
2375
- if r5
2376
- s6, i6 = [], index
2461
+ s0 << r1
2462
+ if r1
2463
+ r2 = _nt_spec1
2464
+ s0 << r2
2465
+ if r2
2466
+ r3 = _nt_string
2467
+ s0 << r3
2468
+ if r3
2469
+ r4 = _nt_S
2470
+ s0 << r4
2471
+ if r4
2472
+ s5, i5 = [], index
2377
2473
  loop do
2378
- i7, s7 = index, []
2474
+ i6, s6 = index, []
2379
2475
  if (match_len = has_terminal?(",", false, index))
2380
- r8 = true
2476
+ r7 = true
2381
2477
  @index += match_len
2382
2478
  else
2383
2479
  terminal_parse_failure('","')
2384
- r8 = nil
2480
+ r7 = nil
2385
2481
  end
2386
- s7 << r8
2387
- if r8
2388
- r9 = _nt_S
2389
- s7 << r9
2390
- if r9
2391
- r10 = _nt_tstr
2392
- s7 << r10
2393
- if r10
2394
- r11 = _nt_S
2395
- s7 << r11
2482
+ s6 << r7
2483
+ if r7
2484
+ r8 = _nt_S
2485
+ s6 << r8
2486
+ if r8
2487
+ r9 = _nt_string
2488
+ s6 << r9
2489
+ if r9
2490
+ r10 = _nt_S
2491
+ s6 << r10
2396
2492
  end
2397
2493
  end
2398
2494
  end
2399
- if s7.last
2400
- r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
2401
- r7.extend(Streamstring0)
2495
+ if s6.last
2496
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2497
+ r6.extend(Streamstring0)
2402
2498
  else
2403
- @index = i7
2404
- r7 = nil
2499
+ @index = i6
2500
+ r6 = nil
2405
2501
  end
2406
- if r7
2407
- s6 << r7
2502
+ if r6
2503
+ s5 << r6
2408
2504
  else
2409
2505
  break
2410
2506
  end
2411
2507
  end
2412
- r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
2413
- s1 << r6
2414
- if r6
2415
- r12 = _nt_OC
2416
- s1 << r12
2417
- if r12
2508
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2509
+ s0 << r5
2510
+ if r5
2511
+ r11 = _nt_OC
2512
+ s0 << r11
2513
+ if r11
2418
2514
  if (match_len = has_terminal?(")", false, index))
2419
- r13 = true
2515
+ r12 = true
2420
2516
  @index += match_len
2421
2517
  else
2422
2518
  terminal_parse_failure('")"')
2423
- r13 = nil
2519
+ r12 = nil
2424
2520
  end
2425
- s1 << r13
2521
+ s0 << r12
2426
2522
  end
2427
2523
  end
2428
2524
  end
2429
2525
  end
2430
2526
  end
2431
2527
  end
2432
- if s1.last
2433
- r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2434
- r1.extend(Streamstring1)
2435
- else
2436
- @index = i1
2437
- r1 = nil
2438
- end
2439
- if r1
2440
- r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
2441
- r0 = r1
2528
+ if s0.last
2529
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2530
+ r0.extend(Streamstring1)
2531
+ r0.extend(Streamstring2)
2442
2532
  else
2443
- i14, s14 = index, []
2444
- if (match_len = has_terminal?("(", false, index))
2445
- r15 = true
2446
- @index += match_len
2447
- else
2448
- terminal_parse_failure('"("')
2449
- r15 = nil
2450
- end
2451
- s14 << r15
2452
- if r15
2453
- r16 = _nt_spec1
2454
- s14 << r16
2455
- if r16
2456
- r17 = _nt_bstr
2457
- s14 << r17
2458
- if r17
2459
- r18 = _nt_S
2460
- s14 << r18
2461
- if r18
2462
- s19, i19 = [], index
2463
- loop do
2464
- i20, s20 = index, []
2465
- if (match_len = has_terminal?(",", false, index))
2466
- r21 = true
2467
- @index += match_len
2468
- else
2469
- terminal_parse_failure('","')
2470
- r21 = nil
2471
- end
2472
- s20 << r21
2473
- if r21
2474
- r22 = _nt_S
2475
- s20 << r22
2476
- if r22
2477
- r23 = _nt_bstr
2478
- s20 << r23
2479
- if r23
2480
- r24 = _nt_S
2481
- s20 << r24
2482
- end
2483
- end
2484
- end
2485
- if s20.last
2486
- r20 = instantiate_node(SyntaxNode,input, i20...index, s20)
2487
- r20.extend(Streamstring2)
2488
- else
2489
- @index = i20
2490
- r20 = nil
2491
- end
2492
- if r20
2493
- s19 << r20
2494
- else
2495
- break
2496
- end
2497
- end
2498
- r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
2499
- s14 << r19
2500
- if r19
2501
- r25 = _nt_OC
2502
- s14 << r25
2503
- if r25
2504
- if (match_len = has_terminal?(")", false, index))
2505
- r26 = true
2506
- @index += match_len
2507
- else
2508
- terminal_parse_failure('")"')
2509
- r26 = nil
2510
- end
2511
- s14 << r26
2512
- end
2513
- end
2514
- end
2515
- end
2516
- end
2517
- end
2518
- if s14.last
2519
- r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
2520
- r14.extend(Streamstring3)
2521
- else
2522
- @index = i14
2523
- r14 = nil
2524
- end
2525
- if r14
2526
- r14 = SyntaxNode.new(input, (index-1)...index) if r14 == true
2527
- r0 = r14
2528
- else
2529
- @index = i0
2530
- r0 = nil
2531
- end
2533
+ @index = i0
2534
+ r0 = nil
2532
2535
  end
2533
2536
 
2534
2537
  node_cache[:streamstring][start_index] = r0
@@ -2538,19 +2541,16 @@ module EDNGRAMMAR
2538
2541
 
2539
2542
  module Spec0
2540
2543
  def S
2541
- elements[1]
2544
+ elements[2]
2542
2545
  end
2543
2546
  end
2544
2547
 
2545
2548
  module Spec1
2546
- def S
2547
- elements[0]
2548
- end
2549
-
2550
- end
2551
-
2552
- module Spec2
2553
- def ast; (e1 = elements[1].elements) && !e1[0].empty? end
2549
+ def ast;
2550
+ if (e1 = elements[1].elements) && !e1[0].empty?
2551
+ e1[1].text_value
2552
+ end
2553
+ end
2554
2554
  end
2555
2555
 
2556
2556
  def _nt_spec
@@ -2564,44 +2564,43 @@ module EDNGRAMMAR
2564
2564
  return cached
2565
2565
  end
2566
2566
 
2567
- i0, s0 = index, []
2568
- r1 = _nt_S
2569
- s0 << r1
2570
- if r1
2571
- i3, s3 = index, []
2572
- if (match_len = has_terminal?("_", false, index))
2573
- r4 = true
2574
- @index += match_len
2575
- else
2576
- terminal_parse_failure('"_"')
2577
- r4 = nil
2578
- end
2579
- s3 << r4
2580
- if r4
2581
- r5 = _nt_S
2582
- s3 << r5
2583
- end
2584
- if s3.last
2585
- r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2586
- r3.extend(Spec0)
2587
- else
2588
- @index = i3
2589
- r3 = nil
2567
+ i1, s1 = index, []
2568
+ if (match_len = has_terminal?("_", false, index))
2569
+ r2 = true
2570
+ @index += match_len
2571
+ else
2572
+ terminal_parse_failure('"_"')
2573
+ r2 = nil
2574
+ end
2575
+ s1 << r2
2576
+ if r2
2577
+ s3, i3 = [], index
2578
+ loop do
2579
+ r4 = _nt_wordchar
2580
+ if r4
2581
+ s3 << r4
2582
+ else
2583
+ break
2584
+ end
2590
2585
  end
2586
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2587
+ s1 << r3
2591
2588
  if r3
2592
- r2 = r3
2593
- else
2594
- r2 = instantiate_node(SyntaxNode,input, index...index)
2589
+ r5 = _nt_S
2590
+ s1 << r5
2595
2591
  end
2596
- s0 << r2
2597
2592
  end
2598
- if s0.last
2599
- r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2600
- r0.extend(Spec1)
2601
- r0.extend(Spec2)
2593
+ if s1.last
2594
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2595
+ r1.extend(Spec0)
2602
2596
  else
2603
- @index = i0
2604
- r0 = nil
2597
+ @index = i1
2598
+ r1 = nil
2599
+ end
2600
+ if r1
2601
+ r0 = r1
2602
+ else
2603
+ r0 = instantiate_node(SyntaxNode,input, index...index)
2605
2604
  end
2606
2605
 
2607
2606
  node_cache[:spec][start_index] = r0
@@ -2610,12 +2609,8 @@ module EDNGRAMMAR
2610
2609
  end
2611
2610
 
2612
2611
  module Spec10
2613
- def S1
2614
- elements[0]
2615
- end
2616
-
2617
- def S2
2618
- elements[2]
2612
+ def S
2613
+ elements[1]
2619
2614
  end
2620
2615
  end
2621
2616
 
@@ -2631,21 +2626,17 @@ module EDNGRAMMAR
2631
2626
  end
2632
2627
 
2633
2628
  i0, s0 = index, []
2634
- r1 = _nt_S
2629
+ if (match_len = has_terminal?("_", false, index))
2630
+ r1 = true
2631
+ @index += match_len
2632
+ else
2633
+ terminal_parse_failure('"_"')
2634
+ r1 = nil
2635
+ end
2635
2636
  s0 << r1
2636
2637
  if r1
2637
- if (match_len = has_terminal?("_", false, index))
2638
- r2 = true
2639
- @index += match_len
2640
- else
2641
- terminal_parse_failure('"_"')
2642
- r2 = nil
2643
- end
2638
+ r2 = _nt_S
2644
2639
  s0 << r2
2645
- if r2
2646
- r3 = _nt_S
2647
- s0 << r3
2648
- end
2649
2640
  end
2650
2641
  if s0.last
2651
2642
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
@@ -3965,6 +3956,56 @@ module EDNGRAMMAR
3965
3956
  r0
3966
3957
  end
3967
3958
 
3959
+ def _nt_wordchar
3960
+ start_index = index
3961
+ if node_cache[:wordchar].has_key?(index)
3962
+ cached = node_cache[:wordchar][index]
3963
+ if cached
3964
+ node_cache[:wordchar][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
3965
+ @index = cached.interval.end
3966
+ end
3967
+ return cached
3968
+ end
3969
+
3970
+ i0 = index
3971
+ if (match_len = has_terminal?("_", false, index))
3972
+ r1 = true
3973
+ @index += match_len
3974
+ else
3975
+ terminal_parse_failure('"_"')
3976
+ r1 = nil
3977
+ end
3978
+ if r1
3979
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
3980
+ r0 = r1
3981
+ else
3982
+ r2 = _nt_lcalnum
3983
+ if r2
3984
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
3985
+ r0 = r2
3986
+ else
3987
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
3988
+ r3 = true
3989
+ @index += 1
3990
+ else
3991
+ terminal_parse_failure('[A-Z]')
3992
+ r3 = nil
3993
+ end
3994
+ if r3
3995
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
3996
+ r0 = r3
3997
+ else
3998
+ @index = i0
3999
+ r0 = nil
4000
+ end
4001
+ end
4002
+ end
4003
+
4004
+ node_cache[:wordchar][start_index] = r0
4005
+
4006
+ r0
4007
+ end
4008
+
3968
4009
  end
3969
4010
 
3970
4011
  class EDNGRAMMARParser < Treetop::Runtime::CompiledParser
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.7
4
+ version: 0.0.8
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-01 00:00:00.000000000 Z
11
+ date: 2023-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler