Python 是否有一个简单的算法来检测每个作用域的起始字符和结束字符?
下面的图片图说明看起来有点复杂,但非常简单。我需要为我的实验项目提供一个算法,将python代码作为普通的字符串进行分析 我想检测每个作用域的所有起始字符和结束字符,并将它们输出到一个数组中,如图所示。它们中的一些必须被完全相同地复制几次,因为它必须显示它是多个初学者的ender字符,就像普通的花括号语言一样,它会这样显示:Python 是否有一个简单的算法来检测每个作用域的起始字符和结束字符?,python,string,parsing,Python,String,Parsing,下面的图片图说明看起来有点复杂,但非常简单。我需要为我的实验项目提供一个算法,将python代码作为普通的字符串进行分析 我想检测每个作用域的所有起始字符和结束字符,并将它们输出到一个数组中,如图所示。它们中的一些必须被完全相同地复制几次,因为它必须显示它是多个初学者的ender字符,就像普通的花括号语言一样,它会这样显示:{hi{hello{my friend}}} 有简单的算法吗?谢谢。这听起来像是模块的工作,模块将字符串处理为Python标记序列。缩进块的开始和结束被报告为缩进和删除标记
{hi{hello{my friend}}}
有简单的算法吗?谢谢。这听起来像是模块的工作,模块将字符串处理为Python标记序列。缩进块的开始和结束被报告为缩进和删除标记,您正在查找前面第一个标记中包含非空白文本的最后一个字符
tokenize
足够聪明,可以识别以下示例中没有缩进块(如Python所定义的):
'''
This is a multi-line string literal,
so indentation inside it isn't syntactically significant.
'''
# This is implicit line continuation, despite the presence of a colon.
function = (lambda x:
x**2 + 2*x - 1)
然而,它只是一个标记器,而不是解析器。它无法识别无效语法,除非该语法类似于?
,而该语法不是有效的标记
tokenize
将源位置报告为(行、列)
元组,行从1开始,列从0开始(这有点奇怪),但如果需要,您可以将其处理回字符串索引。是的,我上传了一幅图像,“图形解释”,您可以单击它,然后查看))@leodevbro,martineau指出,发布代码(作为文本)比发布图像更好。您可以同时发布代码(您尝试过的代码)和图像解释,但这并不是我们遇到问题的代码图像。这不是我们需要调试的代码,也不是我们有理由运行的东西——这是一个解释问题目标的图表,它是以特定的方式分析代码。我说这个图像很好。你应该试着定义一下你所说的“范围”是什么意思。通常的含义与标识符的可见性有关;根据该定义,显示的所有块都不是范围。(即,i
、j
和k
是全局变量;它们的作用域是整个文件。)另一方面,存在与缩进无关的作用域(因此不以换行符终止);这些包括lambdas和理解。(如果循环体足够简单,您可以在单行上写入循环。)