八、编译器
完成解析任务后,解释器拥有了一棵抽象语法树,其包含 Python 代码的操作、函数、类以及命名空间。
**编译器(compiler)**的任务是将抽象语法树转换为 CPU 能理解的指令:
图片翻译:File Input: 文件输入,IO Stream Input:文件流输入,String Input:字符串输入,Reader:阅读器,Parser:解析器,Compiler:编译器
此编译任务会被分成两个组件:
编译器:遍历抽象语法树并创建一个控制流图(CFG),此图表示执行的逻辑顺序;
汇编器:将 CFG 中的节点转换为能按顺序执行的语句,被大家称为:字节码(bytecode)。
下图是编译过程的可视化展示:
图片翻译:Parser:解析器,AST:抽象语法树,CFG:控制流图,Assembler:汇编器,ByteCode:字节码,Execution:执行
在本章节中,你将会重点关注抽象语法树是如何被编译成一个 code object
。
PyAST_CompileObject()
是 CPython 编译器的主要入口之一。其将 Python 抽象语法树模块作为主要形参,其他形参还包括文件名和解释器早期创建的全局变量、局部变量和 PyArena
。
Last updated