欢迎来到PLY主页。 PLY是python的lex和yacc解析工具的实现。

简而言之,PLY只是简单的lex / yacc实现。以下是其基本功能列表:

它完全用Python实现。
它使用LR解析,这是相当有效的,非常适合于较大的语法。
PLY提供了大多数标准的lex / yacc功能,包括对空乘积,优先级规则,错误恢复的支持以及对歧义语法的支持。
PLY易于使用,并提供非常广泛的错误检查。
除了提供基本的lex / yacc功能之外,PLY不会尝试做更多或更少的事情。换句话说,它不是大型的解析框架,也不是大型系统的组成部分。
PLY的原始版本开发于2001年,用于“编译器简介”课程,学生可以使用它来为一种类似于Pascal的简单语言构建编译器。由于它在教学环境中的使用,因此提供了大量错误检查的工作量很大。此外,这种经验还用于解决常见的可用性问题。从那时起,对该系统进行了各种增量改进。
PyBison是一个框架,可以有效地将Bison和Flex“包装”到Python类结构中。

您定义一个解析器类,将标记和优先级定义为属性,并将目标解析为带有文档字符串中规则的方法,然后实例化并运行。

Black Magick发生在后台,每次yyparse()解析一个解析目标时,您都会得到回调。

但是PLY受到一些主要限制:

在词法分析器中使用“命名组”正则表达式创建了100个令牌的硬限制-不足以舒适地处理主要语言
纯python实现是一种便利,但是会带来残酷的性能损失
解析器引擎是SLR,不是完整的LALR(1)
其他框架则使用了一种奇怪的脚本语法

此外,需要安装下面工具:
Python
pip
GNU bison
flex
gcc等

python3精要(62)-编译与解释实践(1)相关推荐

  1. 编译与解释实践(1)-flex and bison 配置安装

    sudo dnf instal flex bison 下面先开始测试flex 编辑test.l %option noyywrap //增加的语句 %{int chars = 0; int words ...

  2. PL/0语言编译器扩展 编译原理课程实践(1)

    转眼大学生活就要结束,编译原理课程学的东西很多都忘记了.当时我们编译原理课程实践是PL/0语言编译器扩展,在原有PL/0语言文法进行扩展.我写这次博文一是为了回忆以前学的知识,加深记忆:二是和大家分享 ...

  3. 编译原理课程实践——实现一个初等函数运算语言的解释器或编译器

    编译原理课程实践--实现具有初等函数运算语言的解释器或编译器 作者:Sylvan Ding |转载请注明文章出处! 摘要:本文主要内容是设计词法分析器.语法分析器(LL(1).SLR(1))和语义分析 ...

  4. android将引入aot编译器,Android N混合使用AOT编译,解释和JIT三种运行时

    Android N引入了我们一种主要包含编译.解释和JIT(Just In Time)的混合系统运行时,以便在安装工作时间.内存占用.电池材料消耗和性能指标之间可以获得发展最好的折衷. ART在And ...

  5. 半编译半解释的Java语言和C++、Python等语言的区别

    1. 引言 我们编写的代码需要按照某些组织制定的规范,对于程序员来说,能够轻松理解:但是对于计算机来说,它们根本无法理解我们编写的代码,只能识别二进制指令. 2. 编译型语言(如C++)和解释型语言( ...

  6. python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...

    计算机执行源程序的两种方式:编译和解释 首先,了解一下静态语言,动态语言,目标代码,源代码. 动态类型语言(又称为脚本语言或扩建语言):在运行期进行类型检查的语言,也就是在编写代码的时候可以不指定变量 ...

  7. 理解python先编译后解释的特点

    理解python先编译后解释的特点 1. CPython默认的标准解释器编译器.JPython支持Java集成,可以生成Java字节码并在JVM中解释执行.IronPython支持.NET集成. 2. ...

  8. linux环境手动编译安装Nginx实践过程 附异常解决

    linux环境手动编译安装Nginx实践过程 附异常解决 参考文章: (1)linux环境手动编译安装Nginx实践过程 附异常解决 (2)https://www.cnblogs.com/david9 ...

  9. 编译程序、解释程序、汇编程序和编译、解释的概念

    计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行.这种"翻译"通常有 ...

最新文章

  1. 13、Power Query-逆透视列的解析(上)
  2. android 隐藏手机底部虚拟按键
  3. (NFS移植到arm上)编译portmap和nfs-utils
  4. C 之父:精通C 很难,但你一天之内就能学习使用C
  5. Zookeeper——入门介绍(相关原理、安装启动及使用操作)
  6. 我的第一个wp8小程序
  7. ARM指令集与Thumb指令集--区别关联--汇编指令 BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式
  8. mvc上传图片(上传和预览)webuploader
  9. Go 大败!Google 宣布 Fuchsia 终端开发只支持 C/C++/Dart
  10. 转贴:如何恢复Thunderbird里误删除的邮件?三种方法
  11. SQL开发技巧(二)
  12. My sql 存储过程实例
  13. mac刷新dns、windows刷新dns、刷新dns缓存命令
  14. 关于一次pkgs --update错误记录(cmd_package_update 451)
  15. vue实现网络监控摄像头直播拍照功能
  16. html选择按键点击后锁死输入框_js Dom为页面中的元素绑定键盘或鼠标事件
  17. cv2.VideoCapture(0)获取USB摄像头失败解决方案
  18. 深入理解 Python yield
  19. 小程序一个简单的订单界面
  20. 世界杯营销战,中国企业赢麻了

热门文章

  1. CentOS7.2最小化安装后系统优化
  2. Mybatis通过colliection属性递归获取菜单树
  3. Linux 进程间通讯详解五
  4. 批处理——服务器的web文件备份
  5. The Longest Increasing Subsequence (LIS)
  6. iOS多线程的初步研究(十)-- dispatch同步
  7. ubuntu12下subversion 1.6升级为1.8版本
  8. a:hover伪类在ios移动端浏览器内点击无效的解决方法
  9. MongoDB学习之(一)安装
  10. 解决Jsp与Java后台之间url传值中文乱码问题