Python代码中可能永远不会出现的字符序列示例?
这是一个相当理论化的问题,与Python的基本通用语法有关。我正在寻找一个字符序列(*1)的示例,它在Python程序中出现时,无论上下文如何(*2),都会始终导致语法错误。例如,序列Python代码中可能永远不会出现的字符序列示例?,python,syntax,syntax-error,complexity-theory,Python,Syntax,Syntax Error,Complexity Theory,这是一个相当理论化的问题,与Python的基本通用语法有关。我正在寻找一个字符序列(*1)的示例,它在Python程序中出现时,无论上下文如何(*2),都会始终导致语法错误。例如,序列a[0)不是正确的示例,因为程序 s = 'a[0)' 是完全有效的。我想要的是一个字符序列,无论它在源代码中出现在哪里,都会导致语法错误!(哦,当然,这个序列中的所有字符都必须是单独允许在Python程序中出现的字符) (编辑:下面的blockquoted示例是错误的,因为换行符可能以三重引号的字符串出现。感谢
a[0)
不是正确的示例,因为程序
s = 'a[0)'
是完全有效的。我想要的是一个字符序列,无论它在源代码中出现在哪里,都会导致语法错误!(哦,当然,这个序列中的所有字符都必须是单独允许在Python程序中出现的字符)
(编辑:下面的blockquoted示例是错误的,因为换行符可能以三重引号的字符串出现。感谢ekhumoro的相关评论!)
我怀疑序列“newline quote newline”是被禁止的,
因为换行符可能不会出现在带引号的字符串中:所以,
如果第一个换行符没有导致语法错误,则
表示引号字符开始一个带引号的字符串,然后
第二个换行符将导致语法错误
在我看来,一个基本上有缺陷的序列可能是
(这里编辑了一些错误:感谢Ekhumaro的注意!)
(其中
表示换行符),因为其中一个[)
必须出现在带引号的字符串之外,而字符串不能出现在注释中,因为首字母代码>
然而,我对Python语法的详细信息了解不够,无法确保上述示例是正确的:可能存在一些奇怪的上下文,比仅引用字符串更微妙,允许使用上述字符序列?也许Python语法的全部细节甚至使构建任何错误实际上变得不可能比如我在找什么
(为了更清晰,添加了编辑)
所以,实际上我的问题是,规范是否允许您在某个时候定义一种新的引用上下文:Python规范中是否有某种东西说,唯一可能引用的上下文是“…”、“…”、“…”、“…”、“…”和“#”… (可能还有一些我目前还不知道的内容),或者你可以根据自己的意愿设计新的引用上下文?或者你可以让你的程序以一种编解码器开始,然后你可以用一种完全不同于Python的任意语言编写程序的续集
(*1)在这个问题的第一个版本中,我写的是“字节”而不是“字符”,因为我不想被奇怪的Unicode字符所困扰;但这使问题有可能转化为编码问题……因此,让我们假设我们使用的是固定编码,其可接受字符集是固定的和众所周知的(为了更简单起见,比如说ASCII)
(*2)仅供参考,我的问题的目的是强调通用图灵机(带有自定界程序)的语言与通用编程语言在Kolmogorov复杂性背景下的差异
注:对于其他(解释的)现实生活中的语言,同样的问题的答案也很受欢迎:-)序列“''''''''''''[)'”“''''[)”
是有效的,包括您的示例。此外,三重引号字符串可以跨多行,因此新行引号新行是不被禁止的。@ekhumoro:该死,您的所有评论都非常正确:我在问题的初始版本中遗漏了所有这些要点…:-S我相应地编辑了问题。这是几年前在code Golf上出现的。See@user2357112supportsMonica:这正是我的问题!8-D请让你评论一个答案,以便我可以验证它:-)序列“[)”“[)”“[)””
是有效的,包括您的示例。此外,三重引号字符串可以跨多行,因此新行引号新行是不被禁止的。@ekhumoro:该死,您的所有评论都非常正确:我在问题的初始版本中遗漏了所有这些要点…:-S我相应地编辑了问题。这是几年前在code Golf上出现的。See@user2357112supportsMonica太棒了:这正是我的问题!8-D请让你评论一个答案,这样我就可以验证它:-)
'[)"[)'''[)"""[)'[)"[)'''[)"""[)