cddlc 0.3.1 → 0.3.2
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 +4 -4
- data/bin/cddlc +7 -1
- data/cddlc.gemspec +1 -1
- data/lib/cddlc.rb +39 -8
- data/lib/processor/cddl-visitor.rb +4 -0
- data/lib/writer/cddl-writer.rb +13 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a38ea6117afabc57b950af7598c2d497bb00f587ec937cbe41b45b33f3775dfe
|
4
|
+
data.tar.gz: f726477776dee7586f5f85909473cfb22acc38630cf45995c732d2df7a842ebf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 332fcf064ebfc558cc82908832575a3fd4f77219f6f1ceb46ffab2270ee4f9273ecc7d83edcc5dc6dc574ef4ccefdbf9fd7c25d10a9f88466dc4e0ca7ae3dc32
|
7
|
+
data.tar.gz: 3bbb56ffb6853eaab2792e5518914128ecf734bff0db4651861227bd77eaf4241e29b11306e04937855e46d67c05f3dd55cdde91e86da5ef2d5cc9f7fd4edb96
|
data/bin/cddlc
CHANGED
@@ -44,7 +44,7 @@ require 'ostruct'
|
|
44
44
|
$options = OpenStruct.new
|
45
45
|
begin
|
46
46
|
op = OptionParser.new do |opts|
|
47
|
-
opts.banner = "Usage: cddlc.rb [options] [file.cddl... | -]"
|
47
|
+
opts.banner = "Usage: cddlc.rb [options] [-e cddl | file.cddl... | -]"
|
48
48
|
|
49
49
|
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
50
50
|
$options.verbose = v
|
@@ -70,6 +70,9 @@ begin
|
|
70
70
|
opts.on("-sRULE", "--start=RULE", String, "Start rule name") do |v|
|
71
71
|
$options.start = v
|
72
72
|
end
|
73
|
+
opts.on("-eCDDL", "CDDL model on command line") do |v|
|
74
|
+
$options.model = v
|
75
|
+
end
|
73
76
|
opts.on("-iIMPORT", "--import=IMPORT", String, "Import [namespace=]reference") do |v|
|
74
77
|
$options.import ||= []
|
75
78
|
$options.import << v
|
@@ -94,6 +97,9 @@ cddl_file = ""
|
|
94
97
|
if $options.start
|
95
98
|
cddl_file << "$.start.$ = #{$options.start}\n"
|
96
99
|
end
|
100
|
+
if m = $options.model
|
101
|
+
cddl_file << m << "\n"
|
102
|
+
end
|
97
103
|
|
98
104
|
[[$options.include, "include"], [$options.import, "import"]].each do |arr, directive|
|
99
105
|
if arr
|
data/cddlc.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cddlc"
|
3
|
-
s.version = "0.3.
|
3
|
+
s.version = "0.3.2"
|
4
4
|
s.summary = "CDDL (Concise Data Definition Language) converters and miscellaneous tools"
|
5
5
|
s.description = %q{cddlc implements converters and miscellaneous tools for CDDL, RFC 8610}
|
6
6
|
s.author = "Carsten Bormann"
|
data/lib/cddlc.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative "parser/cddl-util.rb"
|
2
2
|
require_relative "processor/cddl-visitor.rb"
|
3
3
|
require_relative 'processor/cddl-undefined.rb'
|
4
|
+
require_relative 'writer/cddl-writer.rb'
|
4
5
|
|
5
6
|
class CDDL
|
6
7
|
@@parser = CDDLGRAMMARParser.new
|
@@ -226,7 +227,8 @@ class CDDL
|
|
226
227
|
end
|
227
228
|
|
228
229
|
|
229
|
-
RULE_OP_TO_CHOICE = {"/=" => "tcho", "//=" => "gcho"}
|
230
|
+
RULE_OP_TO_CHOICE = {"/=" => ["tcho", "tadd"], "//=" => ["gcho", "gadd"]}
|
231
|
+
CHOICERULES = RULE_OP_TO_CHOICE.values.flatten
|
230
232
|
|
231
233
|
def rules
|
232
234
|
if @rules.nil? # memoize
|
@@ -258,27 +260,56 @@ class CDDL
|
|
258
260
|
else
|
259
261
|
fail name
|
260
262
|
end
|
261
|
-
@rules[name] =
|
263
|
+
@rules[name] = nv =
|
262
264
|
if (old = @rules[name]) && old != val
|
263
|
-
fail "
|
264
|
-
if Array === old && old[0]
|
265
|
-
|
265
|
+
fail "overwriting #{write_rule(name, old)} ...with... #{write_rule(name, val)}" unless cho
|
266
|
+
if Array === old && cho.include?(old[0])
|
267
|
+
if cho.include?(val[0])
|
268
|
+
old.dup.append(*val[1..-1])
|
269
|
+
else
|
270
|
+
old.dup << val
|
271
|
+
end
|
266
272
|
else
|
267
|
-
|
273
|
+
# can't put an old "g/tadd" into a new "t/gcho"
|
274
|
+
fail "can't add #{write_rule(name, [cho[1], val])} ...to... #{write_rule(name, old)}" if CHOICERULES.include?(old[0])
|
275
|
+
[cho[0], old, val] # old might need to be packaged for gcho
|
268
276
|
end
|
269
277
|
else
|
270
|
-
|
278
|
+
if cho
|
279
|
+
if val[0] == cho[0]
|
280
|
+
[cho[1], *val[1..-1]]
|
281
|
+
else
|
282
|
+
[cho[1], val]
|
283
|
+
end
|
284
|
+
else
|
285
|
+
val
|
286
|
+
end
|
271
287
|
end
|
288
|
+
if name[0..1] == "$$"
|
289
|
+
check_socket(name, nv, "gadd", "tadd", "tcho", "type", "group")
|
290
|
+
elsif name[0] == "$"
|
291
|
+
check_socket(name, nv, "tadd", "gadd", "gcho", "group", "type")
|
292
|
+
end
|
272
293
|
end
|
273
294
|
# warn "** rules #{rules.inspect}"
|
274
295
|
end
|
275
296
|
@rules
|
276
297
|
end
|
277
298
|
|
299
|
+
def check_socket(name, nv, right, wrong, wrong_plain, wrong_kind, kind)
|
300
|
+
unless nv[0] == right
|
301
|
+
if nv[0] == wrong
|
302
|
+
flaw = "#{wrong_kind} choice #{write_rhs([wrong_plain, *nv[1..-1]], 2.1)} in"
|
303
|
+
else
|
304
|
+
flaw = "plain assignment of #{write_rhs(nv, 2.1)} to"
|
305
|
+
end
|
306
|
+
warn "** warning: #{flaw} #{kind} socket #{name}"
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
278
310
|
def prelude
|
279
311
|
if @prelude.nil?
|
280
312
|
@prelude = CDDL.from_cddl(File.read(DATA_DIR + "prelude.cddl"))
|
281
|
-
|
282
313
|
end
|
283
314
|
@prelude
|
284
315
|
end
|
@@ -25,6 +25,10 @@ class CDDL
|
|
25
25
|
["gcho", *visit_all(prods, &block)]
|
26
26
|
in ["tcho", *prods]
|
27
27
|
["tcho", *visit_all(prods, &block)]
|
28
|
+
in ["gadd", *prods]
|
29
|
+
["gadd", *visit_all(prods, &block)]
|
30
|
+
in ["tcho", *prods]
|
31
|
+
["tcho", *visit_all(prods, &block)]
|
28
32
|
in ["seq", *prods]
|
29
33
|
["seq", *visit_all(prods, &block)]
|
30
34
|
in ["enum", prod]
|
data/lib/writer/cddl-writer.rb
CHANGED
@@ -111,15 +111,24 @@ class CDDL
|
|
111
111
|
prec_check(ret, targetprec, prec, indent_s)
|
112
112
|
end
|
113
113
|
|
114
|
-
def
|
115
|
-
rules.map {|k, v|
|
114
|
+
def write_rule(k, v)
|
116
115
|
parmnames = false
|
116
|
+
assign = "="
|
117
117
|
case v
|
118
|
+
in ["tadd", *rest]
|
119
|
+
assign = "/="
|
120
|
+
v = ["tcho", *rest]
|
121
|
+
in ["gadd", *rest]
|
122
|
+
assign = "//="
|
123
|
+
v = ["gcho", *rest]
|
118
124
|
in ["parm", parmnames, _type]
|
119
125
|
else
|
120
126
|
end
|
121
|
-
"#{write_lhs(k, parmnames)}
|
122
|
-
|
127
|
+
"#{write_lhs(k, parmnames)} #{assign} #{write_rhs(v, 2.1)}" # 2: parenthesize groups
|
128
|
+
end
|
129
|
+
|
130
|
+
def to_s
|
131
|
+
rules.map {|k, v| write_rule(k, v) }.join("\n")
|
123
132
|
end
|
124
133
|
|
125
134
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cddlc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carsten Bormann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|