如何使PyParsing识别x转义



我想使用PyParsing来解析基于bnf的规则。一个规则可能看起来像:

A -> 'You can use xABCD to display hexadecimal numbers'

其中A为非终结符符号。赋值操作数是'->'。最后一项是带引号的字符串。

我以以下方式使用PyParsing:

Left= Word(alphanums)
Op = oneOf('= := -> ::=')
Right = QuotedString('"') | QuotedString("'")
Rule = Left+ Op+ Right
Rule.parseString("A -> '_x5555 a'")  # Get an error of ValueError: invalid x escape

那么你能告诉我如何用QuotedString来识别x转义吗?

如果要在输入字符串中嵌入'',请确保在引号前加上'r',以便Python解释器留下所有'',而不是将它们解释为转义。

从Python控制台(Python 3.3):

>>> Left= Word(alphanums)
>>> Op = oneOf('= := -> ::=')
>>> Right = QuotedString('"') | QuotedString("'")
>>> Rule = Left+ Op+ Right
>>> Rule.parseString("A -> '_x5555 a'")
(['A', '->', '_U55 a'], {})
>>> Rule.parseString(r"A -> '_x5555 a'")  # use a raw string literal, with r""
(['A', '->', '_\x5555 a'], {})

\转义:

"A -> '_\x5555 a'"

最新更新