吐槽:出的题目没有大佬做吗?俺很伤心哇
从本周开始我们正式进入Python的编译和解释环节。今天我们先来谈谈Python运行环节前的词法执行环节。
由于这部分开始都比较复杂,我会采用实际的例子来逐步分析。两章一篇,第一部分讲大致流程,第二部分讲详细实现过程。
词法分析的流程
本质上,Python提供了两种执行Python的方式:
PyRun_File系列
PyRun_String系列
故名思义,前者接受一个py文件进行编译->解释执行,而后者直接对一个符合Python语法的字符串进行编译->解释执行的过程。
为了减少篇幅,我们以后者进行举例,假设我们有一串Python代码,如下所示:
k = 5
print(k)
当我们键入上述代码后,Python会初始化运行环境,设置一系列的环境参数,创建Python虚拟机和对应的线程。(这块等我们实际讲到Python的虚拟机再深入探讨)
准备工作都OK以后,主要的工作流程都在token.h/.c里面了,
tok_state
词法解析通俗来讲是一个非常巨大的状态迁移过程,比如我们要记录当前解析到什么字符,这个字符是否可以和上一个合并或者开始新的状态解析。如果是新的状态解析,之前解析的字符是否需要进行回退等等。
因此,Python为了维护解析整个Python代码,设计了tok_state这个结构体:
struct tok_state {
/* Input state; buf <= c