diff --git a/src/preserves/pegs.nim b/src/preserves/pegs.nim index 8843c76..e9969e5 100644 --- a/src/preserves/pegs.nim +++ b/src/preserves/pegs.nim @@ -38,8 +38,7 @@ grammar "Preserves": exp <- 'e' * ?('-'|'+') * +Digit flt <- int * ((frac * exp) | frac | exp) - stringBody <- ?escape * *( +( {'\x20'..'\xff'} - {'"'} - {'\\'}) * *escape) - String <- '"' * stringBody * '"' + String <- '"' * *(escaped | (utf8.any - '"')) * '"' ByteString <- charByteString | hexByteString | b64ByteString charByteString <- '#' * >('"' * >(*binchar) * '"') diff --git a/tests/test_parser.nim b/tests/test_parser.nim index 0ef2cd8..ffcdd4e 100644 --- a/tests/test_parser.nim +++ b/tests/test_parser.nim @@ -9,6 +9,7 @@ const examples = [ ("""[1 2 3 4]""", "\xB5\x91\x92\x93\x94\x84"), ("""[-2 -1 0 1]""", "\xB5\x9E\x9F\x90\x91\x84"), (""""hello"""", "\xB1\x05hello"), +("""" \"hello\" """", "\xB1\x09 \"hello\" "), ("""["a" b #"c" [] #{} #t #f]""", "\xB5\xB1\x01a\xB3\x01b\xB2\x01c\xB5\x84\xB6\x84\x81\x80\x84"), ("""-257""", "\xA1\xFE\xFF"), ("""-1""", "\x9F"),