cpp-peglib/grammar/json.peg
2022-06-28 16:45:17 -04:00

27 lines
731 B
Plaintext

# JSON grammar based on RFC 4627 (http://www.ietf.org/rfc/rfc4627.txt)
json <- object / array
object <- '{' (member (',' member)*)? '}' { no_ast_opt }
member <- string ':' value
array <- '[' (value (',' value)*)? ']'
value <- boolean / null / number / string / object / array
boolean <- 'false' / 'true'
null <- 'null'
number <- < minus int frac exp >
minus <- '-'?
int <- '0' / [1-9][0-9]*
frac <- ('.' [0-9]+)?
exp <- ([eE] [-+]? [0-9]+)?
string <- '"' < char* > '"'
char <- unescaped / escaped
escaped <- '\\' (["\\/bfnrt] / 'u' [a-fA-F0-9]{4})
unescaped <- [\u0020-\u0021\u0023-\u005b\u005d-\u10ffff]
%whitespace <- [ \t\r\n]*