xref: /aosp_15_r20/external/openscreen/tools/cddl/grammar.abnf (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglardcddl = S 1*(rule S)
2*3f982cf4SFabien Sanglardrule = typename [genericparm] S assignt S type
3*3f982cf4SFabien Sanglard     / groupname [genericparm] S assigng S grpent
4*3f982cf4SFabien Sanglard
5*3f982cf4SFabien Sanglardtypename = id
6*3f982cf4SFabien Sanglardgroupname = id
7*3f982cf4SFabien Sanglard
8*3f982cf4SFabien Sanglardassignt = "=" / "/="
9*3f982cf4SFabien Sanglardassigng = "=" / "//="
10*3f982cf4SFabien Sanglard
11*3f982cf4SFabien Sanglardgenericparm = "<" S id S *("," S id S ) ">"
12*3f982cf4SFabien Sanglardgenericarg = "<" S type1 S *("," S type1 S ) ">"
13*3f982cf4SFabien Sanglard
14*3f982cf4SFabien Sanglardtype = type1 *(S "/" S type1)
15*3f982cf4SFabien Sanglard
16*3f982cf4SFabien Sanglardtype1 = type2 [S (rangeop / ctlop) S type2]
17*3f982cf4SFabien Sanglard
18*3f982cf4SFabien Sanglardtype2 = value
19*3f982cf4SFabien Sanglard      / typename [genericarg]
20*3f982cf4SFabien Sanglard      / "(" S type S ")"
21*3f982cf4SFabien Sanglard      / "{" S group S "}"
22*3f982cf4SFabien Sanglard      / "[" S group S "]"
23*3f982cf4SFabien Sanglard      / "~" S typename [genericarg]
24*3f982cf4SFabien Sanglard      / "&" S "(" S group S ")"
25*3f982cf4SFabien Sanglard      / "&" S groupname [genericarg]
26*3f982cf4SFabien Sanglard      / "#" "6" ["." uint] "(" S type S ")" ; note no space!
27*3f982cf4SFabien Sanglard      / "#" DIGIT ["." uint]                ; major/ai
28*3f982cf4SFabien Sanglard      / "#"                                 ; any
29*3f982cf4SFabien Sanglard
30*3f982cf4SFabien Sanglardrangeop = "..." / ".."
31*3f982cf4SFabien Sanglard
32*3f982cf4SFabien Sanglardctlop = "." id
33*3f982cf4SFabien Sanglard
34*3f982cf4SFabien Sanglardgroup = grpchoice *(S "//" S grpchoice)
35*3f982cf4SFabien Sanglard
36*3f982cf4SFabien Sanglardgrpchoice = *(grpent optcom)
37*3f982cf4SFabien Sanglard
38*3f982cf4SFabien Sanglardgrpent = [occur S] [memberkey S] type
39*3f982cf4SFabien Sanglard       / [occur S] groupname [genericarg]  ; preempted by above
40*3f982cf4SFabien Sanglard       / [occur S] "(" S group S ")"
41*3f982cf4SFabien Sanglard
42*3f982cf4SFabien Sanglardmemberkey = type1 S ["^" S] "=>"
43*3f982cf4SFabien Sanglard          / bareword S ":"
44*3f982cf4SFabien Sanglard          / value S ":"
45*3f982cf4SFabien Sanglard
46*3f982cf4SFabien Sanglardbareword = id
47*3f982cf4SFabien Sanglard
48*3f982cf4SFabien Sanglardoptcom = S ["," S]
49*3f982cf4SFabien Sanglard
50*3f982cf4SFabien Sanglardoccur = [uint] "*" [uint]
51*3f982cf4SFabien Sanglard      / "+"
52*3f982cf4SFabien Sanglard      / "?"
53*3f982cf4SFabien Sanglard
54*3f982cf4SFabien Sanglarduint = DIGIT1 *DIGIT
55*3f982cf4SFabien Sanglard     / "0x" 1*HEXDIG
56*3f982cf4SFabien Sanglard     / "0b" 1*BINDIG
57*3f982cf4SFabien Sanglard     / "0"
58*3f982cf4SFabien Sanglard
59*3f982cf4SFabien Sanglardvalue = number
60*3f982cf4SFabien Sanglard      / text
61*3f982cf4SFabien Sanglard      / bytes
62*3f982cf4SFabien Sanglard
63*3f982cf4SFabien Sanglardint = ["-"] uint
64*3f982cf4SFabien Sanglard
65*3f982cf4SFabien Sanglard; This is a float if it has fraction or exponent; int otherwise
66*3f982cf4SFabien Sanglardnumber = hexfloat / (int ["." fraction] ["e" exponent ])
67*3f982cf4SFabien Sanglardhexfloat = "0x" 1*HEXDIG ["." 1*HEXDIG] "p" exponent
68*3f982cf4SFabien Sanglardfraction = 1*DIGIT
69*3f982cf4SFabien Sanglardexponent = ["+"/"-"] 1*DIGIT
70*3f982cf4SFabien Sanglard
71*3f982cf4SFabien Sanglardtext = %x22 *SCHAR %x22
72*3f982cf4SFabien SanglardSCHAR = %x20-21 / %x23-5B / %x5D-10FFFD / SESC
73*3f982cf4SFabien SanglardSESC = "\" %x20-10FFFD
74*3f982cf4SFabien Sanglard
75*3f982cf4SFabien Sanglardbytes = [bsqual] %x27 *BCHAR %x27
76*3f982cf4SFabien SanglardBCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF
77*3f982cf4SFabien Sanglardbsqual = "h" / "b64"
78*3f982cf4SFabien Sanglard
79*3f982cf4SFabien Sanglardid = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
80*3f982cf4SFabien SanglardALPHA = %x41-5A / %x61-7A
81*3f982cf4SFabien SanglardEALPHA = ALPHA / "@" / "_" / "$"
82*3f982cf4SFabien SanglardDIGIT = %x30-39
83*3f982cf4SFabien SanglardDIGIT1 = %x31-39
84*3f982cf4SFabien SanglardHEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
85*3f982cf4SFabien SanglardBINDIG = %x30-31
86*3f982cf4SFabien Sanglard
87*3f982cf4SFabien SanglardS = *WS
88*3f982cf4SFabien SanglardWS = SP / NL
89*3f982cf4SFabien SanglardSP = %x20
90*3f982cf4SFabien SanglardNL = COMMENT / CRLF
91*3f982cf4SFabien SanglardCOMMENT = ";" *PCHAR CRLF
92*3f982cf4SFabien SanglardPCHAR = %x20-10FFFD
93*3f982cf4SFabien SanglardCRLF = %x0A / %x0D.0A
94