examples: annotate examples
[nit.git] / contrib / nitcc / examples / json.sablecc
index 1c02ba2..0de8914 100644 (file)
@@ -9,7 +9,18 @@ frac = '.' d+;
 exp = e d+;
 e = ('e'|'E') ('+'|'-')?;
 
-string = '"' (Any-'\\'-'"' | '\\'Any)+ '"';
+hexdig = '0'..'9' | 'a'..'z' | 'A'..'Z';
+string = '"' (Any - '\\' - '"' | '\\' (
+               '\\' |
+               '"' |
+               '/' |
+               'b' |
+               'f' |
+               'n' |
+               'r' |
+               't' |
+               'u' hexdig hexdig hexdig hexdig
+       ))* '"';
 
 blank = (' '|'\n'|'\t')+;
 
@@ -19,12 +30,12 @@ Ignored blank;
 value =
        {object:} '{' members? '}' |
        {array:} '[' elements? ']' |
-       number |
-       string |
-       'true' |
-       'false' |
-       'null' ;
+       {number:} number |
+       {string:} string |
+       {true:} 'true' |
+       {false:} 'false' |
+       {null:} 'null' ;
 
-members = members ',' pair | pair ;
+members = {tail:} members ',' pair | {head:} pair ;
 pair = string ':' value ;
-elements = elements ',' value | value ;
+elements = {tail:} elements ',' value | {head:} value ;