cddlc 0.1.3 → 0.1.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 +4 -4
- data/bin/cddlc +44 -4
- data/cddlc.gemspec +3 -3
- data/data/rfc8990-cleaned.cddl +213 -0
- data/lib/cddlc.rb +142 -73
- data/lib/parser/cddlgrammar.rb +1 -6
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa1feed69996a1e91c43877cfbe3e68c6b935039976ae95db312fef99a0e8bbd
|
4
|
+
data.tar.gz: 746c4b175cb78c502ab731e43672841663cfb4a4159bcf387f8f69c9f34e347a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9b58614695995f0336496734a3684992ddd6f7a1be0dfcbc0451f45afde7e78eb2a2f89ce60e9c5e0c09a1c0e7e8856cc5e5658fe3fe78bc22bc08c4897c4d4
|
7
|
+
data.tar.gz: d19ca545ca39eb87af227651438755c13475dd75bd29ef11a6a6327aac42e9c4a69fe0e5322a291e7819903d89c4de1296e1605934bce9b154dcb7ef6563c151
|
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] [file.cddl... | -]"
|
48
48
|
|
49
49
|
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
50
50
|
$options.verbose = v
|
@@ -64,6 +64,17 @@ begin
|
|
64
64
|
opts.on("-tFMT", "--to=FMT", [:basic, :neat, :json, :yaml, :enum, :cddl], "Target format") do |v|
|
65
65
|
$options.target = v
|
66
66
|
end
|
67
|
+
opts.on("-sRULE", "--start=RULE", String, "Start rule name") do |v|
|
68
|
+
$options.start = v
|
69
|
+
end
|
70
|
+
opts.on("-iIMPORT", "--import=IMPORT", String, "Import [namespace=]reference") do |v|
|
71
|
+
$options.import ||= []
|
72
|
+
$options.import << v
|
73
|
+
end
|
74
|
+
opts.on("-IINCLUDE", "--include=INCLUDE", String, "Include [namespace=]reference") do |v|
|
75
|
+
$options.include ||= []
|
76
|
+
$options.include << v
|
77
|
+
end
|
67
78
|
end
|
68
79
|
op.parse!
|
69
80
|
rescue Exception => e
|
@@ -71,11 +82,40 @@ rescue Exception => e
|
|
71
82
|
exit 1
|
72
83
|
end
|
73
84
|
|
85
|
+
cddl_file = ""
|
86
|
+
if $options.start
|
87
|
+
cddl_file << "$.start.$ = #{$options.start}\n"
|
88
|
+
end
|
89
|
+
|
90
|
+
[[$options.include, "include"], [$options.import, "import"]].each do |arr, directive|
|
91
|
+
if arr
|
92
|
+
arr.each do |ref|
|
93
|
+
asname, refname = ref.split("=", 2)
|
94
|
+
unless refname
|
95
|
+
refname = asname
|
96
|
+
asname = nil
|
97
|
+
end
|
98
|
+
cddl_file << ";# #{directive} #{refname}"
|
99
|
+
cddl_file << " as #{asname}" if asname
|
100
|
+
cddl_file << "\n"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
if $options.verbose
|
106
|
+
warn "::: generated from options:"
|
107
|
+
warn cddl_file
|
108
|
+
warn ":::\n\n"
|
109
|
+
end
|
110
|
+
|
74
111
|
if ARGV == []
|
75
|
-
|
76
|
-
|
112
|
+
if cddl_file == ""
|
113
|
+
puts op
|
114
|
+
exit 1
|
115
|
+
end
|
116
|
+
else
|
117
|
+
cddl_file << ARGF.read
|
77
118
|
end
|
78
|
-
cddl_file = ARGF.read
|
79
119
|
|
80
120
|
cddl = CDDL.from_cddl(cddl_file)
|
81
121
|
result = if $options.rules
|
data/cddlc.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "cddlc"
|
3
|
-
s.version = "0.1.
|
3
|
+
s.version = "0.1.5"
|
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"
|
@@ -15,6 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.add_development_dependency 'bundler', '~>1'
|
17
17
|
s.add_dependency 'treetop', '~>1'
|
18
|
-
s.add_dependency 'json'
|
19
|
-
s.add_dependency 'neatjson'
|
18
|
+
s.add_dependency 'json', '~>2'
|
19
|
+
s.add_dependency 'neatjson', '~>0.10'
|
20
20
|
end
|
@@ -0,0 +1,213 @@
|
|
1
|
+
|
2
|
+
grasp-message = (message .within message-structure) / noop-message
|
3
|
+
|
4
|
+
message-structure = [MESSAGE_TYPE, session-id, ?initiator,
|
5
|
+
*grasp-option]
|
6
|
+
|
7
|
+
MESSAGE_TYPE = 0..255
|
8
|
+
session-id = 0..4294967295 ; up to 32 bits
|
9
|
+
grasp-option = any
|
10
|
+
|
11
|
+
|
12
|
+
discovery-message = [M_DISCOVERY, session-id, initiator, objective]
|
13
|
+
|
14
|
+
|
15
|
+
response-message = [M_RESPONSE, session-id, initiator, ttl,
|
16
|
+
(+locator-option // divert-option), ?objective]
|
17
|
+
|
18
|
+
ttl = 0..4294967295 ; in milliseconds
|
19
|
+
|
20
|
+
|
21
|
+
request-negotiation-message = [M_REQ_NEG, session-id, objective]
|
22
|
+
|
23
|
+
request-synchronization-message = [M_REQ_SYN, session-id, objective]
|
24
|
+
|
25
|
+
|
26
|
+
negotiation-message = [M_NEGOTIATE, session-id, objective]
|
27
|
+
|
28
|
+
|
29
|
+
end-message = [M_END, session-id, accept-option / decline-option]
|
30
|
+
|
31
|
+
|
32
|
+
wait-message = [M_WAIT, session-id, waiting-time]
|
33
|
+
waiting-time = 0..4294967295 ; in milliseconds
|
34
|
+
|
35
|
+
|
36
|
+
synch-message = [M_SYNCH, session-id, objective]
|
37
|
+
|
38
|
+
|
39
|
+
flood-message = [M_FLOOD, session-id, initiator, ttl,
|
40
|
+
+[objective, (locator-option / [])]]
|
41
|
+
|
42
|
+
ttl = 0..4294967295 ; in milliseconds
|
43
|
+
|
44
|
+
|
45
|
+
invalid-message = [M_INVALID, session-id, ?any]
|
46
|
+
|
47
|
+
|
48
|
+
noop-message = [M_NOOP]
|
49
|
+
|
50
|
+
|
51
|
+
divert-option = [O_DIVERT, +locator-option]
|
52
|
+
|
53
|
+
|
54
|
+
accept-option = [O_ACCEPT]
|
55
|
+
|
56
|
+
|
57
|
+
decline-option = [O_DECLINE, ?reason]
|
58
|
+
reason = text ; optional UTF-8 error message
|
59
|
+
|
60
|
+
|
61
|
+
ipv6-locator-option = [O_IPv6_LOCATOR, ipv6-address,
|
62
|
+
transport-proto, port-number]
|
63
|
+
ipv6-address = bytes .size 16
|
64
|
+
|
65
|
+
transport-proto = IPPROTO_TCP / IPPROTO_UDP
|
66
|
+
IPPROTO_TCP = 6
|
67
|
+
IPPROTO_UDP = 17
|
68
|
+
port-number = 0..65535
|
69
|
+
|
70
|
+
|
71
|
+
ipv4-locator-option = [O_IPv4_LOCATOR, ipv4-address,
|
72
|
+
transport-proto, port-number]
|
73
|
+
ipv4-address = bytes .size 4
|
74
|
+
|
75
|
+
|
76
|
+
fqdn-locator-option = [O_FQDN_LOCATOR, text,
|
77
|
+
transport-proto, port-number]
|
78
|
+
|
79
|
+
|
80
|
+
uri-locator-option = [O_URI_LOCATOR, text,
|
81
|
+
transport-proto / null, port-number / null]
|
82
|
+
|
83
|
+
|
84
|
+
objective = [objective-name, objective-flags,
|
85
|
+
loop-count, ?objective-value]
|
86
|
+
|
87
|
+
objective-name = text
|
88
|
+
objective-value = any
|
89
|
+
loop-count = 0..255
|
90
|
+
|
91
|
+
|
92
|
+
objective-flags = uint .bits objective-flag
|
93
|
+
objective-flag = &(
|
94
|
+
F_DISC: 0 ; valid for discovery
|
95
|
+
F_NEG: 1 ; valid for negotiation
|
96
|
+
F_SYNCH: 2 ; valid for synchronization
|
97
|
+
F_NEG_DRY: 3 ; negotiation is a dry run
|
98
|
+
)
|
99
|
+
|
100
|
+
|
101
|
+
grasp-message = (message .within message-structure) / noop-message
|
102
|
+
|
103
|
+
message-structure = [MESSAGE_TYPE, session-id, ?initiator,
|
104
|
+
*grasp-option]
|
105
|
+
|
106
|
+
MESSAGE_TYPE = 0..255
|
107
|
+
session-id = 0..4294967295 ; up to 32 bits
|
108
|
+
grasp-option = any
|
109
|
+
|
110
|
+
message /= discovery-message
|
111
|
+
discovery-message = [M_DISCOVERY, session-id, initiator, objective]
|
112
|
+
|
113
|
+
message /= response-message ; response to Discovery
|
114
|
+
response-message = [M_RESPONSE, session-id, initiator, ttl,
|
115
|
+
(+locator-option // divert-option), ?objective]
|
116
|
+
|
117
|
+
message /= synch-message ; response to Synchronization request
|
118
|
+
synch-message = [M_SYNCH, session-id, objective]
|
119
|
+
|
120
|
+
message /= flood-message
|
121
|
+
flood-message = [M_FLOOD, session-id, initiator, ttl,
|
122
|
+
+[objective, (locator-option / [])]]
|
123
|
+
|
124
|
+
message /= request-negotiation-message
|
125
|
+
request-negotiation-message = [M_REQ_NEG, session-id, objective]
|
126
|
+
|
127
|
+
message /= request-synchronization-message
|
128
|
+
request-synchronization-message = [M_REQ_SYN, session-id, objective]
|
129
|
+
|
130
|
+
message /= negotiation-message
|
131
|
+
negotiation-message = [M_NEGOTIATE, session-id, objective]
|
132
|
+
|
133
|
+
message /= end-message
|
134
|
+
end-message = [M_END, session-id, accept-option / decline-option]
|
135
|
+
|
136
|
+
message /= wait-message
|
137
|
+
wait-message = [M_WAIT, session-id, waiting-time]
|
138
|
+
|
139
|
+
message /= invalid-message
|
140
|
+
invalid-message = [M_INVALID, session-id, ?any]
|
141
|
+
|
142
|
+
noop-message = [M_NOOP]
|
143
|
+
|
144
|
+
divert-option = [O_DIVERT, +locator-option]
|
145
|
+
|
146
|
+
accept-option = [O_ACCEPT]
|
147
|
+
|
148
|
+
decline-option = [O_DECLINE, ?reason]
|
149
|
+
reason = text ; optional UTF-8 error message
|
150
|
+
|
151
|
+
waiting-time = 0..4294967295 ; in milliseconds
|
152
|
+
ttl = 0..4294967295 ; in milliseconds
|
153
|
+
|
154
|
+
locator-option /= [O_IPv4_LOCATOR, ipv4-address,
|
155
|
+
transport-proto, port-number]
|
156
|
+
ipv4-address = bytes .size 4
|
157
|
+
|
158
|
+
locator-option /= [O_IPv6_LOCATOR, ipv6-address,
|
159
|
+
transport-proto, port-number]
|
160
|
+
ipv6-address = bytes .size 16
|
161
|
+
|
162
|
+
locator-option /= [O_FQDN_LOCATOR, text, transport-proto,
|
163
|
+
port-number]
|
164
|
+
|
165
|
+
locator-option /= [O_URI_LOCATOR, text,
|
166
|
+
transport-proto / null, port-number / null]
|
167
|
+
|
168
|
+
transport-proto = IPPROTO_TCP / IPPROTO_UDP
|
169
|
+
IPPROTO_TCP = 6
|
170
|
+
IPPROTO_UDP = 17
|
171
|
+
port-number = 0..65535
|
172
|
+
|
173
|
+
initiator = ipv4-address / ipv6-address
|
174
|
+
|
175
|
+
objective-flags = uint .bits objective-flag
|
176
|
+
|
177
|
+
objective-flag = &(
|
178
|
+
F_DISC: 0 ; valid for discovery
|
179
|
+
F_NEG: 1 ; valid for negotiation
|
180
|
+
F_SYNCH: 2 ; valid for synchronization
|
181
|
+
F_NEG_DRY: 3 ; negotiation is a dry run
|
182
|
+
)
|
183
|
+
|
184
|
+
objective = [objective-name, objective-flags,
|
185
|
+
loop-count, ?objective-value]
|
186
|
+
|
187
|
+
objective-name = text ; see section "Format of Objective Options"
|
188
|
+
|
189
|
+
objective-value = any
|
190
|
+
|
191
|
+
loop-count = 0..255
|
192
|
+
|
193
|
+
; Constants for message types and option types
|
194
|
+
|
195
|
+
M_NOOP = 0
|
196
|
+
M_DISCOVERY = 1
|
197
|
+
M_RESPONSE = 2
|
198
|
+
M_REQ_NEG = 3
|
199
|
+
M_REQ_SYN = 4
|
200
|
+
M_NEGOTIATE = 5
|
201
|
+
M_END = 6
|
202
|
+
M_WAIT = 7
|
203
|
+
M_SYNCH = 8
|
204
|
+
M_FLOOD = 9
|
205
|
+
M_INVALID = 99
|
206
|
+
|
207
|
+
O_DIVERT = 100
|
208
|
+
O_ACCEPT = 101
|
209
|
+
O_DECLINE = 102
|
210
|
+
O_IPv6_LOCATOR = 103
|
211
|
+
O_IPv4_LOCATOR = 104
|
212
|
+
O_FQDN_LOCATOR = 105
|
213
|
+
O_URI_LOCATOR = 106
|
data/lib/cddlc.rb
CHANGED
@@ -39,7 +39,22 @@ class CDDL
|
|
39
39
|
end])
|
40
40
|
end
|
41
41
|
|
42
|
+
def self.read_from_include_path(fn)
|
43
|
+
io = nil
|
44
|
+
CDDL::cddl_include_path.each do |path|
|
45
|
+
begin
|
46
|
+
io = (path + fn).open
|
47
|
+
break
|
48
|
+
rescue Errno::ENOENT
|
49
|
+
next
|
50
|
+
end
|
51
|
+
end
|
52
|
+
io
|
53
|
+
end
|
54
|
+
|
42
55
|
SAFE_FN = /\A[-._a-zA-Z0-9]+\z/
|
56
|
+
IMPINC = /\A(?:import|include)\z/
|
57
|
+
IDENTIFIER_RE = /\A[A-Za-z@_$]([-.]*[A-Za-z@_$0-9])*\z/
|
43
58
|
|
44
59
|
def self.from_cddl(s)
|
45
60
|
ast = @@parser.parse s
|
@@ -50,92 +65,146 @@ class CDDL
|
|
50
65
|
directives = s.lines.grep(/^;# /).map(&:chomp).map{|l| l.sub(/^;#\s+/, '').split(/\s+/)}
|
51
66
|
# puts directives.to_yaml
|
52
67
|
end
|
68
|
+
|
53
69
|
ret = CDDL.new(ast, directives)
|
54
70
|
|
55
71
|
if $options.cddl2
|
56
|
-
ret.
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
72
|
+
ret.perform_directives
|
73
|
+
end
|
74
|
+
ret
|
75
|
+
end
|
76
|
+
|
77
|
+
def perform_directives
|
78
|
+
directives.each do |di|
|
79
|
+
preferred_tag = nil
|
80
|
+
from = nil
|
81
|
+
case di
|
82
|
+
in [IMPINC => dir, SAFE_FN => docref, "as", SAFE_FN => preferred_tag]
|
83
|
+
in [IMPINC => dir, SAFE_FN => docref]
|
84
|
+
in [IMPINC => dir, *from, "from", SAFE_FN => docref, "as", SAFE_FN => preferred_tag]
|
85
|
+
in [IMPINC => dir, *from, "from", SAFE_FN => docref]
|
86
|
+
else
|
87
|
+
warn "** Can't parse directive »#{di.join(" ")}«"
|
88
|
+
next
|
89
|
+
end
|
90
|
+
if from
|
91
|
+
from = from.map do |name|
|
92
|
+
name.chomp!(",")
|
93
|
+
if IDENTIFIER_RE === name
|
94
|
+
name
|
95
|
+
else
|
96
|
+
warn "*** invalid identifier #{name.inspect} ignored in »#{di.join(' ')}«"
|
97
|
+
nil
|
82
98
|
end
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
99
|
+
end.compact
|
100
|
+
end
|
101
|
+
puts "FROM #{from.inspect}" if $options.verbose
|
102
|
+
puts "PREFERRED_TAG #{preferred_tag.inspect}" if $options.verbose
|
103
|
+
puts "DOCREF #{docref.inspect}" if $options.verbose
|
88
104
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
renamed_names.map { |o|
|
96
|
-
n = "#{preferred_tag}.#{o}"
|
97
|
-
warn "** Warning: renamed name #{n} already in #{fn}" if included_cddl.rules[n]
|
98
|
-
[o, n]}]
|
99
|
-
included_cddl.rename(name_rename)
|
100
|
-
end
|
105
|
+
fn = docref.downcase << ".cddl"
|
106
|
+
io = CDDL.read_from_include_path(fn)
|
107
|
+
unless io
|
108
|
+
warn "** #{dir} file #{fn} not found in #{CDDL::cddl_include_path.map(&:to_s)}"
|
109
|
+
next
|
110
|
+
end
|
101
111
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
112
|
+
include_file = io.read
|
113
|
+
included_cddl = CDDL.from_cddl(include_file)
|
114
|
+
if preferred_tag
|
115
|
+
included_cddl = included_cddl.deep_clone # needed?
|
116
|
+
renamed_names = included_cddl.rules.keys
|
117
|
+
name_rename = Hash[
|
118
|
+
renamed_names.map { |o|
|
119
|
+
n = "#{preferred_tag}.#{o}"
|
120
|
+
warn "** Warning: renamed name #{n} already in #{fn}" if included_cddl.rules[n]
|
121
|
+
[o, n]}]
|
122
|
+
included_cddl.rename(name_rename)
|
123
|
+
end
|
124
|
+
|
125
|
+
case dir
|
126
|
+
in "import"
|
127
|
+
warn "** IMPORTING #{from && from.join(", ") << " from "}#{fn}" if $options.verbose
|
128
|
+
|
129
|
+
must_be_found = false
|
130
|
+
to_be_imported = if from
|
131
|
+
if preferred_tag
|
132
|
+
from.map{ |k|
|
133
|
+
if k =~ /\A#{preferred_tag}[.]/
|
134
|
+
k
|
135
|
+
elsif nn = name_rename[k]
|
136
|
+
if old = store_rule(k, v = ["name", nn])
|
137
|
+
warn "*** autogenerated rule #{k} = #{v} would overwrite #{old}"
|
138
|
+
end
|
139
|
+
nn
|
140
|
+
else
|
141
|
+
warn_error "*** imported rule #{k.inspect} not in #{fn}"
|
142
|
+
end
|
143
|
+
}.compact
|
144
|
+
else
|
145
|
+
must_be_found = true
|
146
|
+
from
|
147
|
+
end
|
148
|
+
else
|
149
|
+
cddl_undefined
|
150
|
+
end
|
151
|
+
loop do
|
152
|
+
# p to_be_imported
|
153
|
+
got_more = false
|
154
|
+
to_be_imported.each do |name|
|
155
|
+
if rule = included_cddl.rules[name]
|
156
|
+
rules[name] = rule
|
157
|
+
warn "IMPORTED #{name} from #{fn}" if $options.verbose
|
158
|
+
got_more = true
|
159
|
+
elsif must_be_found
|
160
|
+
warn_error "*** imported rule #{name.inspect} not in #{fn}"
|
116
161
|
end
|
117
|
-
break unless got_more
|
118
162
|
end
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
163
|
+
break unless got_more
|
164
|
+
to_be_imported = cddl_undefined # XXX square...
|
165
|
+
must_be_found = false
|
166
|
+
end
|
167
|
+
if preferred_tag
|
168
|
+
to_be_imported.each do |name|
|
169
|
+
warn "** Warning: undefined reference #{name} without namespace prefix is defined in namespaced imported module #{fn}" if name_rename[name]
|
170
|
+
### instead just add rule...
|
123
171
|
end
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
172
|
+
end
|
173
|
+
in "include"
|
174
|
+
if from
|
175
|
+
from = Set[*from]
|
176
|
+
end
|
177
|
+
warn "** INCLUDING #{from && from.join(", ") << " from "}#{fn}" if $options.verbose
|
178
|
+
included_cddl.rules.each do |k, v|
|
179
|
+
if from
|
180
|
+
next unless from.include?(k)
|
181
|
+
from.delete(k)
|
134
182
|
end
|
183
|
+
if old = store_rule(k, v)
|
184
|
+
warn "*** included rule #{k} = #{v} would overwrite #{old}"
|
185
|
+
end
|
186
|
+
end
|
187
|
+
if from && !from.empty?
|
188
|
+
warn "*** could not find #{from.join(", ")} in #{fn}"
|
135
189
|
end
|
136
190
|
end
|
137
191
|
end
|
138
|
-
|
192
|
+
end
|
193
|
+
|
194
|
+
def store_rule(k, v)
|
195
|
+
if old = rules[k]
|
196
|
+
if old != v
|
197
|
+
return old # error
|
198
|
+
end
|
199
|
+
else
|
200
|
+
rules[k] = v
|
201
|
+
end
|
202
|
+
nil # OK
|
203
|
+
end
|
204
|
+
|
205
|
+
def warn_error(s)
|
206
|
+
warn s
|
207
|
+
@error = true
|
139
208
|
end
|
140
209
|
|
141
210
|
attr_accessor :ast, :tree, :directives
|
data/lib/parser/cddlgrammar.rb
CHANGED
@@ -69,12 +69,7 @@ module CDDLGRAMMAR
|
|
69
69
|
break
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
73
|
-
@index = i2
|
74
|
-
r2 = nil
|
75
|
-
else
|
76
|
-
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
77
|
-
end
|
72
|
+
r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
|
78
73
|
s0 << r2
|
79
74
|
end
|
80
75
|
if s0.last
|
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.1.
|
4
|
+
version: 0.1.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-
|
11
|
+
date: 2023-03-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -42,30 +42,30 @@ dependencies:
|
|
42
42
|
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: neatjson
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '0.10'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '0.10'
|
69
69
|
description: cddlc implements converters and miscellaneous tools for CDDL, RFC 8610
|
70
70
|
email: cabo@tzi.org
|
71
71
|
executables:
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- data/prelude.cddl
|
79
79
|
- data/rfc8727.cddl
|
80
80
|
- data/rfc8927.cddl
|
81
|
+
- data/rfc8990-cleaned.cddl
|
81
82
|
- data/rfc8990.cddl
|
82
83
|
- data/rfc9052.cddl
|
83
84
|
- data/rfc9053.cddl
|
@@ -122,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
123
|
- !ruby/object:Gem::Version
|
123
124
|
version: '0'
|
124
125
|
requirements: []
|
125
|
-
rubygems_version: 3.4.
|
126
|
+
rubygems_version: 3.4.6
|
126
127
|
signing_key:
|
127
128
|
specification_version: 4
|
128
129
|
summary: CDDL (Concise Data Definition Language) converters and miscellaneous tools
|