A first pass at subparsers (whitespace ignoring).
[gazelle.git] / sketches / json.gzl
blobf2f149cf8d172d480d12eb73e078ac4ae1e80868
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...string;