2

我正在尝试使用 python 库parsimonious为小型语言实用程序编写语法,但我正在努力编写一个涵盖字符串的部分,尤其是带有转义引号和其他特殊字符的字符串。

我有以下内容:

string         = doubleString / singleString
doubleString   = "\"" escapedString "\""
singleString   = "'" escapedString "'"

escapedString好像还没有定义,但应该接受任何人们合理地期望编程语言中的字符串接受的东西。我想不出从哪里开始。有没有人有什么建议?

4

2 回答 2

4

我不知道简约的语法,但在正则表达式风格的语法中,我会做类似的事情:

string         = doubleString / singleString
doubleString   = ~'"([^"]|(\"))*"'
singleString   = ~"'([^']|(\'))*'"

即,对于每种类型的字符串,您都需要一个不同的转义字符串,每个字符串都由一个可能为空的字符序列组成,这些字符不是结束引号字符或转义结束引号字符。

于 2013-06-03T21:48:12.200 回答
-1

你可能想在这里做两件事。第一个是r在字符串之前添加前缀。您可能想要做的另一件事是使用三引号,即""". 前缀的使用将使得字符串中的转义序列“根据类似于标准 C 使用的规则解释”。第二个是处理任何额外的引号/撇号,否则会使您的字符串提前退出。

考虑以下示例:

string = r"""this %is m%y crazy s"\tri""'""ng\s\n%\d\\r''\'"""
print string

如果您输入的字符串中也有三引号,这可能不起作用;我不确定如何处理这个问题。

于 2013-06-03T21:12:02.493 回答