学习编写编译器

时间:2020-03-05 18:37:38  来源:igfitidea点击:

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

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

解决方案

回答

资源大清单:

  • 用于编译器教育的Nanopass框架?
  • 高级编译器设计和实现
  • 增量式编译器方法?
  • ANTLR 3.x视频教程
  • 编译器设计基础
  • 构建一个鹦鹉编译器
  • 编译器基础
  • 编译器构造
  • 编译器设计与构建
  • 用C $编写编译器
  • 手工翻译
  • C语言中的编译器设计
  • 编译器:原理,技术和工具$ aka" The Dragon Book";被广泛认为是用于编译器编写的"书"。
  • 工程编译器$
  • 编程语言要点
  • Flipcode文章存档(查找"由Jan Niestadt实施脚本引擎")
  • 游戏脚本精通$
  • 如何在C#中从头开始构建虚拟机?
  • 实施功能语言
  • 实施编程语言(使用BNFC)
  • 使用C#4.0实现编程语言
  • 解释器模式(在设计模式$中描述)指定一种评估语言中的句子的方法
  • 语言实现模式:创建我们自己的领域特定和通用编程语言
  • 让我们来构建一个编译器吗?作者:Hyman·克伦肖(Hyman Crenshaw)PDF?版本(示例在Pascal中,但是该信息通常适用)
  • 链接器和加载器$(Google图书)
  • 小件Lisp(LiSP)$
  • LLVM教程
  • ML $中的现代编译器实现还有Java $和C $版本-被广泛认为是一本非常好的书
  • 面向对象的编译器构造
  • 解析技术-实用指南
  • Oberon项目? -看看第13章
  • 对个人计算机编程$
  • 程序语言:应用程序和解释
  • Rabbit:计划编译器?
  • 关于信任信任的思考快速指南
  • 为.NET框架滚动自己的编译器MSDN提供的快速教程
  • 计算机程序的结构和解释
  • 类型和编程语言
  • 想编写一个编译器? -快速指南
  • 自底向上使用Ruby编写编译器

传奇:

  • ?链接到PDF文件
  • $链接到印刷书籍

回答

"让我们构建一个编译器"很棒,但是有点过时了。 (我并不是说这会使它的有效性降低一点。)

或者查看SLANG。这类似于"让我们构建一个编译器",但是对于初学者而言,它是更好的资源。它带有一个pdf教程,该教程采用7步方法来教我们一个编译器。添加quora链接,因为它具有到C ++,Java和JS中SLANG所有各个端口的链接,还具有最初使用Cand .NET平台编写的python和Java解释器。

回答

我同意《龙书》的参考; IMO,它是编译器构造的权威指南。不过,请为一些核心理论做好准备。

如果我们想要一本理论上较浅的书,那么Game Scripting Mastery可能是一本更好的书。如果我们是编译器理论的新手,那么它会为我们提供较温和的介绍。它没有涵盖更实用的解析方法(在不讨论LL或者LR解析的情况下选择非预测性递归下降),而且正如我记得的那样,它甚至没有讨论任何优化理论。另外,它无需编译为机器代码,而是编译为应该在还要编写的VM上运行的字节码。

它仍然是一本不错的书,特别是如果我们可以在Amazon上以便宜的价格买到它的话。如果我们只想对编译器进行简单介绍,那么掌握Game Scripting并不是一个坏方法。如果我们想成为硬派,那我们应该比《龙书》安顿下来。

回答

如果我们要使用功能强大的高级工具而不是自己构建所有内容,那么遍历项目和本课程的阅读材料是一个不错的选择。这是Java解析器引擎ANTLR的作者编写的语言课程。我们可以从Pragmatic Programmers以PDF的形式获得本课程的书。

该课程介绍了我们在其他地方看到的标准编译器编译器内容:解析,类型和类型检查,多态性,符号表和代码生成。几乎没有的唯一内容是优化。最终项目是一个编译C子集的程序。由于使用了ANTLR和LLVM之类的工具,因此可以在一天之内编写整个编译器是可行的(我确实有这样的证明,尽管我的确表示需要24小时) 。使用现代工具进行实际工程的工作量很大,理论上也较轻。

顺便说一句,LLVM简直太棒了。在许多情况下,通常我们可以编译成汇编,因此最好改为编译为LLVM的中间表示。它是更高级别的,跨平台的,并且LLVM非常擅长从中生成优化的装配。

