WHITESPACE = _{ " " | "\t" | "\r" | "\n" }
char = _{
!("|" | "\\") ~ ANY
| "\\" ~ ("|" | "\\" | "/" | "b" | "f" | "n" | "r" | "t")
| "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
}
prefix = @{ ( LETTER | NUMBER | "&" | "#" | "@" | "^" | "." )+ }
value = @{ char* }
separator = _{ ";" | "," }
primitive = ${ ( prefix ~ ( "|" ~ value ~ "|" )? ) | ( ( prefix )? ~ "|" ~ value ~ "|" ) }
pair = { primitive ~ ":" ~ item }
map_value = _{ "{" ~ "}" | "{" ~ pair ~ (separator ~ pair)* ~ (separator)? ~ "}" }
map = { prefix ~ map_value | map_value }
vector_item = _{ "[" ~ "]" | "[" ~ primitive ~ (separator ~ primitive)* ~ (separator)? ~ "]" }
vector = { prefix ~ vector_item | vector_item }
item = _{ map | vector | primitive }
document = { SOI ~ pair ~ ( separator ~ pair )* ~ (separator)? ~ EOI }