学习编写一个编译器

首选语言:C / C ++,Java和Ruby。

我正在寻找一些关于如何编写自己的编译器的有用的书籍/教程,仅用于教育目的。 我对C / C ++,Java和Ruby最为熟悉,所以我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的。


资源大名单:

  • 编译器教育的Nanopass框架¶
  • 高级编译器设计和实现$
  • 编译器构建的增量方法¶
  • ANTLR 3.x视频教程
  • 编译器设计基础
  • 建立一个鹦鹉编译器
  • 编译器基础
  • 编译器构建$
  • 编译器设计和建造$
  • 用C $编写一个编译器
  • 制作口译员
  • C编译器设计
  • 编译器:原理,技术和工具$ - 又名“龙书”; 被广泛认为是编译器编写的“本书”。
  • 设计编译器$
  • 编程语言要点
  • Flipcode Article Archive(查找“Jan Niestadt实现脚本引擎”)
  • 游戏脚本掌握$
  • 如何在C#中从头开始构建虚拟机
  • 实现功能语言
  • 实现编程语言(使用BNFC)
  • 使用C#4.0实现编程语言
  • 解释器模式(在设计模式$中描述)指定评估语言中的句子的方式
  • 语言实现模式:创建您自己的特定领域和一般编程语言
  • 让我们通过Jack Crenshaw构建一个编译器 - PDF版本(例子在Pascal中,但这些信息通常是可用的)
  • 链接器和加载器$(Google Books)
  • Lisp in Small Pieces(LiSP)$
  • LLVM教程
  • 现代编译器在ML $中的实现 - 还有一个Java $和C $版本 - 被广泛认为是一本很好的书
  • 面向对象的编译器构造$
  • 解析技巧 - 实用指南
  • Oberon项目¶ - 请看第13章
  • 编程一台个人电脑$
  • 编程语言:应用和解释
  • 兔子:方案编译器¶
  • 对信任信任的思考 - 快速指南
  • 为.NET框架推出自己的编译器 - 来自MSDN的快速教程
  • 计算机程序的结构和解释
  • 类型和编程语言
  • 想编写一个编译器? - 快速指南
  • 在Ruby底层编写一个编译器
  • 传说:

  • ¶链接到PDF文件
  • $链接到一本印刷书

  • 我认为这是一个非常模糊的问题。 只是因为涉及这个主题的深度。 编译器可以分解成两个独立的部分,但是; 上半部分和下半部分。 上半部分通常采用源语言并将其转换为中间表示形式,下半部分负责平台特定的代码生成。

    尽管如此,一个简单的方法来解决这个问题(我们在编译器类中至少使用过的一个方法)的一个想法是在上面描述的两部分中构建编译器。 具体来说,您只需构建上半部分即可了解整个流程。

    只要完成上半部分,就可以获得编写词法分析器和解析器的经验,并生成一些“代码”(我提到的中间表示)。 所以它会把你的源程序转换成另一种表示并做一些优化(如果你想的话),这是编译器的核心。 然后,下半部分将采用该中间表示形式,并生成在特定体系结构上运行程序所需的字节。 例如,下半部分将采用您的中间表示形式并生成PE可执行文件。

    关于这个主题的一些书籍,我发现特别有用的是编译原则和技术(或龙书,由于可爱的龙在封面上)。 它有一些伟大的理论,并且以真正可访问的方式确实涵盖了上下文无关语法。 另外,为了构建词法分析器和解析器,您可能会使用* nix工具lex和yacc。 而且无趣的是,这本名为“lex and yacc”的书收录了龙书在这部分留下的部分。


    我认为ML中的Modern Compiler Implementation是编写文本的最佳入门编译器。 还有一个Java版本和一个C版本,根据您的语言背景,这两种版本都可以更容易访问。 本书包含了许多有用的基本资料(扫描和解析,语义分析,激活记录,指令选择,RISC和x86本地代码生成)以及各种“高级”主题(编译面向对象和功能语言,多态,垃圾收集,优化和单个静态分配表单)分配到相对较小的空间(〜500页)中。

    我更喜欢现代编译器实现龙的书,因为现代编译器实现调查较少的领域 - 相反,它确实覆盖了所有需要编写一个严肃,体面的编译器的主题。 完成本书后,如果需要,您可以直接处理研究论文以获得更深入的研究。

    我必须承认,我对Niklaus Wirth的编译器构建有着严重的困惑。 它可以在网上以PDF格式提供。 我发现Wirth的编程美学非常美丽,但是有些人觉得他的风格太少了(例如Wirth倾向于递归下降解析器,但是大多数CS课程都关注解析器生成工具; Wirth的语言设计相当保守)。编译器构建是一个非常简洁的蒸馏Wirth的基本想法,所以不管你是否喜欢他的风格,我都强烈推荐阅读这本书。

    链接地址: http://www.djcxy.com/p/43413.html

    上一篇: Learning to write a compiler

    下一篇: ghc failed to compile a sanity check