edn-abnf 0.0.3 → 0.0.5

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: 17ca8476ccb59a567d0c72fa1eb3be96a637901add2544a545a5e87f8781bd8f
4
- data.tar.gz: c88bba22e17635f44acbe1705cd8cb6a9c37ca4c91806e729341cfd347aa8eed
3
+ metadata.gz: fc5ceebd31ab8dcb7737436c41348a218438eb914ac7090e85015fb6ecbda313
4
+ data.tar.gz: 8859e52ce3b6154d0d409e01a1d4d279c1f60f589121eeb749f7d171b60c2452
5
5
  SHA512:
6
- metadata.gz: baac80d34ad740d44e18907bda40ee83f50ab858441d61a70b44ec9f9786fa90c2d24cb988327c44f9ad19762d89af2dffb5b77b2817b1f1c23688a9390bda01
7
- data.tar.gz: a6a086be5922adf1ce51f51f5dc009719ed985729efb2c94c4d27bed097054f5490c2d04ca33e32e6a9239bd5c987a31860dc24aa05e46dcdedf7c2293c37f04
6
+ metadata.gz: 350cb3b5cf59fc45721f626e2a6eb2cf5b936da60952aa4d758b14f8152f98e2f08afe490d2c3e063a2db6900ac1323f59c2e8f6248a11e8f9ff7ac440020130
7
+ data.tar.gz: 75c3ff4a6948ac326e1b60b9e49a4f440f2e18fd2dc910fc3a7b915244fc95be4edecf843cdcde6d408cc8d74df321200ef93762c3e15228c4c947ea41d600f0
data/edn-abnf.gemspec CHANGED
@@ -1,13 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "edn-abnf"
3
- s.version = "0.0.3"
3
+ s.version = "0.0.5"
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"
7
7
  s.email = "cabo@tzi.org"
8
8
  s.license = "MIT"
9
9
  s.homepage = "http://github.com/cabo/edn-abnf"
10
- s.files = Dir['lib/**/*.rb'] + %w(edn-abnf.gemspec) + Dir['data/*.cddl'] + Dir['bin/**/*.rb']
10
+ s.files = Dir['lib/**/*.rb'] + %w(edn-abnf.gemspec) + Dir['bin/**/*.rb']
11
11
  s.executables = Dir['bin/*'].map {|x| File.basename(x)}
12
12
  s.required_ruby_version = '>= 1.9.2'
13
13
 
@@ -1,7 +1,13 @@
1
- # mockup only; needs parser!
1
+ require_relative "b64grammar.rb"
2
2
 
3
3
  class CBOR_DIAG::App_b64
4
4
  def self.decode(_, s)
5
+ parser = B64GRAMMARParser.new # B? XXX
6
+ ast = parser.parse(s)
7
+ if !ast
8
+ raise ArgumentError, "cbor-diagnostic: Parse Error in b64'#{s}':\n" << EDN.reason(parser, s)
9
+ end
10
+ # lazy -- not using parse tree...:
5
11
  t = s.gsub(/\s/, '').chars.each_slice(4).map(&:join)
6
12
  if last = t[-1]
7
13
  last << "=" * (4 - last.size)
