如果你在对Python词法分析的实际操作中,你对其有不解之处时,你就可以点击以下的文章对其进行了解,希望你对相关Python词法分析的实现在Parser目录下的tokenizer.h和tokenizer.cpp的内容有所了解。

在Python词法分析的实现在Parser目录下的tokenizer.h和tokenizer.cpp。Python的其他部分会直接调用tokenizer.h中定义的函数,如下:

extern struct tok_state *PyTokenizer_FromString

(const char *);

extern struct tok_state *PyTokenizer_FromFile

(FILE *, char *, char *);

extern void PyTokenizer_Free(struct tok_state *);

extern int PyTokenizer_Get(struct tok_state *,

char **, char **);

这些函数均以PyTokenizer开头。这是Python源代码中的一个约定。虽然Python是用C语言实现的,其实现方式借鉴了很多面对对象的思想。拿词法分析来说,这四个函数均可以看作PyTokenizer的成员函数。头两个函数PyTokenizer_FromXXXX可以看作是构造函数,返回PyTokenizer的instance。

PyTokenizer对象内部状态,也就是成员变量,储存在tok_state之中。PyTokenizer_Free可以看作是析构函数,负责释放PyTokenizer,也就是tok_state所占用的内存。PyTokenizer_Get则是PyTokenizer的一个成员函数,负责取得在字符流中下一个Token。

Python词法分析中这两个函数均需要传入tok_state的指针,和C++中需要隐含传入this指针给成员函数的道理是一致的。可以看到,OO的思想其实是和语言无关的,即使是C这样的结构化的语言,也可以写出面对对象的程序。

tok_state

tok_state等价于PyTokenizer这个class本身的状态,也就是内部的私有成员的集合。部分定义如下:

/* Tokenizer state */

struct tok_state {

/* Input state; buf<= cur<= inp<= end */

/* NB an entire line is held in the buffer */

char *buf; /* Input buffer, or NULL; malloc'ed if

fp != NULL */

char *cur; /* Next character in buffer */

char *inp; /* End of data in buffer */

char *end; /* End of input buffer if buf != NULL */

char *start; /* Start of current token if not NULL */

int done; /* E_OK normally, E_EOF at EOF, otherwise

error code

/* NB If done != E_OK, cur mustbe== inp!!! */

FILE *fp; /* Rest of input; NULL if tokenizing a

string */

int tabsize; /* Tab spacing */

int indent; /* Current indentation index */

int indstack[MAXINDENT]; /* Stack of indents */

int atbol; /* Nonzero if at begin of new line */

int pendin; /* Pending indents (if>0) or dedents

(if<0) */

char *prompt, *nextprompt; /* For interactive

prompting */

int lineno; /* Current line number */

int level; /* () [] {} Parentheses nesting level */

/* Used to allow free continuations inside them */

};

最重要的是buf, cur, inp, end, start。这些field直接决定了缓冲区的内容:

buf是缓冲区的开始。假如PyTokenizer处于字符串模式,那么buf指向字符串本身,否则,指向文件读入的缓冲区。cur指向缓冲区中下一个字符。inp指向缓冲区中有效数据的结束位置。PyTokenizer是以行为单位进行处理的,每一行的内容存入从buf到inp之间,包括\n。一般情况下 ,PyTokenizer会直接从缓冲区中取下一个字符,一旦到达inp所指向的位置,就会准备取下一行。

当PyTokenizer处于不同模式下面,具体的行为会稍有不同。end是缓冲区的结束,在字符串模式下没有用到。start指向当前token的开始位置,如果现在还没有开始分析token,start为NULL。以上就是对在Python词法分析的实现在Parser目录下的tokenizer.h和tokenizer.cpp相关的内容的介绍,忘你会有所收获。

【编辑推荐】

【责任编辑:孙巧华 TEL:(010)68476606】

点赞 0

python tokenizer,用Python词法分析Parser中tokenizer.h的实际应用相关推荐

  1. python小练——下载指定url中的图片

    python小练--下载指定url中的图片 #coding=gbk #download pictures of the url #useage: python downpicture.py www.b ...

  2. Python 爬虫实战:分析豆瓣中最新电影的影评

    Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...

  3. 超好用Python小功能(持续更新中)

    文章目录 一.字符串操作小功能 1.把数字转为千位数值类型 2.检测字符串是不是纯数字 3.python列表的交.并.差集 4.对列表中字典中的字典排序 5.python 求角度大小 6.已知一个点, ...

  4. python调用everything批量查找表格中的文件名在磁盘中是否存在

    python调用everything批量查找表格中的文件名在磁盘中是否存在 介绍 Everything 配置 使用openpyxl读写文件 读文件 写文件 BeautifulSoup的使用 创建 be ...

  5. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  6. 使用Python,OpenCV从静态背景中提取移动前景

    使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...

  7. python pandas库读取excel/csv中指定行或列数据详解

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...

  8. python如何使用ppip安装xlwt_Python中xlrd和xlwt模块使用方法

    原博文 2017-07-05 21:30 − 本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xl ...

  9. python selenium 下拉列表_从下拉列表中选择python selenium选项

    我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...

最新文章

  1. 计算机用英语bos,宏基电脑boss界面英文翻译,不知道的可以看看。
  2. php 回收周期(Collecting Cycles)
  3. CUDA学习----sp, sm, thread, block, grid, warp概念
  4. 场强和电阻_电阻定律及其相关问题
  5. ERP通用附件管理功能设计与实现
  6. 链表 -- 2.2.1 Add Two Numbers -- 图解
  7. 黑群晖linux删除文件夹命令,手把手教你黑群晖(二)
  8. 2020年西南交通大学数据仓库与数据挖掘期末考试题
  9. 804计算机考研,北京邮电大学804信号系统考研经验
  10. 2017CNCC会议总结(一)
  11. 51单片机仿真例程-八段数码管
  12. win10U盘重装无法进行,一直转圈加载,不进入安装界面超过半小时
  13. 计算机科学人工智能的应用,计算机人工智能技术的应用与发展.pdf
  14. 【CC精品教程】任务一:CC新建工程、添加照片、相机参数设置、选择坐标系统
  15. 杭电2317题 Nasty Hacks
  16. Failed to evaluate mask initialization commands
  17. javascript鼠标点击实现改变CSS样式
  18. 关于SLAM的系列很有价值的网文_拔剑-浆糊的传说_新浪博客
  19. java的各种jar下载网址
  20. 汽车行业软件之INCA简介

热门文章

  1. Android仿QQ空间底部菜单
  2. 标点符号在作文中的位置
  3. MicrosoftVisualStudio××配置IIS Express 失败,出现以下错误:初始化 applicationhost.config文件失败。找不到IIS Express
  4. h5 input,textarea属性placeholder样式修改
  5. SCADA平台在风电场测量的应用,实现风电场的高效管理
  6. halo博客:如何用又拍云搭建加速CDN
  7. 【PPD09】文件输入和输出
  8. java rectangle_rectangle函数参数 java中Rectangle 的用法
  9. gather() 的函数功能
  10. Android-第五节Menu菜单详解