cddlc 0.1.7 → 0.2.1
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 +1 -1
- data/cddlc.gemspec +1 -1
- data/lib/cddlc.rb +1 -0
- data/lib/parser/cddlgrammar.rb +69 -29
- data/lib/processor/cddl-flattening.rb +7 -8
- data/lib/processor/cddl-visitor.rb +2 -2
- data/lib/writer/cddl-writer.rb +7 -3
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ea4f2c1a1ecedae6a543bebad045a0063e3b7103b757306a8f1da1fea694c3ca
|
|
4
|
+
data.tar.gz: 247a51f6016e133358fb37e524e0692eec3c84104ea63137b9549e3164ff65ad
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1d039d6618590fea6f3baaf19888583afdddcab37887cb4e9fb24b56c1fcf52455964426c8ea8325f2d57fa67e19008c05de791278664c094e3da500455387d8
|
|
7
|
+
data.tar.gz: be73e1a03f41bb0052eac06e1fac77bddb3ef55eade8e2b8f0e4c9f625cd5c7bd928a5b464a693e07826521135bd402583d32d801908a95c2749c9f3508eb253
|
data/bin/cddlc
CHANGED
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.2.1"
|
|
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
data/lib/parser/cddlgrammar.rb
CHANGED
|
@@ -1812,7 +1812,9 @@ module CDDLGRAMMAR
|
|
|
1812
1812
|
end
|
|
1813
1813
|
|
|
1814
1814
|
module Grpent2
|
|
1815
|
-
def ast()
|
|
1815
|
+
def ast()
|
|
1816
|
+
repwrap(elements[0], ["mem", *elements[1].elements ? elements[1].memberkey.ast : [false, nil],
|
|
1817
|
+
elements[2].ast]) end
|
|
1816
1818
|
end
|
|
1817
1819
|
|
|
1818
1820
|
module Grpent3
|
|
@@ -2012,7 +2014,7 @@ module CDDLGRAMMAR
|
|
|
2012
2014
|
end
|
|
2013
2015
|
|
|
2014
2016
|
module Memberkey2
|
|
2015
|
-
def ast() type1.ast end
|
|
2017
|
+
def ast() [!!elements[2].elements, type1.ast] end
|
|
2016
2018
|
end
|
|
2017
2019
|
|
|
2018
2020
|
module Memberkey3
|
|
@@ -2027,7 +2029,7 @@ module CDDLGRAMMAR
|
|
|
2027
2029
|
end
|
|
2028
2030
|
|
|
2029
2031
|
module Memberkey4
|
|
2030
|
-
def ast() ["text", bareword.text_value] end
|
|
2032
|
+
def ast() [true, ["text", bareword.text_value]] end
|
|
2031
2033
|
end
|
|
2032
2034
|
|
|
2033
2035
|
module Memberkey5
|
|
@@ -2042,7 +2044,7 @@ module CDDLGRAMMAR
|
|
|
2042
2044
|
end
|
|
2043
2045
|
|
|
2044
2046
|
module Memberkey6
|
|
2045
|
-
def ast() value.ast end
|
|
2047
|
+
def ast() [true, value.ast] end
|
|
2046
2048
|
end
|
|
2047
2049
|
|
|
2048
2050
|
def _nt_memberkey
|
|
@@ -3148,15 +3150,9 @@ module CDDLGRAMMAR
|
|
|
3148
3150
|
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
|
|
3149
3151
|
r0 = r3
|
|
3150
3152
|
else
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
r4.extend(SCHAR3)
|
|
3155
|
-
@index += 1
|
|
3156
|
-
else
|
|
3157
|
-
terminal_parse_failure('[-]')
|
|
3158
|
-
r4 = nil
|
|
3159
|
-
end
|
|
3153
|
+
r4 = _nt_NONASCII
|
|
3154
|
+
r4.extend(SCHAR3)
|
|
3155
|
+
r4.extend(SCHAR3)
|
|
3160
3156
|
if r4
|
|
3161
3157
|
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
|
|
3162
3158
|
r0 = r4
|
|
@@ -3951,40 +3947,46 @@ module CDDLGRAMMAR
|
|
|
3951
3947
|
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
|
|
3952
3948
|
r0 = r2
|
|
3953
3949
|
else
|
|
3954
|
-
if has_terminal?(@regexps[gr = '\A[\\]
|
|
3950
|
+
if has_terminal?(@regexps[gr = '\A[\\]-~]'] ||= Regexp.new(gr), :regexp, index)
|
|
3955
3951
|
r3 = true
|
|
3956
3952
|
@index += 1
|
|
3957
3953
|
else
|
|
3958
|
-
terminal_parse_failure('[\\]
|
|
3954
|
+
terminal_parse_failure('[\\]-~]')
|
|
3959
3955
|
r3 = nil
|
|
3960
3956
|
end
|
|
3961
3957
|
if r3
|
|
3962
3958
|
r3 = SyntaxNode.new(input, (index-1)...index) if r3 == true
|
|
3963
3959
|
r0 = r3
|
|
3964
3960
|
else
|
|
3965
|
-
r4 =
|
|
3961
|
+
r4 = _nt_NONASCII
|
|
3966
3962
|
if r4
|
|
3967
3963
|
r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true
|
|
3968
3964
|
r0 = r4
|
|
3969
3965
|
else
|
|
3970
|
-
|
|
3971
|
-
r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
|
|
3972
|
-
@index += match_len
|
|
3973
|
-
else
|
|
3974
|
-
terminal_parse_failure('"\\\\\'"')
|
|
3975
|
-
r5 = nil
|
|
3976
|
-
end
|
|
3966
|
+
r5 = _nt_SESC
|
|
3977
3967
|
if r5
|
|
3978
3968
|
r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true
|
|
3979
3969
|
r0 = r5
|
|
3980
3970
|
else
|
|
3981
|
-
|
|
3971
|
+
if (match_len = has_terminal?("\\'", false, index))
|
|
3972
|
+
r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
|
|
3973
|
+
@index += match_len
|
|
3974
|
+
else
|
|
3975
|
+
terminal_parse_failure('"\\\\\'"')
|
|
3976
|
+
r6 = nil
|
|
3977
|
+
end
|
|
3982
3978
|
if r6
|
|
3983
3979
|
r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true
|
|
3984
3980
|
r0 = r6
|
|
3985
3981
|
else
|
|
3986
|
-
|
|
3987
|
-
|
|
3982
|
+
r7 = _nt_CRLF
|
|
3983
|
+
if r7
|
|
3984
|
+
r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true
|
|
3985
|
+
r0 = r7
|
|
3986
|
+
else
|
|
3987
|
+
@index = i0
|
|
3988
|
+
r0 = nil
|
|
3989
|
+
end
|
|
3988
3990
|
end
|
|
3989
3991
|
end
|
|
3990
3992
|
end
|
|
@@ -4623,11 +4625,49 @@ module CDDLGRAMMAR
|
|
|
4623
4625
|
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
|
4624
4626
|
r0 = r1
|
|
4625
4627
|
else
|
|
4626
|
-
|
|
4628
|
+
r2 = _nt_NONASCII
|
|
4629
|
+
if r2
|
|
4630
|
+
r2 = SyntaxNode.new(input, (index-1)...index) if r2 == true
|
|
4631
|
+
r0 = r2
|
|
4632
|
+
else
|
|
4633
|
+
@index = i0
|
|
4634
|
+
r0 = nil
|
|
4635
|
+
end
|
|
4636
|
+
end
|
|
4637
|
+
|
|
4638
|
+
node_cache[:PCHAR][start_index] = r0
|
|
4639
|
+
|
|
4640
|
+
r0
|
|
4641
|
+
end
|
|
4642
|
+
|
|
4643
|
+
def _nt_NONASCII
|
|
4644
|
+
start_index = index
|
|
4645
|
+
if node_cache[:NONASCII].has_key?(index)
|
|
4646
|
+
cached = node_cache[:NONASCII][index]
|
|
4647
|
+
if cached
|
|
4648
|
+
node_cache[:NONASCII][index] = cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
|
|
4649
|
+
@index = cached.interval.end
|
|
4650
|
+
end
|
|
4651
|
+
return cached
|
|
4652
|
+
end
|
|
4653
|
+
|
|
4654
|
+
i0 = index
|
|
4655
|
+
if has_terminal?(@regexps[gr = '\A[ -]'] ||= Regexp.new(gr), :regexp, index)
|
|
4656
|
+
r1 = true
|
|
4657
|
+
@index += 1
|
|
4658
|
+
else
|
|
4659
|
+
terminal_parse_failure('[ -]')
|
|
4660
|
+
r1 = nil
|
|
4661
|
+
end
|
|
4662
|
+
if r1
|
|
4663
|
+
r1 = SyntaxNode.new(input, (index-1)...index) if r1 == true
|
|
4664
|
+
r0 = r1
|
|
4665
|
+
else
|
|
4666
|
+
if has_terminal?(@regexps[gr = '\A[-]'] ||= Regexp.new(gr), :regexp, index)
|
|
4627
4667
|
r2 = true
|
|
4628
4668
|
@index += 1
|
|
4629
4669
|
else
|
|
4630
|
-
terminal_parse_failure('[
|
|
4670
|
+
terminal_parse_failure('[-]')
|
|
4631
4671
|
r2 = nil
|
|
4632
4672
|
end
|
|
4633
4673
|
if r2
|
|
@@ -4639,7 +4679,7 @@ module CDDLGRAMMAR
|
|
|
4639
4679
|
end
|
|
4640
4680
|
end
|
|
4641
4681
|
|
|
4642
|
-
node_cache[:
|
|
4682
|
+
node_cache[:NONASCII][start_index] = r0
|
|
4643
4683
|
|
|
4644
4684
|
r0
|
|
4645
4685
|
end
|
|
@@ -2,15 +2,14 @@ require_relative "../cddlc.rb"
|
|
|
2
2
|
require_relative "./cddl-visitor.rb"
|
|
3
3
|
|
|
4
4
|
class CDDL
|
|
5
|
-
ID_RE = /\A[A-Za-z@_$]([-.]*[A-Za-z@_$0-9])*\z/
|
|
6
5
|
MOGRIFIED_ID_RE = /\A\$\.[A-Za-z@_$]([-.]*[A-Za-z@_$0-9])*\z/
|
|
7
6
|
def flattening_key_name(key, value, env = nil)
|
|
8
7
|
case key
|
|
9
|
-
in ["enum", ["mem", ["text",
|
|
8
|
+
in ["enum", ["mem", _cut, ["text", IDENTIFIER_RE => text], _]]
|
|
10
9
|
[false, text]
|
|
11
|
-
in ["text",
|
|
10
|
+
in ["text", IDENTIFIER_RE => text]
|
|
12
11
|
[false, text]
|
|
13
|
-
in ["number",
|
|
12
|
+
in ["number", INT_RE => intval] if env
|
|
14
13
|
[true, "$.#{env}$#{intval}"]
|
|
15
14
|
else
|
|
16
15
|
[false]
|
|
@@ -21,7 +20,7 @@ class CDDL
|
|
|
21
20
|
rules.each do |name, prod|
|
|
22
21
|
visit(prod) do |here|
|
|
23
22
|
case here
|
|
24
|
-
in ["mem", key, value]
|
|
23
|
+
in ["mem", _cut, key, value]
|
|
25
24
|
_labeled, keyname = flattening_key_name(key, value, false)
|
|
26
25
|
if keyname
|
|
27
26
|
symtab[keyname] << [name, value]
|
|
@@ -45,7 +44,7 @@ class CDDL
|
|
|
45
44
|
def flattening_mogrify(name, prod, symtab, alias_rules)
|
|
46
45
|
step1 = visit(prod) do |here|
|
|
47
46
|
case here
|
|
48
|
-
in ["mem", key, value]
|
|
47
|
+
in ["mem", cut, key, value]
|
|
49
48
|
### mogrify
|
|
50
49
|
labeled, keyname = flattening_key_name(key, value, name)
|
|
51
50
|
if keyname
|
|
@@ -67,7 +66,7 @@ class CDDL
|
|
|
67
66
|
else
|
|
68
67
|
alias_rules[new_name] = new_value2
|
|
69
68
|
end
|
|
70
|
-
[true, ["mem", key, ["name", new_name]]]
|
|
69
|
+
[true, ["mem", cut, key, ["name", new_name]]]
|
|
71
70
|
end
|
|
72
71
|
else
|
|
73
72
|
false
|
|
@@ -75,7 +74,7 @@ class CDDL
|
|
|
75
74
|
end
|
|
76
75
|
step2 = visit(step1) do |here|
|
|
77
76
|
case here
|
|
78
|
-
in ["enum", ["mem", ["text",
|
|
77
|
+
in ["enum", ["mem", _cut, ["text", IDENTIFIER_RE], ["name", MOGRIFIED_ID_RE => new_name]]]
|
|
79
78
|
[true, ["name", new_name]]
|
|
80
79
|
else
|
|
81
80
|
false
|
|
@@ -33,8 +33,8 @@ class CDDL
|
|
|
33
33
|
["unwrap", visit(prod, &block)] # XXX, this may need to be bottled in a rule
|
|
34
34
|
in ["prim", prod, *prods]
|
|
35
35
|
["prim", visit(prod, &block), *visit_all(prods, &block)]
|
|
36
|
-
in ["mem", *prods]
|
|
37
|
-
["mem", *visit_all(prods, &block)]
|
|
36
|
+
in ["mem", cut, *prods]
|
|
37
|
+
["mem", cut, *visit_all(prods, &block)]
|
|
38
38
|
in ["rep", s, e, prod]
|
|
39
39
|
["rep", s, e, visit(prod, &block)]
|
|
40
40
|
else
|
data/lib/writer/cddl-writer.rb
CHANGED
|
@@ -90,10 +90,14 @@ class CDDL
|
|
|
90
90
|
"#{s}*#{e || ""}"
|
|
91
91
|
end
|
|
92
92
|
[1, "#{occur}#{write_rhs(group, 2, indent, pn)}"]
|
|
93
|
-
in ["mem", nil, t2]
|
|
93
|
+
in ["mem", false, nil, t2]
|
|
94
94
|
[2, write_rhs(t2, 2, indent, pn)]
|
|
95
|
-
in ["mem",
|
|
96
|
-
[2, "#{
|
|
95
|
+
in ["mem", true, ["text", IDENTIFIER_RE => bareword], t2]
|
|
96
|
+
[2, "#{bareword}: #{write_rhs(t2, 2, indent, pn)}"]
|
|
97
|
+
in ["mem", true, ["number", INT_RE => bareword], t2]
|
|
98
|
+
[2, "#{bareword}: #{write_rhs(t2, 2, indent, pn)}"]
|
|
99
|
+
in ["mem", cut, t1, t2]
|
|
100
|
+
[2, "#{write_rhs(t1, 3, indent, pn)} #{cut ? "^" : ""}=> #{write_rhs(t2, 2, indent, pn)}"]
|
|
97
101
|
# 2->3: work around cddl tool limitation
|
|
98
102
|
in ["bytes", t]
|
|
99
103
|
[4, t] # XXX not very clean
|
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.2.1
|
|
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-12-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
125
|
version: '0'
|
|
126
126
|
requirements: []
|
|
127
|
-
rubygems_version: 3.4.
|
|
127
|
+
rubygems_version: 3.4.10
|
|
128
128
|
signing_key:
|
|
129
129
|
specification_version: 4
|
|
130
130
|
summary: CDDL (Concise Data Definition Language) converters and miscellaneous tools
|