jsonc-processed Grammar
JSONC-text
JSONC-text := wsc value wsc
wsc
wsc := *(ws-char / comment)
ws-char
ws-char := %x20 / %x09 / %x0A / %x0D ; space / tab / LF / CR
source-character
source-character := %x00-10FFFF
not-asterisk-char
not-asterisk-char := %x00-29 / %x2B-10FFFF
not-forward-slash-or-asterisk-char
not-forward-slash-or-asterisk-char := %x00-29 / %x2B-2E / %x30-10FFFF
begin-array
begin-array := wsc %x5B wsc ; [ left square bracket
begin-object
begin-object := wsc %x7B wsc ; { left curly bracket
end-array
end-array := wsc %x5D wsc ; ] right square bracket
end-object
end-object := wsc %x7D wsc ; } right curly bracket
name-separator
name-separator := wsc %x3A wsc ; : colon
value-separator
value-separator := wsc %x2C wsc ; , comma
value
value := false / null / true / object / array / number / string
false
false := %x66.61.6C.73.65 ; false
true
true := %x74.72.75.65 ; true
null
null := %x6E.75.6C.6C ; null
object
object := begin-object [ member *( value-separator member ) ] end-object
member
member := string name-separator value
array
array := begin-array [ value *( value-separator value ) ] end-array
number
number := [ minus ] int [ frac ] [ exp ]
decimal-point
decimal-point := %x2E ; .
digit1-9
digit1-9 := %x31-39 ; 1-9
exp
exp := e [ minus / plus ] 1*DIGIT
frac
frac := decimal-point 1*DIGIT
int
int := zero / ( digit1-9 *DIGIT )
string
string := quotation-mark *char quotation-mark
char
char := unescaped /
%x5C (
%x22 / ; " quotation mark U+0022
%x5C / ; \ reverse solidus U+005C
%x2F / ; / solidus U+002F
%x62 / ; b backspace U+0008
%x66 / ; f form feed U+000C
%x6E / ; n line feed U+000A
%x72 / ; r carriage return U+000D
%x74 / ; t tab U+0009
%x75 4HEXDIG ; uXXXX U+XXXX
)
quotation-mark
quotation-mark := %x22 ; "
unescaped
unescaped := %x20-21 / %x23-5B / %x5D-10FFFF ; Any code point except quotation mark, reverse solidus or ASCII control chars