Grammar json; Lexer number = int frac? exp?; int = '-'? d+; d = '0'..'9'; frac = '.' d+; exp = e d+; e = ('e'|'E') ('+'|'-')?; string = '"' (Any-'\\'-'"' | '\\'Any)* '"'; blank = (' '|'\n'|'\t')+; Parser Ignored blank; value = {object:} '{' members? '}' | {array:} '[' elements? ']' | {number:} number | {string:} string | {true:} 'true' | {false:} 'false' | {null:} 'null' ; members = {tail:} members ',' pair | {head:} pair ; pair = string ':' value ; elements = {tail:} elements ',' value | {head:} value ;