7月28日,Python之父Guido更新了自己的第二篇medium博文《Building a PEG Parser》。
在博文中,Guido说虽然自己还没有完整地理解PEG解析,但是他已经开始着手自己编写一个了。不仅如此,他还在博文中分享了他构建自己的“第一个PEG Parser”的思路和过程。
Guido并不想实现一个通用的PEG Parser,因为实际上开源界已经有很多通用的PEG Parser了,比如TatSu,一个用Python编写并生成Python代码的PEG Parser。Guido专注于编写一个Python可以使用的PEG Parser,并且这可能比通用的PEG Parser更复杂。比如标识化这一步,由于Python使用缩进来决定层次关系,所以在标识化这一步中就需要一个堆栈来记录层级关系。另外,处理Python的换行和引号也并不轻松。对于Python代码的标识化,CPython提供了两套可用的工具,一套是C编写的内部使用的,另一套是提供在标准库中的纯Python编写的,并且和内部使用的完全一致的标识化工具。Guido这次直接使用了标准库中的标识化工具。
Guido在博文中,对自己的思路进行了详细的阐述,并配以简化的代码来辅助说明,俨然一副编写教程的样子。国内的小伙伴如果有参与某类编程语言的开发及维护的,可以翻看下Guido的博文哦~
英文原文地址:https://medium.com/@gvanrossum_83706/building-a-peg-parser-d4869b5958fb
国内PDF地址:https://qiniumedia.freelycode.com/vcdn/1/优质文章长图3/Building_a_PEG_Parser.pdf
· 番 · 外 · 篇 ·
David Beazley (Python Cookbook 作者)
谢谢你把文章更新到medium。我对PEG解析不太了解,所以这很有趣。
Guido van Rossum
哦,我知道得也还是太晚了。:-)我想你只需阅读维基百科的文章和关于packrat解析的论文,很快就会明白的。
David Beazley (Python Cookbook 作者)
嗯。。。。。25年后,我想我才刚刚开始了解继承之类的事情。所以,我还是慢慢来吧;-)。
注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687