python-源码阅读(1)-python代码编译

python 源码编译

  1. PyTokenizer_FromFile函数位于Parser/parsetok.c从左到右扫描python源文件,从上到下标记文件的内容
  2. 解析树生成规则都在Include/token.h(终端)和Include/graminit.h(终端)头文件中指定
  3. PyAST_FromNode函数Python/ast.c处理从给定的解析树生成AST。生成AST后,现在可以从AST生成字节码了
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import 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)])
  4. 构建符号表(不懂)作用域相关识别
  5. 从AST到代码对象(表达式是中序遍历,在计算机运算是采用后序遍历) pyc

概括

Python的整体架构可分为3个模块,一个是内建模块. 一个是python内核, 一个是python虚拟机.

内建模块就诸如 import os 时,这个os就是Python的内建模块.Python内核就包括定义Python的对象/类型系统,处理垃圾回收机制等.虚拟机就是解释器,对Python代码进行词法语法分析等.