Add more flexibility in how whitespace is specified.
[gazelle.git] / sketches / json.gzl
blob9693c6fbed6dad29396914280c6a7a64b0b4d091
2 // Grammar for JSON, as defined at json.org.
4 @start object;
6 object   -> "{" (string ":" value) *(,) "}";
7 array    -> "[" value *(,)              "]";
9 str_frag -> .chars=/[^\\"]+/ |
10             .unicode_char=/\\u ([0-9A-Fa-f]{4})/ |
11             .backslash_char=/\\[ntbr"\/\\]/;
12 string   -> '"' str_frag* '"';
14 number   -> .sign="-"?
15             .integer=/ 0 | ([1-9][0-9]*) /
16             .decimal=/ \. [0-9]+ /?
17             .exponent=/ [eE] [+-]? [0-9]+ /? ;
19 value    -> string | number | "true" | "false" | "null" | object | array;
21 whitespace -> .whitespace=/[\r\n\s\t]+/;
23 @allow whitespace object ... value, string;
24 @allow whitespace array ... value;