允许PEG.js语法定义中的引号和unicode

Spe*_*edy 4 javascript unicode quotes grammar pegjs

如何允许单引号和双引号,以及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\'?'

思考?

dan*_*dan 10

这个例子应该让你去.它支持单引号和双引号,也可以在字符串中进行转义.

在线编辑器中尝试一下.

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"; }
Run Code Online (Sandbox Code Playgroud)