回答

Dragon Book绝对是"构建编译器"书,但是如果语言不像当前的一代语言那么复杂,则我们可能需要查看Design Patterns中的Interpreter模式。

本书中的示例设计了一种类似于正则表达式的语言,并且经过了深思熟虑,但是正如他们在书中所说的那样,这对于思考过程是有好处的,但实际上仅对小语言有效。但是,使用这种模式为小语言编写解释器要比必须学习所有不同类型的解析器(yacc和lex等)要快得多。

回答

我认为ML中的现代编译器实现是编写文本的最佳入门编译器。还有一个Java版本和一个C版本,鉴于语言背景,这两个版本可能更易于访问。本书包含许多有用的基本材料(扫描和解析,语义分析,激活记录,指令选择,RISC和x86本机代码生成)和各种"高级"主题(编译OO和功能语言,多态性,垃圾回收,优化和静态分配表格)放入相对较小的空间(约500页)。

我更喜欢《现代编译器实现》而不是《 Dragon》一书,因为《现代编译器》实现只研究了很少的领域,相反,它确实涵盖了编写严肃,体面的编译器所需的所有主题。阅读完本书后,如果需要,我们将可以直接处理研究论文,以进行更深入的了解。

我必须承认,我对Niklaus Wirth的Compiler Construction情有独钟。它以PDF格式在线提供。我发现Wirth的编程美学简直很漂亮,但是有些人觉得他的风格太小了(例如Wirth偏爱递归下降解析器,但是大多数CS课程都专注于解析器生成器工具; Wirth的语言设计相当保守。)编译器构造是非常简洁的提炼关于Wirth的基本思想,因此无论我们是否喜欢他的风格,我都强烈建议我们阅读本书。

回答

Python随附了用Python编写的python编译器。我们可以看到源代码,它包括解析,抽象语法树,发出代码等所有阶段。
砍死它。

回答

一本尚未提出但很重要的书是约翰·莱文(John Levine)的"链接器和加载器"。如果不使用外部汇编程序,则需要一种输出可以链接到最终程序中的目标文件的方法。即使我们使用的是外部汇编程序,我们也可能需要了解重定位以及整个程序加载过程如何工作以制作可用的工具。本书收集了有关此过程的大量随机知识,涉及各种系统,包括Win32和Linux。

回答

创建编译器的一种简单方法是使用bison和flex(或者类似方法),构建树(AST)并以C语言生成代码。生成C代码是最重要的步骤。通过生成C代码,语言将自动在具有C编译器的所有平台上运行。

生成C代码就像生成HTML一样容易(仅使用打印或者等效方法),而生成HTML则比编写C解析器或者HTML解析器容易得多。

回答

如果我们愿意使用LLVM,请访问以下网址:http://llvm.org/docs/tutorial/。它教我们如何使用LLVM的框架从头开始编写编译器,并且不假定我们具有有关该主题的任何知识。

本教程建议我们编写自己的解析器和词法分析器等,但是我建议我们一旦了解了这一点,就研究一下bison和flex。它们使生活变得更加轻松。

回答

首先,最好创建递归下降解析器(RDP)(假设我们要创建自己的BASIC风格并构建BASIC解释器),以了解如何编写编译器。
我在Herbert Schild的C Power Users的第7章中找到了最佳信息。本章引用了H. Schildt的另一本书" C The Complete Reference",他在其中解释了如何创建计算器(一个简单的表达式解析器)。我发现eBay上的这两本书都很便宜。
如果我们访问www.osborne.com或者登录www.HerbSchildt.com,则可以检查该书的代码。
我找到了相同的代码,但对于Cin他的最新书

回答

"... Let's Build a Compiler ..."

我第二次通过@sasb http://compilers.iecc.com/crenshaw/。暂时不要购买更多的书。

为什么?工具和语言。

所需的语言是Pascal,如果我没记错的话,则基于Turbo-Pascal。如果我们访问http://www.freepascal.org/并下载Pascal编译器,则会发生所有示例直接从页面运行的情况,即〜http://www.freepascal.org/download.var。 Pascal是几乎可以使用的任何处理器或者操作系统,都可以使用它。

一旦我们掌握了这些课程,然后尝试更高级的"龙书"〜http://en.wikipedia.org/wiki/Dragon_book

