5

一重引用符と二重引用符、および PEG.js 文法定義内の Unicode 文字をどのように許可しますか? より具体的には、一重引用符と二重引用符の両方を含むことができる文字列 (\ でエスケープする必要がある可能性が最も高い) とすべての Unicode 文字をキャプチャできるようにしたいと考えています。

現時点では、次のようなものがあります。

_ name:$(PROP_ASCII+) CHAR_SQ val:$(PROP_ASCII_INNER*) CHAR_SQ

次のようなものをキャプチャします

key'value'

PROP_ASCII* は次のように定義されます

PROP_ASCII = [!-&(-<>-~] PROP_ASCII_INNER = [ -&(-~]

したがって、値に標準のASCII文字が含まれ、単一引用符が含まれていない場合、これはうまく機能します...しかし、上記で説明したことをサポートしたいので、次のようなことが可能になります:

key'somé\'value\'☂'

考え?

4

2 に答える 2

14

この例で理解できるはずです。文字列内でエスケープできる一重引用符と二重引用符の両方をサポートしています。

オンライン エディタで試してみてください。

Value
  = '"' chars:DoubleStringCharacter* '"' { return chars.join(''); }
  / "'" chars:SingleStringCharacter* "'" { return chars.join(''); }

DoubleStringCharacter
  = !('"' / "\\") char:. { return char; }
  / "\\" sequence:EscapeSequence { return sequence; }

SingleStringCharacter
  = !("'" / "\\") char:. { return char; }
  / "\\" sequence:EscapeSequence { return sequence; }

EscapeSequence
  = "'"
  / '"'
  / "\\"
  / "b"  { return "\b";   }
  / "f"  { return "\f";   }
  / "n"  { return "\n";   }
  / "r"  { return "\r";   }
  / "t"  { return "\t";   }
  / "v"  { return "\x0B"; }
于 2015-12-01T11:29:29.813 に答える