首页 > 编程知识 正文

python可视化库(python数据可视化网页)

时间:2023-05-03 06:54:55 阅读:87121 作者:2169

原题|可视化透视

作者|hxsdswvanrossum(python之父) () ) () ) ) ) ) ) ) ) ) ) ) ) ) )而言,也就是说。

译者|豌豆花下的猫(《Python猫》公众号的作者) ) ) )。

声明|本翻译基于CC BY-NC-SA 4.0许可协议,用于交流学习。 为了便于阅读,稍微改变内容。

上周我展示了简单的PEG解析器生成器。 本周将展示生成的解析器在分析程序时实际执行的操作。 我深入研究了ASCII艺术的复古世界,特别是“curses”这个库。 它位于Linux和Mac的Python标准库中,也可以作为Windows的附加模块使用。

【这是我的PEG系列的第4部分。 见第一、二、三、五部分】(译注:相应译文,第一编、第二编、第三编、第五编待翻译) )。

让我们来看看可视化的进展。 屏幕快照的屏幕分为三个部分:简单的ASCII字符和用连字符画的线:

上面的部分显示了解析器的调用栈。 你可能还记得那是一个有无限回溯的递归减震器。 以下说明读取这个的方法。 的一行显示标记缓冲区的内容,光标指向下一个要解析的标记。 底部是packrat分析算法中使用的内存缓存。 的条目类似于几个解析器堆栈条目(有结果的条目)。

可视化的屏幕截图

阅读此图表时需要注意的主要事项是,顶部和底部的缩进线对应于标志缓冲区。 (译注:最好看后面的gif视频,往下看这个部分。 )

前两行(以statement和assignment开头)表示尚未返回的解析方法调用,在标记位置位于第一个标记(aap )之前时被调用。 以下两行(以expr和term开头)与标记“cat”的开头垂直对齐,标记“cat”是调用相应分析方法的位置。 堆栈部分中显示的第五行和最后一行是expect('/'调用,返回None )。 用标志“”调用。 缓存部分的条目缩进也与标志缓冲区的位置相对应。 例如,在底部,可以看到负缓存条目“negative cache entries”,用于在标志缓冲区的开头搜索标志“if”和规则if_statement。 还发现,标志“=”和NAME,特别是“cat”成功缓存的条目对应于未来的输入位置。

在显示的解析器堆栈和缓存中,返回的调用显示为函数(args ) -结果。 解析器堆栈还可能显示一些返回的方法——。 这是为了降低显示时的“跳跃性”。

(说到“跳转”,顶部显示的解析器堆栈在调用添加到堆栈时向上移动,在从堆栈调用时向下移动。)。 我们的眼睛跟着这样的动作似乎也没什么问题。 ——至少我没有。 这可能是因为我们大脑中有追踪工作物体的区域。-)

缓存可视化为LRU缓存,最近使用的缓存项位于顶部,非活动项目位于屏幕底部。 (上一篇文章中给出的packrat解析器原型没有使用LRU,但这可能是改善内存使用量的好策略。 )

让我们来看看分析堆栈显示时的详细情况。 前四个条目对应于未返回的解析方法,每行表示语法中的一行。 带下划线的条目会引起以下调用:

在这种情况下,我们可以看到,我们位于语句的第二个选择“分配”,在该规则中,我们位于第三个项目“扩展”。 在expr规则中,第一个选项的第一个条目(term ' ' expr ); 根据term规则,我们处于最后的选择(atom )。

然后,可以看到第二个选项“/'term”失败的结果。 expect('/' )- None用' ' 符号缩进。 随着可视化的发展,你会发现它沉入缓存。

gif动图

但是,你当然喜欢自己看动画片! 录制了对示例程序的完整分析。 虽然您可以自己玩代码,但是请注意这是一种临时的黑色技术。

gif照片: https://原始. Github用户内容.com/Gvanrossum/PEG en /主/存储3/tty.gif

代码示例: https://github.com/gvanrossum/peg en /树/主/存储3

qsdsl在观看录制的GIF时,有时会有点不知所措,还没有显示以下标志: 例如,假设堆栈在最初显示标志“aap”之前增加了几个条目。

这是解析器在看。 令牌缓冲区被延迟填充,通过在解析器中调用exp

ect() 来请求它们之前,并不会扫描标记符。一旦标记符出现在缓冲区中,它就会保留在那里,即便在解析器回溯时也如此。

标记符缓冲区中的光标向左跳跃,显示了回溯过程;该动图中有很多次出现这种现象。你还可以在 gif 中观察到缓存填充,解析器在那不会进行额外的递归调用。(发现这种情况时,我应该加以强调,但我没时间了。)

下周我将进一步开发解析器,很可能会添加我对左递归语法规则的实现。(它们很棒!)

致谢:录制时所用的ttygif (Ilia Choly 开发) 和 ttyrec (感动的酒窝 Jording 开发)。

本文内容、示例代码和图片的授权协议:CC BY-NC-SA 4.0

英文原文:https://medium.com/@gvanrossum_83706/visualizing-peg-parsing-93a36f259423

作者简介: hxsdsw van Rossum,Python 的创造者,一直是“终身仁慈独裁者”,直到 2018 年 7 月 12 日退位。目前,他是新的最高决策层的五位成员之一,依然活跃在社区中。本文出自他在 Medium 开博客所写的解析器系列,该系列仍在连载中,每周日更新。

译者简介: 豌豆花下猫,生于广东毕业于武大,现为苏漂程序员,有一些极客思维,也有一些人文情怀,有一些温度,还有一些态度。公众号:「Python猫」(python_cat)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。