回答

我也喜欢Crenshaw教程,因为它绝对清楚地表明,编译器只是另一个程序,它读取一些输入并写入一些输出。

阅读。

如果需要的话,请尝试使用它,然后再看看另一篇有关如何真正编写更大,更完整的编译器的参考。

并阅读关于信任的信任,以获取有关可以在此域中完成的显而易见的事情的线索。

回答

Fraser和Hanson的LCC编译器(维基百科)(项目主页)在其书"可重定位的C编译器:设计和实现"中进行了介绍。它非常易读,可以解释整个编译器,直至代码生成。

回答

这里有很多很好的答案,所以我想我将再添加一个到列表中:

十多年前,我有一本书叫做Project Oberon,在编译器上有一些写得很好的文字。本书的真正意义在于其源代码和说明非常动手且易于阅读。全文(2005年版)已经以pdf格式提供,因此我们可以立即下载。编译器将在第12章中讨论:

http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf

尼克劳斯·沃思(Jirg Gutknecht)

(这种处理方法没有他关于编译器的书那样广泛)

我已经读过几本有关编译器的书,并且我可以第二本龙书,花在这本书上的时间非常值得。

回答

如果我们有兴趣为功能性语言(而不是程序性语言)编​​写编译器,Simon Peyton-Jones和David Lester的"实现功能性语言:教程"是一个很好的指南。

功能评估工作原理的概念基础由一种简单但功能强大的功能语言(称为"核心")的示例进行指导。此外,还使用Miranda(一种与Haskell非常相似的纯功能语言)中的代码示例解释了Core语言编译器的每个部分。

描述了几种不同类型的编译器,但是即使我们仅遵循所谓的Core模板编译器,我们也将对使函数式编程产生影响的内容有很好的了解。

回答

龙书太复杂了。因此,请忽略它作为起点。很好,一旦我们有了起点,就会使我们思考很多,但是对于初学者来说,也许我们应该简单地尝试使用RD,LL或者LR解析技术并编写所有内容(词法分析)来编写数学/逻辑表达式评估器。也许用C / Java手工编写。这本身很有趣,并且使我们了解了编译器中涉及的问题。然后,我们可以使用某种脚本语言跳入我们自己的DSL(因为通常在这些语言中处理文本会更容易),并且像有人说的那样,以脚本语言本身或者C生成代码。我们可能应该使用flex / bison / antlr等如果要在c / java中进行,请进行词法分析/解析。

回答

我们应该在6页以上的代码中查看Darius Bacon的" ichbins",它是针对Lisp小方言的编译器,目标语言为C。与大多数玩具编译器相比,它的优点是语言足够完整,可以用它编写编译器。 (压缩包还包括一个引导程序来引导事物。)

关于在我的Ur-Scheme网页上学习编写编译器的有用知识,还有很多东西。

回答

我正在研究相同的概念,并且发现了Joel Pobar的这篇很有前途的文章,

为.NET Framework创建语言编译器

他讨论了编译器的高级概念,并着手为.Net框架发明自己的语言。尽管它的目标是.Net框架,但许多概念仍应能够重现。该文章涵盖:

  • 语言定义
  • 扫描器
  • 解析器(主要是我感兴趣的位)
  • 面向.Net框架
  • 代码生成器

还有其他主题,但是我们公正。

它的目标读者是用C(不是Java)编写的

高温超导

骨头

回答

我已经编写了有关编译器设计的在线教程,标题为"让我们构建脚本引擎编译器,以及称为Bxbasm的本机代码编译器。
在线文档位于:
http://geocities.com/blunt_axe_basic/tutor/Bxb-Tutor.doc

zip格式的文档,支持文件和编译器位于:
http://geocities.com/blunt_axe_basic

还:
http://tech.groups.yahoo.com/group/QDepartment

史蒂夫·A

回答

如果我们像我一样,没有接受过计算机科学方面的正规教育,并且对
想要知道编译器如何工作:

我建议"用Java编程语言处理器:编译器和解释器",
对于自学成才的计算机程序员而言,这是一本了不起的书。

从我的角度来看,了解那些基本的语言理论,使机器自动化和集合论并不是一个大问题。问题是如何将这些东西变成代码。上面的书告诉我们如何编写解析器,分析上下文以及生成代码。如果我们看不懂这本书,那么我不得不说,放弃构建编译器。这本书是我读过的最好的编程书籍。