@@ -0,0 +1,498 @@
1
+ # Encoding: UTF-8
2
+ # Autogenerated from a Treetop grammar. Edits may be lost.
3
+
4
+
5
+ module B64GRAMMAR
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :app_string_b64
10
+ end
11
+
12
+ module AppStringB640
13
+ def b64dig
14
+ elements[0]
15
+ end
16
+
17
+ def B
18
+ elements[1]
19
+ end
20
+ end
21
+
22
+ module AppStringB641
23
+ def B
24
+ elements[1]
25
+ end
26
+
27
+ end
28
+
29
+ module AppStringB642
30
+ def b64dig
31
+ elements[0]
32
+ end
33
+
34
+ def B
35
+ elements[1]
36
+ end
37
+
38
+ end
39
+
40
+ module AppStringB643
41
+ def b64dig1
42
+ elements[0]
43
+ end
44
+
45
+ def B1
46
+ elements[1]
47
+ end
48
+
49
+ def b64dig2
50
+ elements[2]
51
+ end
52
+
53
+ def B2
54
+ elements[3]
55
+ end
56
+
57
+ def B3
58
+ elements[5]
59
+ end
60
+ end
61
+
62
+ module AppStringB644
63
+ def B
64
+ elements[0]
65
+ end
66
+
67
+ end
68
+
69
+ def _nt_app_string_b64
70
+ start_index = index
71
+ if node_cache[:app_string_b64].has_key?(index)
72
+ cached = node_cache[:app_string_b64][index]
73
+ if cached
74
+ node_cache[:app_string_b64][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
75
+ @index = cached.interval.end
76
+ end
77
+ return cached
78
+ end
79
+
80
+ i0, s0 = index, []
81
+ r1 = _nt_B
82
+ s0 << r1
83
+ if r1
84
+ s2, i2 = [], index
85
+ loop do
86
+ s3, i3 = [], index
87
+ loop do
88
+ i4, s4 = index, []
89
+ r5 = _nt_b64dig
90
+ s4 << r5
91
+ if r5
92
+ r6 = _nt_B
93
+ s4 << r6
94
+ end
95
+ if s4.last
96
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
97
+ r4.extend(AppStringB640)
98
+ else
99
+ @index = i4
100
+ r4 = nil
101
+ end
102
+ if r4
103
+ s3 << r4
104
+ else
105
+ break
106
+ end
107
+ if s3.size == 4
108
+ break
109
+ end
110
+ end
111
+ if s3.size < 4
112
+ @index = i3
113
+ r3 = nil
114
+ else
115
+ if s3.size < 4
116
+ @terminal_failures.pop
117
+ end
118
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
119
+ end
120
+ if r3
121
+ s2 << r3
122
+ else
123
+ break
124
+ end
125
+ end
126
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
127
+ s0 << r2
128
+ if r2
129
+ i8, s8 = index, []
130
+ r9 = _nt_b64dig
131
+ s8 << r9
132
+ if r9
133
+ r10 = _nt_B
134
+ s8 << r10
135
+ if r10
136
+ r11 = _nt_b64dig
137
+ s8 << r11
138
+ if r11
139
+ r12 = _nt_B
140
+ s8 << r12
141
+ if r12
142
+ i14 = index
143
+ i15, s15 = index, []
144
+ if (match_len = has_terminal?("=", false, index))
145
+ r16 = true
146
+ @index += match_len
147
+ else
148
+ terminal_parse_failure('"="')
149
+ r16 = nil
150
+ end
151
+ s15 << r16
152
+ if r16
153
+ r17 = _nt_B
154
+ s15 << r17
155
+ if r17
156
+ if (match_len = has_terminal?("=", false, index))
157
+ r18 = true
158
+ @index += match_len
159
+ else
160
+ terminal_parse_failure('"="')
161
+ r18 = nil
162
+ end
163
+ s15 << r18
164
+ end
165
+ end
166
+ if s15.last
167
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
168
+ r15.extend(AppStringB641)
169
+ else
170
+ @index = i15
171
+ r15 = nil
172
+ end
173
+ if r15
174
+ r15 = SyntaxNode.new(input, (index-1)...index) if r15 == true
175
+ r14 = r15
176
+ else
177
+ i19, s19 = index, []
178
+ r20 = _nt_b64dig
179
+ s19 << r20
180
+ if r20
181
+ r21 = _nt_B
182
+ s19 << r21
183
+ if r21
184
+ if (match_len = has_terminal?("=", false, index))
185
+ r23 = true
186
+ @index += match_len
187
+ else
188
+ terminal_parse_failure('"="')
189
+ r23 = nil
190
+ end
191
+ if r23
192
+ r22 = r23
193
+ else
194
+ r22 = instantiate_node(SyntaxNode,input, index...index)
195
+ end
196
+ s19 << r22
197
+ end
198
+ end
199
+ if s19.last
200
+ r19 = instantiate_node(SyntaxNode,input, i19...index, s19)
201
+ r19.extend(AppStringB642)
202
+ else
203
+ @index = i19
204
+ r19 = nil
205
+ end
206
+ if r19
207
+ r19 = SyntaxNode.new(input, (index-1)...index) if r19 == true
208
+ r14 = r19
209
+ else
210
+ @index = i14
211
+ r14 = nil
212
+ end
213
+ end
214
+ if r14
215
+ r13 = r14
216
+ else
217
+ r13 = instantiate_node(SyntaxNode,input, index...index)
218
+ end
219
+ s8 << r13
220
+ if r13
221
+ r24 = _nt_B
222
+ s8 << r24
223
+ end
224
+ end
225
+ end
226
+ end
227
+ end
228
+ if s8.last
229
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
230
+ r8.extend(AppStringB643)
231
+ else
232
+ @index = i8
233
+ r8 = nil
234
+ end
235
+ if r8
236
+ r7 = r8
237
+ else
238
+ r7 = instantiate_node(SyntaxNode,input, index...index)
239
+ end
240
+ s0 << r7
241
+ end
242
+ end
243
+ if s0.last
244
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
245
+ r0.extend(AppStringB644)
246
+ else
247
+ @index = i0
248
+ r0 = nil
249
+ end
250
+
251
+ node_cache[:app_string_b64][start_index] = r0
252
+
253
+ r0
254
+ end
255
+
256
+ def _nt_b64dig
257
+ start_index = index
258
+ if node_cache[:b64dig].has_key?(index)
259
+ cached = node_cache[:b64dig][index]
260
+ if cached
261
+ node_cache[:b64dig][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
262
+ @index = cached.interval.end
263
+ end
264
+ return cached
265
+ end
266
+
267
+ i0 = index
268
+ r1 = _nt_ALPHA
269
+ if r1
270
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
271
+ r0 = r1
272
+ else
273
+ r2 = _nt_DIGIT
274
+ if r2
275
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
276
+ r0 = r2
277
+ else
278
+ if (match_len = has_terminal?("-", false, index))
279
+ r3 = true
280
+ @index += match_len
281
+ else
282
+ terminal_parse_failure('"-"')
283
+ r3 = nil
284
+ end
285
+ if r3
286
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
287
+ r0 = r3
288
+ else
289
+ if (match_len = has_terminal?("_", false, index))
290
+ r4 = true
291
+ @index += match_len
292
+ else
293
+ terminal_parse_failure('"_"')
294
+ r4 = nil
295
+ end
296
+ if r4
297
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
298
+ r0 = r4
299
+ else
300
+ if (match_len = has_terminal?("+", false, index))
301
+ r5 = true
302
+ @index += match_len
303
+ else
304
+ terminal_parse_failure('"+"')
305
+ r5 = nil
306
+ end
307
+ if r5
308
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
309
+ r0 = r5
310
+ else
311
+ if (match_len = has_terminal?("/", false, index))
312
+ r6 = true
313
+ @index += match_len
314
+ else
315
+ terminal_parse_failure('"/"')
316
+ r6 = nil
317
+ end
318
+ if r6
319
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
320
+ r0 = r6
321
+ else
322
+ @index = i0
323
+ r0 = nil
324
+ end
325
+ end
326
+ end
327
+ end
328
+ end
329
+ end
330
+
331
+ node_cache[:b64dig][start_index] = r0
332
+
333
+ r0
334
+ end
335
+
336
+ def _nt_B
337
+ start_index = index
338
+ if node_cache[:B].has_key?(index)
339
+ cached = node_cache[:B][index]
340
+ if cached
341
+ node_cache[:B][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
342
+ @index = cached.interval.end
343
+ end
344
+ return cached
345
+ end
346
+
347
+ s0, i0 = [], index
348
+ loop do
349
+ r1 = _nt_iblank
350
+ if r1
351
+ s0 << r1
352
+ else
353
+ break
354
+ end
355
+ end
356
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
357
+
358
+ node_cache[:B][start_index] = r0
359
+
360
+ r0
361
+ end
362
+
363
+ def _nt_iblank
364
+ start_index = index
365
+ if node_cache[:iblank].has_key?(index)
366
+ cached = node_cache[:iblank][index]
367
+ if cached
368
+ node_cache[:iblank][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
369
+ @index = cached.interval.end
370
+ end
371
+ return cached
372
+ end
373
+
374
+ i0 = index
375
+ if (match_len = has_terminal?("\n", false, index))
376
+ r1 = true
377
+ @index += match_len
378
+ else
379
+ terminal_parse_failure('"\\n"')
380
+ r1 = nil
381
+ end
382
+ if r1
383
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
384
+ r0 = r1
385
+ else
386
+ if (match_len = has_terminal?(" ", false, index))
387
+ r2 = true
388
+ @index += match_len
389
+ else
390
+ terminal_parse_failure('" "')
391
+ r2 = nil
392
+ end
393
+ if r2
394
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
395
+ r0 = r2
396
+ else
397
+ @index = i0
398
+ r0 = nil
399
+ end
400
+ end
401
+
402
+ node_cache[:iblank][start_index] = r0
403
+
404
+ r0
405
+ end
406
+
407
+ def _nt_lcalpha
408
+ start_index = index
409
+ if node_cache[:lcalpha].has_key?(index)
410
+ cached = node_cache[:lcalpha][index]
411
+ if cached
412
+ node_cache[:lcalpha][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
413
+ @index = cached.interval.end
414
+ end
415
+ return cached
416
+ end
417
+
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
421
+ else
422
+ terminal_parse_failure('[a-z]')
423
+ r0 = nil
424
+ end
425
+
426
+ node_cache[:lcalpha][start_index] = r0
427
+
428
+ r0
429
+ end
430
+
431
+ def _nt_ALPHA
432
+ start_index = index
433
+ if node_cache[:ALPHA].has_key?(index)
434
+ cached = node_cache[:ALPHA][index]
435
+ if cached
436
+ node_cache[:ALPHA][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
437
+ @index = cached.interval.end
438
+ end
439
+ return cached
440
+ end
441
+
442
+ i0 = index
443
+ if has_terminal?(@regexps[gr = '\A[A-Z]'] ||= Regexp.new(gr), :regexp, index)
444
+ r1 = true
445
+ @index += 1
446
+ else
447
+ terminal_parse_failure('[A-Z]')
448
+ r1 = nil
449
+ end
450
+ if r1
451
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
452
+ r0 = r1
453
+ else
454
+ r2 = _nt_lcalpha
455
+ if r2
456
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
457
+ r0 = r2
458
+ else
459
+ @index = i0
460
+ r0 = nil
461
+ end
462
+ end
463
+
464
+ node_cache[:ALPHA][start_index] = r0
465
+
466
+ r0
467
+ end
468
+
469
+ def _nt_DIGIT
470
+ start_index = index
471
+ if node_cache[:DIGIT].has_key?(index)
472
+ cached = node_cache[:DIGIT][index]
473
+ if cached
474
+ node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
475
+ @index = cached.interval.end
476
+ end
477
+ return cached
478
+ end
479
+
480
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
481
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
482
+ @index += 1
483
+ else
484
+ terminal_parse_failure('[0-9]')
485
+ r0 = nil
486
+ end
487
+
488
+ node_cache[:DIGIT][start_index] = r0
489
+
490
+ r0
491
+ end
492
+
493
+ end
494
+
495
+ class B64GRAMMARParser < Treetop::Runtime::CompiledParser
496
+ include B64GRAMMAR
497
+ end
498
+
@@ -1,7 +1,13 @@
1
- # mockup only; needs parser!
1
+ require_relative "hgrammar.rb"
2
2
 
3
3
  class CBOR_DIAG::App_h
4
4
  def self.decode(_, s)
5
- s.gsub(/#.*|\s|\/[^\/]*\//, "").chars.each_slice(2).map{ |x| Integer(x.join, 16).chr("BINARY") }.join
5
+ parser = HGRAMMARParser.new
6
+ ast = parser.parse(s)
7
+ if !ast
8
+ raise ArgumentError, "cbor-diagnostic: Parse Error in h'#{s}':\n" << EDN.reason(parser, s)
9
+ end
10
+ ast.ast
6
11
  end
12
+ # s.gsub(/#.*|\s|\/[^\/]*\//, "").chars.each_slice(2).map{ |x| Integer(x.join, 16).chr("BINARY") }.join
7
13
  end
@@ -0,0 +1,457 @@
1
+ # Encoding: UTF-8
2
+ # Autogenerated from a Treetop grammar. Edits may be lost.
3
+
4
+
5
+ module HGRAMMAR
6
+ include Treetop::Runtime
7
+
8
+ def root
9
+ @root ||= :app_string_h
10
+ end
11
+
12
+ module AppStringH0
13
+ def HEXDIG1
14
+ elements[0]
15
+ end
16
+
17
+ def S1
18
+ elements[1]
19
+ end
20
+
21
+ def HEXDIG2
22
+ elements[2]
23
+ end
24
+
25
+ def S2
26
+ elements[3]
27
+ end
28
+ end
29
+
30
+ module AppStringH1
31
+ def S
32
+ elements[0]
33
+ end
34
+
35
+ end
36
+
37
+ module AppStringH2
38
+ def ast
39
+ e1 = elements[1].elements
40
+ e1.map {|e| Integer(e.elements[0].text_value + e.elements[2].text_value, 16).chr("BINARY")}.join.b
41
+ end
42
+ end
43
+
44
+ def _nt_app_string_h
45
+ start_index = index
46
+ if node_cache[:app_string_h].has_key?(index)
47
+ cached = node_cache[:app_string_h][index]
48
+ if cached
49
+ node_cache[:app_string_h][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
50
+ @index = cached.interval.end
51
+ end
52
+ return cached
53
+ end
54
+
55
+ i0, s0 = index, []
56
+ r1 = _nt_S
57
+ s0 << r1
58
+ if r1
59
+ s2, i2 = [], index
60
+ loop do
61
+ i3, s3 = index, []
62
+ r4 = _nt_HEXDIG
63
+ s3 << r4
64
+ if r4
65
+ r5 = _nt_S
66
+ s3 << r5
67
+ if r5
68
+ r6 = _nt_HEXDIG
69
+ s3 << r6
70
+ if r6
71
+ r7 = _nt_S
72
+ s3 << r7
73
+ end
74
+ end
75
+ end
76
+ if s3.last
77
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
78
+ r3.extend(AppStringH0)
79
+ else
80
+ @index = i3
81
+ r3 = nil
82
+ end
83
+ if r3
84
+ s2 << r3
85
+ else
86
+ break
87
+ end
88
+ end
89
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
90
+ s0 << r2
91
+ end
92
+ if s0.last
93
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
94
+ r0.extend(AppStringH1)
95
+ r0.extend(AppStringH2)
96
+ else
97
+ @index = i0
98
+ r0 = nil
99
+ end
100
+
101
+ node_cache[:app_string_h][start_index] = r0
102
+
103
+ r0
104
+ end
105
+
106
+ def _nt_HEXDIG
107
+ start_index = index
108
+ if node_cache[:HEXDIG].has_key?(index)
109
+ cached = node_cache[:HEXDIG][index]
110
+ if cached
111
+ node_cache[:HEXDIG][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
112
+ @index = cached.interval.end
113
+ end
114
+ return cached
115
+ end
116
+
117
+ i0 = index
118
+ r1 = _nt_DIGIT
119
+ if r1
120
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
121
+ r0 = r1
122
+ else
123
+ if (match_len = has_terminal?("a", :insens, index))
124
+ r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
125
+ @index += match_len
126
+ else
127
+ terminal_parse_failure('"A"')
128
+ r2 = nil
129
+ end
130
+ if r2
131
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
132
+ r0 = r2
133
+ else
134
+ if (match_len = has_terminal?("b", :insens, index))
135
+ r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
136
+ @index += match_len
137
+ else
138
+ terminal_parse_failure('"B"')
139
+ r3 = nil
140
+ end
141
+ if r3
142
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
143
+ r0 = r3
144
+ else
145
+ if (match_len = has_terminal?("c", :insens, index))
146
+ r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
147
+ @index += match_len
148
+ else
149
+ terminal_parse_failure('"C"')
150
+ r4 = nil
151
+ end
152
+ if r4
153
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
154
+ r0 = r4
155
+ else
156
+ if (match_len = has_terminal?("d", :insens, index))
157
+ r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
158
+ @index += match_len
159
+ else
160
+ terminal_parse_failure('"D"')
161
+ r5 = nil
162
+ end
163
+ if r5
164
+ r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
165
+ r0 = r5
166
+ else
167
+ if (match_len = has_terminal?("e", :insens, index))
168
+ r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
169
+ @index += match_len
170
+ else
171
+ terminal_parse_failure('"E"')
172
+ r6 = nil
173
+ end
174
+ if r6
175
+ r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
176
+ r0 = r6
177
+ else
178
+ if (match_len = has_terminal?("f", :insens, index))
179
+ r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
180
+ @index += match_len
181
+ else
182
+ terminal_parse_failure('"F"')
183
+ r7 = nil
184
+ end
185
+ if r7
186
+ r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
187
+ r0 = r7
188
+ else
189
+ @index = i0
190
+ r0 = nil
191
+ end
192
+ end
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
198
+
199
+ node_cache[:HEXDIG][start_index] = r0
200
+
201
+ r0
202
+ end
203
+
204
+ def _nt_DIGIT
205
+ start_index = index
206
+ if node_cache[:DIGIT].has_key?(index)
207
+ cached = node_cache[:DIGIT][index]
208
+ if cached
209
+ node_cache[:DIGIT][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
210
+ @index = cached.interval.end
211
+ end
212
+ return cached
213
+ end
214
+
215
+ if has_terminal?(@regexps[gr = '\A[0-9]'] ||= Regexp.new(gr), :regexp, index)
216
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 1))
217
+ @index += 1
218
+ else
219
+ terminal_parse_failure('[0-9]')
220
+ r0 = nil
221
+ end
222
+
223
+ node_cache[:DIGIT][start_index] = r0
224
+
225
+ r0
226
+ end
227
+
228
+ def _nt_blank
229
+ start_index = index
230
+ if node_cache[:blank].has_key?(index)
231
+ cached = node_cache[:blank][index]
232
+ if cached
233
+ node_cache[:blank][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
234
+ @index = cached.interval.end
235
+ end
236
+ return cached
237
+ end
238
+
239
+ i0 = index
240
+ if (match_len = has_terminal?("\t", false, index))
241
+ r1 = true
242
+ @index += match_len
243
+ else
244
+ terminal_parse_failure('"\\t"')
245
+ r1 = nil
246
+ end
247
+ if r1
248
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
249
+ r0 = r1
250
+ else
251
+ if (match_len = has_terminal?("\n", false, index))
252
+ r2 = true
253
+ @index += match_len
254
+ else
255
+ terminal_parse_failure('"\\n"')
256
+ r2 = nil
257
+ end
258
+ if r2
259
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
260
+ r0 = r2
261
+ else
262
+ if (match_len = has_terminal?("\r", false, index))
263
+ r3 = true
264
+ @index += match_len
265
+ else
266
+ terminal_parse_failure('"\\r"')
267
+ r3 = nil
268
+ end
269
+ if r3
270
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
271
+ r0 = r3
272
+ else
273
+ if (match_len = has_terminal?(" ", false, index))
274
+ r4 = true
275
+ @index += match_len
276
+ else
277
+ terminal_parse_failure('" "')
278
+ r4 = nil
279
+ end
280
+ if r4
281
+ r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
282
+ r0 = r4
283
+ else
284
+ @index = i0
285
+ r0 = nil
286
+ end
287
+ end
288
+ end
289
+ end
290
+
291
+ node_cache[:blank][start_index] = r0
292
+
293
+ r0
294
+ end
295
+
296
+ def _nt_non_slash
297
+ start_index = index
298
+ if node_cache[:non_slash].has_key?(index)
299
+ cached = node_cache[:non_slash][index]
300
+ if cached
301
+ node_cache[:non_slash][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
302
+ @index = cached.interval.end
303
+ end
304
+ return cached
305
+ end
306
+
307
+ i0 = index
308
+ r1 = _nt_blank
309
+ if r1
310
+ r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
311
+ r0 = r1
312
+ else
313
+ if has_terminal?(@regexps[gr = '\A[!-\\.]'] ||= Regexp.new(gr), :regexp, index)
314
+ r2 = true
315
+ @index += 1
316
+ else
317
+ terminal_parse_failure('[!-\\.]')
318
+ r2 = nil
319
+ end
320
+ if r2
321
+ r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
322
+ r0 = r2
323
+ else
324
+ if has_terminal?(@regexps[gr = '\A[0-􏿿]'] ||= Regexp.new(gr), :regexp, index)
325
+ r3 = true
326
+ @index += 1
327
+ else
328
+ terminal_parse_failure('[0-􏿿]')
329
+ r3 = nil
330
+ end
331
+ if r3
332
+ r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
333
+ r0 = r3
334
+ else
335
+ @index = i0
336
+ r0 = nil
337
+ end
338
+ end
339
+ end
340
+
341
+ node_cache[:non_slash][start_index] = r0
342
+
343
+ r0
344
+ end
345
+
346
+ module S0
347
+ end
348
+
349
+ module S1
350
+ end
351
+
352
+ def _nt_S
353
+ start_index = index
354
+ if node_cache[:S].has_key?(index)
355
+ cached = node_cache[:S][index]
356
+ if cached
357
+ node_cache[:S][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
358
+ @index = cached.interval.end
359
+ end
360
+ return cached
361
+ end
362
+
363
+ i0, s0 = index, []
364
+ s1, i1 = [], index
365
+ loop do
366
+ r2 = _nt_blank
367
+ if r2
368
+ s1 << r2
369
+ else
370
+ break
371
+ end
372
+ end
373
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
374
+ s0 << r1
375
+ if r1
376
+ s3, i3 = [], index
377
+ loop do
378
+ i4, s4 = index, []
379
+ if (match_len = has_terminal?("/", false, index))
380
+ r5 = true
381
+ @index += match_len
382
+ else
383
+ terminal_parse_failure('"/"')
384
+ r5 = nil
385
+ end
386
+ s4 << r5
387
+ if r5
388
+ s6, i6 = [], index
389
+ loop do
390
+ r7 = _nt_non_slash
391
+ if r7
392
+ s6 << r7
393
+ else
394
+ break
395
+ end
396
+ end
397
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
398
+ s4 << r6
399
+ if r6
400
+ if (match_len = has_terminal?("/", false, index))
401
+ r8 = true
402
+ @index += match_len
403
+ else
404
+ terminal_parse_failure('"/"')
405
+ r8 = nil
406
+ end
407
+ s4 << r8
408
+ if r8
409
+ s9, i9 = [], index
410
+ loop do
411
+ r10 = _nt_blank
412
+ if r10
413
+ s9 << r10
414
+ else
415
+ break
416
+ end
417
+ end
418
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
419
+ s4 << r9
420
+ end
421
+ end
422
+ end
423
+ if s4.last
424
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
425
+ r4.extend(S0)
426
+ else
427
+ @index = i4
428
+ r4 = nil
429
+ end
430
+ if r4
431
+ s3 << r4
432
+ else
433
+ break
434
+ end
435
+ end
436
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
437
+ s0 << r3
438
+ end
439
+ if s0.last
440
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
441
+ r0.extend(S1)
442
+ else
443
+ @index = i0
444
+ r0 = nil
445
+ end
446
+
447
+ node_cache[:S][start_index] = r0
448
+
449
+ r0
450
+ end
451
+
452
+ end
453
+
454
+ class HGRAMMARParser < Treetop::Runtime::CompiledParser
455
+ include HGRAMMAR
456
+ end
457
+
data/lib/edn-abnf.rb CHANGED
@@ -5,9 +5,10 @@ class EDN
5
5
 
6
6
  def self.reason(parser, s)
7
7
  reason = [parser.failure_reason]
8
- parser.failure_reason =~ /^(Expected .+) after/m
9
- reason << "#{$1.gsub("\n", '<<<NEWLINE>>>')}:" if $1
8
+ parser.failure_reason =~ /^(Expected .+) after ./m
9
+ expected = $1
10
10
  if line = s.lines.to_a[parser.failure_line - 1]
11
+ reason << "#{$1.gsub("\n", '<<<NEWLINE>>>')}:" if expected
11
12
  reason << line
12
13
  reason << "#{'~' * (parser.failure_column - 1)}^"
13
14
  end
@@ -17,7 +18,7 @@ class EDN
17
18
  def self.from_edn(s)
18
19
  ast = @@parser.parse s
19
20
  if !ast
20
- fail self.reason(@@parser, s)
21
+ raise ArgumentError, "Parse Error:\n" << self.reason(@@parser, s)
21
22
  end
22
23
  ret = EDN.new(ast)
23
24
  ret
@@ -1,9 +1,6 @@
1
1
  require 'cbor-diagnostic'
2
2
  module CBOR_DIAG
3
3
  end
4
- require 'cbor-diagnostic-app/dt'
5
- require 'cbor-diagnostic-app/h'
6
- require 'cbor-diagnostic-app/b64'
7
4
 
8
5
  require 'treetop'
9
6
  require_relative './edngrammar'
@@ -19,3 +16,8 @@ class Treetop::Runtime::SyntaxNode
19
16
  text_value.to_i(16)
20
17
  end
21
18
  end
19
+
20
+
21
+ require 'cbor-diagnostic-app/dt'
22
+ require 'cbor-diagnostic-app/h'
23
+ require 'cbor-diagnostic-app/b64'
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.3
4
+ version: 0.0.5
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-08-25 00:00:00.000000000 Z
11
+ date: 2023-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -93,7 +93,9 @@ files:
93
93
  - bin/edn-abnf~
94
94
  - edn-abnf.gemspec
95
95
  - lib/cbor-diagnostic-app/b64.rb
96
+ - lib/cbor-diagnostic-app/b64grammar.rb
96
97
  - lib/cbor-diagnostic-app/h.rb
98
+ - lib/cbor-diagnostic-app/hgrammar.rb
97
99
  - lib/edn-abnf.rb
98
100
  - lib/parser/edn-util.rb
99
101
  - lib/parser/edngrammar.rb