返回顶部
首页 > 资讯 > 精选 >Parser中tokenizer.h如何使用
  • 894
分享到

Parser中tokenizer.h如何使用

2023-06-17 15:06:54 894人浏览 薄情痞子
摘要

Parser中tokenizer.h如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Parser目录下的tokenizer.h和tokenizer.cpp。python

Parser中tokenizer.h如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

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

  1. extern struct tok_state *PyTokenizer_FromString
    (const char *);   

  2. extern struct tok_state *PyTokenizer_FromFile
    (FILE *, char *, char *);   

  3. extern void PyTokenizer_Free(struct tok_state *);   

  4. 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本身的状态,也就是内部的私有成员的集合。部分定义如下:

  1.    

  2. struct tok_state {   

  3.    

  4.    

  5. char *buf;    

  6. char *cur;    

  7. char *inp;    

  8. char *end;    

  9. char *start;    

  10. int done;    

  11. FILE *fp;    

  12. int tabsize;    

  13. int indent;    

  14. int indstack[MAXINDENT];    

  15. int atbol;    

  16. int pendin;    

  17. char *prompt, *nextprompt;    

  18. int lineno;    

  19. int level;    

  20.    

  21. }; 

最重要的是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相关的内容的介绍,忘你会有所收获。

看完上述内容,你们掌握Parser中tokenizer.h如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Parser中tokenizer.h如何使用

本文链接: https://lsjlt.com/news/290214.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Parser中tokenizer.h如何使用
    Parser中tokenizer.h如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Parser目录下的tokenizer.h和tokenizer.cpp。Python...
    99+
    2023-06-17
  • Python中Parser怎么用
    这篇文章主要介绍了Python中Parser怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、介绍argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它...
    99+
    2023-06-15
  • python parser模块怎么使用
    Python的parser模块是用来解析语法的工具,可以根据给定的语法规则将字符串解析为Python对象。在Python中,有两种常...
    99+
    2023-09-12
    python
  • Python中Parser的超详细用法实例
    目录1 前言2.使用方法2.1 实例化ArgumentParser2.2 使用add_argument函数添加参数 2.3 add_argument() 方法定义如何解析命...
    99+
    2024-04-02
  • 如何利用Log Parser将IIS日志保存到数据库
    这篇文章主要讲解了“如何利用Log Parser将IIS日志保存到数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用Log Parser将IIS日志保存到数据库”吧!一个小时把上一...
    99+
    2023-06-19
  • Nodejs中Express 常用中间件 body-parser 实现解析
    写在前面 body-parser是非常常用的一个express中间件,作用是对post请求的请求体进行解析。使用非常简单,以下两行代码已经覆盖了大部分的使用场景。 app.use(bodyParser....
    99+
    2022-06-04
    中间件 常用 Express
  • node.js中express中间件body-parser的介绍与用法详解
    前言 Node中的核心模块分两类:一类是自带的核心模块,如http、tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求。express在3.0版本中自带...
    99+
    2022-06-04
    详解 中间件 js
  • 使用JSX 建立组件 Parser(解析器)开发的示例
    目录JSX 环境搭建建立项目初始化 NPM安装 webpack安装 Babel配置 webpack安装 Babel-loader模式配置引入 JSXJSX 基本用法JSX 基础原理实...
    99+
    2024-04-02
  • javascript中$如何使用
    这篇文章主要介绍了javascript中$如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript $用法:1、【$()】可以是【$(expresion)】...
    99+
    2023-06-14
  • python中如何使用中文
    小编给大家分享一下python中如何使用中文,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用中文(以及其它非ASCII编码)在...
    99+
    2024-04-02
  • javascript中lastindexof()如何使用用
    小编给大家分享一下javascript中lastindexof()如何使用用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 在javascript中,lasti...
    99+
    2024-04-02
  • redis中zset如何使用
    这篇文章将为大家详细讲解有关redis中zset如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis中zset是set的一个升级版本,他在set的基础上增加了...
    99+
    2024-04-02
  • SQL中EXISTS如何使用
    这篇文章主要介绍了SQL中EXISTS如何使用,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。比如在Northwind数据库中有一个查询为SELE...
    99+
    2024-04-02
  • mysql中如何使用substr
    这篇文章将为大家详细讲解有关mysql中如何使用substr,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql substr函数是用来截取数据库某一列字段中的一部分...
    99+
    2024-04-02
  • mysql中如何使用all
    这篇文章主要介绍了mysql中如何使用all,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql中all的用法:1、all是“对于子查询返回...
    99+
    2024-04-02
  • mysql 中如何使用explain
    本篇文章为大家展示了mysql 中如何使用explain,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 重点是第二种用法,需要深入的了解。 先看一个例子: ...
    99+
    2024-04-02
  • mysql中insert如何使用
    mysql中insert如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  insert的语法  INSERT [LOW_PRIORIT...
    99+
    2024-04-02
  • MongoDB中regex如何使用
    MongoDB中regex如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Part1:写在最前使用MySQL或其他关系型...
    99+
    2024-04-02
  • MySQL中explain如何使用
    这篇文章将为大家详细讲解有关MySQL中explain如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。首先是一个比较实际的用法,查询语句我们可以查看执...
    99+
    2024-04-02
  • ORACLE 中ROWNUM如何使用
    这篇文章给大家介绍ORACLE 中ROWNUM如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作