还有另一本书,也不错,《用C进行编译器设计》。有很多代码,它告诉我们有关如何构建编译器和lexer工具的所有信息。

构建编译器是一种有趣的编程实践,可以教会我们大量的编程技能。

不要买龙书。那是浪费金钱和时间,不是为了从业者。

回答

抱歉,它是西班牙文,但这是阿根廷一门名为" Compiladores e Intrpretes"(编译器和口译员)的课程的目录。

该课程从形式语言理论到编译器构建,这些都是我们至少需要构建简单编译器的主题:

Compilers Design in C. 
    Allen I. Holub 

  Prentice-Hall. 1990.
  Compiladores. Teoría y Construcción. 
    Sanchís
  Llorca, F.J. ,  Galán Pascual, C.     Editorial Paraninfo. 1988.
  Compiler Construction. 
    Niklaus Wirth 

  Addison-Wesley. 1996.
  Lenguajes, Gramáticas y Autómatas. Un enfoque práctico. 
    Pedro
  Isasi Vi?uela, Paloma Martínez
  Fernández, Daniel Borrajo Millán.     Addison-Wesley Iberoamericana
  (Espa?a). 1997.
  The art of compiler design. Theory and practice. 
    Thomas
  Pittman, James Peters. 

  Prentice-Hall. 1992.
  Object-Oriented Compiler Construction. 
    Jim Holmes.
  
    Prentice Hall, Englewood
  Cliffs, N.J. 1995
  Compiladores. Conceptos Fundamentales. 
    B. Teufel, S.
  Schmidt, T. Teufel. 

  Addison-Wesley Iberoamericana. 1995.
  Introduction to Automata Theory, Languages, and Computation. 

  John E. Hopcroft. Jeffref D. Ullman.
  
    Addison-Wesley. 1979.
  Introduction to formal languages. 
    Gy?rgy E. Révész. 

  Mc Graw Hill. 1983.
  Parsing Techniques. A Practical Guide. 
    Dick Grune, Ceriel
  Jacobs. 
    Impreso por los
  autores. 1995

  http://www.cs.vu.nl/~dick/PTAPG.html
  Yacc: Yet Another Compiler-Compiler. 
    Stephen
  C. Johnson 
    Computing Science
  Technical Report No 32, 1975. Bell
  Laboratories. Murray Hill, New

  Jersey.
  Lex: A Lexical Analyzer Generator. 
    M. E. Lesk,  E. Schmidt.     Computing Science Technical
  Report No 39, 1975. Bell Laboratories.
  Murray Hill, New     Jersey.
  lex & yacc. 
    John R. Levine, Tony Mason, Doug Brown. 

  O’Reilly & Associates. 1995.
  Elements of the theory of computation. 
    Harry R. Lewis,
  Christos H. Papadimitriou.
  Segunda Edición. Prentice Hall. 1998. 
  Un Algoritmo Eficiente para la Construcción del Grafo de Dependencia de Control.

  Salvador V. Cavadini.

  Trabajo Final de Grado para obtener el Título de Ingeniero en Computación.

  Facultad de Matemática Aplicada.
  U.C.S.E. 2001.

回答

  • 这是一个广阔的主题。不要小看这一点。并且不要低估我的观点,不要低估它。
  • 我听说《龙书》是一个("?")开始以及寻找的地方。 :)更好地进行搜索,最终将成为生活。
  • 构建自己的编程语言绝对是一个好练习!但是要知道,最终它永远不会用于任何实际目的。例外情况很少,而且相差很远。

回答

我们可能想要研究Lex / Yacc(或者Flex / Bison,无论我们想称呼它们如何)。 Flex是一个词法分析器,它将分析和识别我们语言的语义成分("令牌"),而Bison将用于定义解析每个令牌时发生的情况。对于可以编译为C的编译器或者动态运行指令,这可能是但绝对不限于打印C代码。

该常见问题解答应为我们提供帮助,本教程看起来非常有用。

回答

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

尽管如此,一种用于实现该主题的简便方法的想法(至少在我们的编译器类中使用了该想法)是在上述两部分中构建编译器。具体来说,仅通过构建上半部分就可以对整个过程有所了解。

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

