python 源码编译
- PyTokenizer_FromFile函数位于Parser/parsetok.c从左到右扫描python源文件,从上到下标记文件的内容
- 解析树生成规则都在Include/token.h(终端)和Include/graminit.h(终端)头文件中指定
- PyAST_FromNode函数Python/ast.c处理从给定的解析树生成AST。生成AST后,现在可以从AST生成字节码了
1
2
3
4
5
6
7
8
9import parser
cst = parser.suite('print "Hello World"')
print cst.tolist()
# [257, [267, [268, [269, [272, [1, 'print'], [304, [305, [306, [307, [308, [310, [311, [312, [313, [314, [315, [316, [317, [318, [3, '"Hello World"']]]]]]]]]]]]]]]]], [4, '']]], [4, ''], [0, '']]
import ast
astrst = ast.parse('print "Hello World"')
print ast.dump(astrst)
# Module(body=[Print(dest=None, values=[Str(s='Hello World')], nl=True)]) - 构建符号表(不懂)作用域相关识别
- 从AST到代码对象(表达式是中序遍历,在计算机运算是采用后序遍历) pyc
概括
Python的整体架构可分为3个模块,一个是内建模块. 一个是python内核, 一个是python虚拟机.
内建模块就诸如 import os 时,这个os就是Python的内建模块.Python内核就包括定义Python的对象/类型系统,处理垃圾回收机制等.虚拟机就是解释器,对Python代码进行词法语法分析等.