python tokenizer,用Python词法分析Parser中tokenizer.h的实际应用
如果你在对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的实际应用相关推荐
- python小练——下载指定url中的图片
python小练--下载指定url中的图片 #coding=gbk #download pictures of the url #useage: python downpicture.py www.b ...
- Python 爬虫实战:分析豆瓣中最新电影的影评
Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...
- 超好用Python小功能(持续更新中)
文章目录 一.字符串操作小功能 1.把数字转为千位数值类型 2.检测字符串是不是纯数字 3.python列表的交.并.差集 4.对列表中字典中的字典排序 5.python 求角度大小 6.已知一个点, ...
- python调用everything批量查找表格中的文件名在磁盘中是否存在
python调用everything批量查找表格中的文件名在磁盘中是否存在 介绍 Everything 配置 使用openpyxl读写文件 读文件 写文件 BeautifulSoup的使用 创建 be ...
- Python分析离散心率信号(中)
Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...
- 使用Python,OpenCV从静态背景中提取移动前景
使用Python,OpenCV从静态背景中提取移动前景 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍OpenCV中的背景减法方法--即从静态背景中提取移动前景.在许多基于视觉的应用中,背 ...
- python pandas库读取excel/csv中指定行或列数据详解
通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下 ...
- python如何使用ppip安装xlwt_Python中xlrd和xlwt模块使用方法
原博文 2017-07-05 21:30 − 本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xl ...
- python selenium 下拉列表_从下拉列表中选择python selenium选项
我试图使用下面的代码使用selenium(python)从网页上的下拉列表中选择一个选项.在from selenium import webdriver from selenium.webdriver ...
最新文章
- 计算机用英语bos,宏基电脑boss界面英文翻译,不知道的可以看看。
- php 回收周期(Collecting Cycles)
- CUDA学习----sp, sm, thread, block, grid, warp概念
- 场强和电阻_电阻定律及其相关问题
- ERP通用附件管理功能设计与实现
- 链表 -- 2.2.1 Add Two Numbers -- 图解
- 黑群晖linux删除文件夹命令,手把手教你黑群晖(二)
- 2020年西南交通大学数据仓库与数据挖掘期末考试题
- 804计算机考研,北京邮电大学804信号系统考研经验
- 2017CNCC会议总结(一)
- 51单片机仿真例程-八段数码管
- win10U盘重装无法进行,一直转圈加载,不进入安装界面超过半小时
- 计算机科学人工智能的应用,计算机人工智能技术的应用与发展.pdf
- 【CC精品教程】任务一:CC新建工程、添加照片、相机参数设置、选择坐标系统
- 杭电2317题 Nasty Hacks
- Failed to evaluate mask initialization commands
- javascript鼠标点击实现改变CSS样式
- 关于SLAM的系列很有价值的网文_拔剑-浆糊的传说_新浪博客
- java的各种jar下载网址
- 汽车行业软件之INCA简介
热门文章
- Android仿QQ空间底部菜单
- 标点符号在作文中的位置
- MicrosoftVisualStudio××配置IIS Express 失败,出现以下错误:初始化 applicationhost.config文件失败。找不到IIS Express
- h5 input,textarea属性placeholder样式修改
- SCADA平台在风电场测量的应用,实现风电场的高效管理
- halo博客:如何用又拍云搭建加速CDN
- 【PPD09】文件输入和输出
- java rectangle_rectangle函数参数 java中Rectangle 的用法
- gather() 的函数功能
- Android-第五节Menu菜单详解