我发现有关该主题的一些书特别有用,例如《编译器原理和技术》(或者《龙书》,由于封面上有可爱的龙)。它有一些很棒的理论,并且确实以一种真正可访问的方式涵盖了上下文无关文法。另外,为构建词法分析器和解析器,我们可能会使用* nix工具lex和yacc。不足为奇的是,这本名为《 lex and yacc》的书在这本《龙书》停下来的地方找到了。

回答

  • 首先,请确保我们可以在Stack Overflow上回答这里标记为C ++的大多数问题。
  • 之后,我们应该确保了解其他编译器的工作方式,并了解其部分源代码。
  • 我们会注意到我们需要汇编程序,并且将开始学习汇编程序,直到我们可以使用该标签回答许多问题为止。
  • 如果我们走了这么远,我们会发现已经过去了几年,并且意识到这样一个项目有多大,并且可能会从那时开始对我们自己的问题微笑(如果那时该页面仍然存在)...

回答

令我惊讶的是,它没有被提及,但是Donald Knuth的《计算机编程艺术》最初是作为一种有关编译器编写的教程而写的。

当然,Knuth博士倾向于深入探讨主题,这导致编译器编写教程的内容扩展到了大约9册,实际上只有三册出版。这是关于编程主题的相当完整的论述,并且涵盖了我们在编写编译器时可能需要了解的所有细节。

回答

每当我想尝试一种新的语言概念时,我只需编写一个简单的解析器,并使其生成某种易于获得良好编译器的语言,例如C。

我们如何看待C ++?

回答

一般来说,编译器教程不会有五分钟,因为这是一个复杂的话题,编写编译器可能需要几个月的时间。我们将必须进行自己的搜索。

通常会解释Python和Ruby。也许我们也想从口译员入手。通常比较容易。

第一步是编写正式的语言描述,即编程语言的语法。然后,我们必须根据语法将要编译或者解释的源代码转换为抽象语法树,这是计算机可以理解并可以对其进行操作的源代码的内部形式。此步骤通常称为解析,而解析源代码的软件称为解析器。解析器通常由解析器生成器生成,解析器生成器将形式语法转换为源代码或者其他机器代码。对于解析的一种很好的,非数学的解释,我建议使用《解析技术实用指南》。 Wikipedia对解析器生成器进行了比较,我们可以从中选择适合解析器生成器。根据我们选择的解析器生成器,我们可以在Internet上找到教程,对于真正流行的解析器生成器(例如GNU bison)也有书籍。

为语言编写解析器可能非常困难,但这取决于语法。因此,我建议我们保持语法简单(与C ++不同); LISP就是一个很好的例子。

在第二步中,将抽象语法树从树结构转换为线性中间表示。经常引用Lua的字节码作为一个很好的例子。但是中间表示确实取决于语言。

如果要构建解释器,则只需解释中间表示。我们也可以及时编译它。我建议使用LLVM和libjit进行即时编译。为了使该语言可用,我们还必须包括一些输入和输出功能,以及一个小的标准库。

如果要编译语言,它将更加复杂。我们将不得不为不同的计算机体系结构编写后端,并从这些后端的中间表示形式生成机器代码。我建议为此任务使用LLVM。

关于此主题的书籍很少,但我不推荐它们作为一般用途。他们大多数都太学术或者太实用。没有"在21天之内教我们自己编写编译器"的知识,因此,我们将必须购买几本书才能对整个主题有一个很好的了解。如果我们搜索Internet,则会发现一些在线书籍和讲义。也许我们附近有一个大学图书馆,我们可以在其中借阅有关编译器的书籍。

如果我们要使项目认真,我还建议我们具有理论计算机科学和图论方面的良好背景知识。计算机科学学位也将有所帮助。

回答

我记得大约七年前,我刚接触编程时曾问过这个问题。
当我问的时候,我非常小心,令人惊讶的是,我受到的批评没有我们来这里的那么多。但是,他们确实向我指出了"龙书"的方向,这是一本非常出色的书,它解释了编写编译器所需的一切(当然,我们必须精通一两种语言。)语言,更好的语言。)。

是的,很多人都说读那本书是疯狂的,你不会从中学到任何东西,但是我完全不同意。

许多人还说编写编译器是愚蠢和毫无意义的。好了,编译器开发有用的原因有很多:
因为很有趣。
这是有教育意义的,在学习如何编写编译器时,我们将学到很多有关计算机科学和其他技术的知识,这些技术在编写其他应用程序时很有用。
如果没有人编写编译器,那么现有的语言将再好不过。

