有关解析器,解释器和编译器的学习资源
我一直想玩自己的语言一段时间(表面上是为了学习经验),因此需要在解析器,解释器和编译器的构建中有相对的基础。所以:
- 有人知道构造解析器,解释器和编译器的任何好资源吗?
编辑:我不是在寻找诸如Lex,Yacc和Bison之类的编译器/解析器。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
解决方案
回答
不是很容易,但是很详尽:龙书
回答
编译器构造:原则和实践是关于该主题的最佳书籍。
回答
Aho的" Dragon book"是标准参考书,但另一个不错的选择是Andrew Appel的Java现代编译器实现(也提供ML和C版本)。它逐步引导我们逐步了解编译器/解释器的每个必需组件,并提供许多有用的源代码。
回答
RE:lex,yacc,野牛
我们是说不需要它们的指针还是对使用它们不感兴趣?我不建议手动编写词法分析器或者解析器。
编辑:我们可能对"编译器-编译器"可以完成的工作有一种夸大的感觉:在构建AST之后,编译的真正困难部分就开始了。 Aho,Louden和Appel的书都很不错。
回答
史蒂夫·耶格(Rich Programmer Food)的这篇引人入胜的博客文章不会告诉我们所有有关如何构建编译器的知识(尽管它确实包括了很多很好的见识),但是它在解释为什么要了解编译器。
哎呀,那篇文章几乎让我开始学习编译器,而且我有一份全职工作,家里只有3岁,平均每天大约有-1.5个小时的空闲时间。
回答
我建议使用C语言进行编译器设计,不幸的是,我们必须在二手书网站中找到它。这本书唯一的真正问题是,当编译速度是一个重要因素时才将其写回,因此编译器是用C编写的。这足以满足低级语言的需要,有时实现理论被埋在实现代码中。
我们提到了口译员和编译器。我实际上建议从解释器而不是编译器开始。使用Interpreter入门会容易得多,而且他们往往会更有趣,因为我们可以立即获得有关表现的反馈。
回答
我最近阅读了《 Java编程语言处理器》,并从基本概念入手,向我们推荐了该语言,然后带我们介绍了递归下降编译器的实现,包括代码生成以及许多其他方法的讨论。不过,我尚未阅读此主题中的其他建议书籍,因此无法与这些书籍进行比较。如果我们不了解Java,那么请不要被In Java部分所拖累,因为有关概念及其实现已足够充分地说明,我们无需掌握Java的详细知识即可掌握要点。
回答
以防万一我们:
- 愿意玩
- 像有机会更快地建造东西,然后再深入
- 在底层平台上使用.NET可以
...然后,我建议我们检查Microsoft的Dynamic Language Runtime,它作为源代码提供在整个Dynamic Silverlight SDK中。
http://www.codeplex.com/sdlsdk
关于它的一些好处是,它提供了许多易于使用的功能,例如控制台,通用类型系统,通用抽象语法树等。该软件包包括三个实现:Python,Ruby和Javascript。
也许这是实现除DLR之外的一种简短语言的好机会,然后开始检查实际的DLR代码,然后开始自己构建基本内容。
无论如何,从另一种语言的怪胎中祝我们好运!
回答
麻省理工学院OpenCourseWare(OCW)站点有一个班级,其项目是构建编译器...他们参考《龙书》和《阿佩尔》的书,但此外,还有课堂笔记和讲座。该课程是6.035计算机语言工程。
我发现类说明对于解释递归下降解析器非常有用。
回答
我发现Hyman Crenshaw的教程"让我们构建一个编译器"非常容易理解和理解。 Hyman从头开始为Pascal构建了一个编译器,并详细解释了每个步骤。
回答
这是一本老书,虽然过时了,但是我发现Pascal编译器上的Brinch Hansen是创建语言和构建编译器元素的非常实用的介绍。尽管有名称,但它并不特定于Pascal。如果我们能找到一份副本,那是非常值得的。
回答
我在编译器上读过的最好的论文是1964年
Val Schorre的" META II一种面向语法的编译器编写语言"。
(http://doi.acm.org/10.1145/800257.808896)
在10页中,他向我们展示了如何构建一个惊人的简单但
非常有效的编译器,提供
为我们提供了编译器-编译器语法,并为我们提供了足够的信息
细节,供我们在下午手动实施(一个惊人的成就)
当我们意识到它如何递归的概念性时刻时)
类似于ALGOL的语言。这篇论文是一本完整的书,真的应该
任何使用编译器技术的人都必须阅读。
这是一个有关元编译的出色教程的链接,
根据本文。
http://www.bayfronttechnologies.com/mc_tutorial.html