擅长:python、mysql、java
<p>Lexer和Parser生成器接受词素和语法的描述,并生成实现相应工件的代码。Lex需要正则表达式来描述令牌。解析器生成器采用各种扩展的BNF符号。在</p>
<p>你参考的论文非常清楚:ASDL是一种抽象描述一组树节点(它们的类型和签名)的语言。使用这种语言,我们可以编写一个工具(论文的作者也是这样做的),它将这些描述转换成一组记录类型,您需要这些记录类型来实现与解析器一起使用的树。所以ADSL有点像regex和BNF,因为它的目的是提供给生成编译器一部分的代码生成器。在</p>
<p>一种广泛的观点认为编译器是一种很好理解的技术,人们应该能够从对不同部分的描述中生成它们。Regex/BNF/ADSL是解析阶段的关键。在</p>
<p>理想情况下,你会喜欢目标指令集的描述语言、流分析、从抽象树到目标指令集的转换(你提到过最大munch),以及描述优化的方法。然后,使用针对每一部分的相应工具,您可以从“规范”构建整个编译器。有
实际上在这方面做了很多工作,人们都是分开做的,也一起做的。不出所料,其中一些来自普林斯顿大学的“Zephyr”项目(看起来那里的Zephyr网站现在已经死了),它的目标就是做这种事情。在</p>
<p>无论如何,试着在谷歌学者下寻找“编译器生成器”。在</p>