我没有立即编写自己的编译器,但是在询问之后我知道从哪里开始。现在,在学习了许多不同的语言并阅读了《龙书》之后,写作并不是什么大问题。 (我也在学习计算机工程atm,但是我对编程的大部分了解都是自学的。)

综上所述:
龙书是一个伟大的"教程"。但是在尝试编写编译器之前,请花一些时间精通一两种语言。不过,不要期望在未来十年左右的时间里成为编译器专家。

如果我们想学习如何编写解析器/解释器,这本书也很好。

回答

如果我们想了解有关编译器(和元编译器)的更多信息,则不是一本书,而是一本技术论文和一个非常有趣的学习经验...该网站指导我们构建一个完全独立的编译器系统,该系统可以编译自身和其他语言:

教程:元编译器第1部分

这全部基于一篇令人惊叹的10页技术论文:

Val Schorre META II:面向语法的编译器编写语言

从1964年诚实起见。我从1970年开始学习如何构建编译器。当我们终于想知道编译器如何重新生成自身时,会有一个令人难以置信的时刻。

我从大学时代就认识该网站的作者,但与该网站无关。

回答

看看下面的书。作者是ANTLR的创建者。

语言实现模式:创建我们自己的领域特定和通用编程语言。

回答

从comp.compilers常见问题解答:

Per Brinch Hansen的"对个人计算机进行编程"
1982年Prentice-Hall ISBN 0-13-730283-5

这本不幸的书
解释了单用户编程环境的设计和创建
微型计算机,使用一种类似于Pascal的语言,称为Edison。作者介绍
逐步实现的所有源代码和说明
Edison编译器和简单的支持操作系统,全部用书面形式编写
Edison本身(用符号编写的小型支持内核除外)
PDP 11/23的汇编程序;也可以为IBM订购完整的源
个人电脑)。

关于这本书最有趣的事情是:1)它的能力
演示如何创建完整的,自包含的,自维护的,
有用的编译器和操作系统,以及2)有趣的讨论
语言设计和规范问题以及第二章中的权衡。

Per Brinch Hansen的" Pascal编译器上的Brinch Hansen"
1985年Prentice-Hall ISBN 0-13-083098-4

另一种理论上的光
这是实用的沉重代码书。作者介绍了
设计,实现和完整的编译器源代码和p代码
Pascal(Pascal" minus")的解释器,Pascal子集具有布尔值和
整数类型(但不包括字符,实数,子范围或者枚举类型),
常量和变量定义以及数组和记录类型(但不打包,
变体,集合,指针,无名,重命名或者文件类型),表达式,
赋值语句,带有值和变量的嵌套过程定义
参数,if语句,while语句和begin-end块(但没有
函数定义,过程参数,goto语句和标签,
案例陈述,重复陈述,for陈述和with陈述)。

编译器和解释器以Pascal *(Pascal"星号"),
Pascal子集扩展了一些Edison风格的功能,可用于创建
软件开发系统。 IBM PC的Pascal *编译器由
作者,但是很容易将本书的Pascalcompiler移植到任何作者
方便的Pascal平台。

本书使编译器的设计和实现看起来容易。一世
特别像作者关注质量的方式一样,
可靠性和测试。编译器和解释器可以轻松使用
作为更复杂的语言或者编译器项目的基础,尤其是
如果我们被迫快速启动并运行某件东西。

回答

缺少该列表:Jones and Lins的"垃圾回收:自动动态内存管理算法"。

(假设我们正在编写编译器和运行时系统,并且正在实现垃圾回收语言。

回答

我发现《龙》一书太难读了,过多地侧重于语言理论,而这在实践中实际上并不需要编写编译器。

我要添加一本Oberon书,其中包含了一个惊人的快速和简单的Oberon编译器Project Oberon的完整资料。

回答

如果我们没有时间,我会推荐Niklaus Wirth的"编译器构造"(Addison-Wesley。1996),这是一本可以在一天内阅读的小小册子,但是它解释了基础知识(包括如何实现词法分析器,递归下降解析器,和我们自己的基于堆栈的虚拟机)。之后,如果我们想深入了解,就没有其他评论者建议的围绕《龙》的书。