diff --git a/grammar/csv.peg b/grammar/csv.peg index 1ddf0ad..8ace87d 100644 --- a/grammar/csv.peg +++ b/grammar/csv.peg @@ -1,6 +1,4 @@ -# # CSV grammar based on RFC 4180 (http://www.ietf.org/rfc/rfc4180.txt) -# file <- (header NL)? record (NL record)* NL? header <- name (COMMA name)* diff --git a/grammar/json.peg b/grammar/json.peg new file mode 100644 index 0000000..75bf4d2 --- /dev/null +++ b/grammar/json.peg @@ -0,0 +1,26 @@ +# 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]*