python的词法_Python的词法分析

本文介绍了Python运行前的词法分析环节,通过PyRun_String系列为例,阐述词法分析的主要流程。内容涉及Python如何初始化环境、创建虚拟机,重点解析tok_state结构体的作用,包括buf、cur、inp等关键字段,并提及编码处理和文件头部的编码声明。
摘要由CSDN通过智能技术生成

吐槽:出的题目没有大佬做吗?俺很伤心哇

从本周开始我们正式进入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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值