examples/json.pegjs: Fix the "unescaped" rule

The "unescaped" rule was created by mechanically translating original
RFC 7159 rule:

  unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

into:

  unescaped = [\x20-\x21\x23-\x5B\x5D-\u10FFFF]

However, this mechanical translation was incorrect as PEG.js grammars
don't have 6-digit Unicode escape sequences. Sequence "\u10FFFF" was
interpreted as "\u10FF" followed by two "F" characters.

This commit rewrites the "unescaped" rule into a form which, while not
being a mechanical translation of the original rule, matches the same
characters in the whole Unicode range. It also macthes textual
description of string representation in RFC 7159:

  All Unicode characters may be placed within the quotation marks,
  except for the characters that must be escaped: quotation mark,
  reverse solidus, and the control characters (U+0000 through U+001F).

Fixes #417.
redux
David Majda 8 years ago
parent 6a04067a76
commit f07ab7f32e

@ -123,7 +123,7 @@ char
escape = "\\" escape = "\\"
quotation_mark = '"' quotation_mark = '"'
unescaped = [\x20-\x21\x23-\x5B\x5D-\u10FFFF] unescaped = [^\0-\x1F\x22\x5C]
/* ----- Core ABNF Rules ----- */ /* ----- Core ABNF Rules ----- */

Loading…
Cancel
Save