2013-06-03 27 views
0

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

我有以下几点:

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

escapedString是因为如果没有明确的规定,但应该接受任何人会合理预期的编程语言中的字符串来接受。我想不出从哪里开始。有没有人有什么建议?

+1

也许你可以从其他语言的字符串规范中获得创意。 [Here](http://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals)是Python的。 – Kevin

回答

2

我不知道节俭的语法,但在正则表达式风格的一个我会做这样的事情:

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

即你需要为每一种串的不同逃脱串,每发可能是空字符序列,它们不是结束引号字符或转义字符。

-1

你可能想在这里做两件事。首先是在字符串前添加前缀r。您可能想要做的另一件事是使用三重引号,例如"""。前缀的使用将使得字符串中的转义序列“按照与标准C所使用的规则相似的规则进行解释”。其次是照顾任何额外的引号/撇号,否则会使您的字符串提早退出。

请看下面的例子:

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

是否也有你喂养你的字符串中的三重引号,这可能无法正常工作;我不确定如何处理这个问题。

+0

我不是在处理python字符串,而是试图编写一个语法来使用链接的库来解析类似于任意字符串中的python字符串的字符串。 – Drakekin

相关问题