3 PLY概要

优质
小牛编辑
120浏览
2023-12-01

PLY 包含两个独立的模块:lex.py 和 yacc.py,都定义在 ply 包下。lex.py 模块用来将输入字符通过一系列的正则表达式分解成标记序列,yacc.py 通过一些上下文无关的文法来识别编程语言语法。yacc.py 使用 LR 解析法,并使用 LALR(1)算法(默认)或者 SLR 算法生成分析表。

这两个工具是为了一起工作的。lex.py 通过向外部提供token()方法作为接口,方法每次会从输入中返回下一个有效的标记。yacc.py 将会不断的调用这个方法来获取标记并匹配语法规则。yacc.py 的功能通常是生成抽象语法树(AST),不过,这完全取决于用户,如果需要,yacc.py 可以直接用来完成简单的翻译。

就像相应的 unix 工具,yacc.py 提供了大多数你期望的特性,其中包括:丰富的错误检查、语法验证、支持空产生式、错误的标记、通过优先级规则解决二义性。事实上,传统 yacc 能够做到的 PLY 都应该支持。

yacc.py 与 Unix 下的 yacc 的主要不同之处在于,yacc.py 没有包含一个独立的代码生成器,而是在 PLY 中依赖反射来构建词法分析器和语法解析器。不像传统的 lex/yacc 工具需要一个独立的输入文件,并将之转化成一个源文件,Python 程序必须是一个可直接可用的程序,这意味着不能有额外的源文件和特殊的创建步骤(像是那种执行 yacc 命令来生成 Python 代码)。又由于生成分析表开销较大,PLY 会缓存生成的分析表,并将它们保存在独立的文件中,除非源文件有变化,会重新生成分析表,否则将从缓存中直接读取。

最后更新:

类似资料

  • 介绍 iSlider是一个表现出众,无任何插件依赖的手机平台javascript滑动组件。它能够处理任何元素,例如图片或者DOM元素。 特性 优秀的性能,更少的内存占用; 提供丰富的动画切换效果,自带的效果包括 default, rotate, depth, flow, flip, card, fade 等,并且可以进行无限的扩展; 提供丰富的回调触发器,并且添加回调函数极为方便,无论在初始化还是

  • 输入和输出 下图是Graph::Easy的概要图,输入是绿色,直接输出是橘黄色,白色是组成节点。黄色的节点是使用第三方模块支持的格式输出。 有很多种方式创建Graph::Easy内部支持的数据结构: 使用交互式编辑器(没有实现) 使用Graph::Easy能理解的文本格式(graphviz, VCG, GDL, Graph::Easy)然后使用命令行工具graph-easy来解析并产生输出(这个工

  • Webpack也做类似热部署和代码优化,我们没有覆盖。有关更多信息,您可以查看。源代码也可以在Github上获得。

  • 百度搜索用户体验中心 《Web设计指南》是专门为广大Web内容生态提供一套简单实用的设计指南,目的是提升设计与开发的效率及质量,为广大用户提供优质的用户体验。 Web内容数以千亿涵盖生活各个方面,除了稳定流畅的浏览,优质的内容及服务,也需要高质量的交互及视觉体验。 基于百度新使命以及百度搜索开放的生态特征,我们提供适合第三方的设计指南与直观的案例参照。 设计指南会根据Web生态的发展不断更新优化,

  • 前言 需要了解的是 dva 是对 redux 的一层浅封装,所以虽然我们不要求一定要了解 redux 才能学会使用 dva,但是如果你对 redux 有所了解,再使用 dva 一定驾轻就熟,并且会了解很多潜在的知识点。redux的社区较为成熟,文档也比较健全,可以访问 http://redux.js.org(中文文档)查看更多内容,其中会介绍整个生态系统的相关框架与设计思路,值得一看。 开始 在

  • 智齿科技是业内首家以人工智能整合云呼叫中心、机器人客服、人工在线客服、工单系统的统一客服平台厂商,提供客户服务一站式解决方案。 不管你的客户来自于桌面网站,移动网站,微博,微信,App,智齿客服都会统一进行响应和管理 智齿客服融合了在线客服+机器人客服+呼叫中心+工单系统+AI大数据分析平台+开发平台六大产品模块,客户互通,数据互通,一款系统解决所有客服问题 在线及电话接待的客户,通过“获客-吸引