Python 是否有一个简单的算法来检测每个作用域的起始字符和结束字符?

Python 是否有一个简单的算法来检测每个作用域的起始字符和结束字符?,python,string,parsing,Python,String,Parsing,下面的图片图说明看起来有点复杂,但非常简单。我需要为我的实验项目提供一个算法,将python代码作为普通的字符串进行分析 我想检测每个作用域的所有起始字符和结束字符,并将它们输出到一个数组中,如图所示。它们中的一些必须被完全相同地复制几次,因为它必须显示它是多个初学者的ender字符,就像普通的花括号语言一样,它会这样显示:{hi{hello{my friend}}} 有简单的算法吗?谢谢。这听起来像是模块的工作,模块将字符串处理为Python标记序列。缩进块的开始和结束被报告为缩进和删除标记

下面的图片图说明看起来有点复杂,但非常简单。我需要为我的实验项目提供一个算法,将python代码作为普通的字符串进行分析

我想检测每个作用域的所有起始字符和结束字符,并将它们输出到一个数组中,如图所示。它们中的一些必须被完全相同地复制几次,因为它必须显示它是多个初学者的ender字符,就像普通的花括号语言一样,它会这样显示:
{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和理解。(如果循环体足够简单,您可以在单行上写入循环。)