Zephyr ASDL(抽象语法描述语言)

mat*_*ots 12 python compiler-construction syntax definition asdl

题:

什么是Zephyr ASDL以及它如何与词法分析器和解析器生成器等其他编译器技术相关?

(如果你相当完整,我会很感激,但是当它变得技术性时,指向其他在线参考,因为我对编译器的大部分知识来自于使用yacc和flex,在C中编写一个简单的最大munch lexer,并且看起来起来在网上阅读东西)

问题背景:

我一直在阅读http://docs.python.org/devguide/compiler.html,我遇到了以下几行:

使用Zephyr抽象语法定义语言(ASDL)指定AST节点的规范.

我按照底部的引文找到:http: //www.cs.princeton.edu/research/techreps/TR-554-97.

我在文章中的第一次阅读相当混乱,我希望在再次尝试之前,我可以首先更好地理解ASDL的目的(在编译过程的背景下).

Ira*_*ter 7

Lexer和Parser生成器接受lexemes和grammars的描述,并生成实现相应工件的代码.Lex需要一个正则表达式来描述令牌.解析器生成器采用各种扩展的BNF表示法.

你引用的论文非常清楚恕我直言:ASDL是一种用于抽象地描述一组树节点(它们的类型和签名)的语言.使用这种语言,人们可以编写(并且论文的作者这样做)一个工具,将这些描述转换为您需要实现与解析器一起使用的树所需的记录类型集.所以ADSL有点像Regexes和BNF,因为它的目的是提供给生成编译器一部分的代码生成器.

一个广泛的观点是,编译器是一种非常容易理解的技术,并且应该能够从各种部分的描述中生成它们.Regex/BNF/ADSL是解析阶段的关键.

理想情况下,您喜欢目标指令集的描述语言,流分析,从抽象树到目标指令集的翻译(您提到的最大munch),以及描述优化的方法.然后使用每个部分的相应工具,您可以从"规范"构建整个编译器.这个领域实际上有很多工作要做; 人们已经分开并一起完成了所有这些.不出所料,其中一些来自以前出自普林斯顿的"Zephyr"项目(似乎Zephyr网站现在已经死了),其目标是做这种事情.

无论如何,尝试在Google Scholar下查找"编译器生成器".