首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
当前回答
As an starting point, it will be good to create a recursive descent parser (RDP) (let's say you want to create your own flavour of BASIC and build a BASIC interpreter) to understand how to write a compiler. I found the best information in Herbert Schild's C Power Users, chapter 7. This chapter refers to another book of H. Schildt "C The complete Reference" where he explains how to create a calculator (a simple expression parser). I found both books on eBay very cheap. You can check the code for the book if you go to www.osborne.com or check in www.HerbSchildt.com I found the same code but for C# in his latest book
其他回答
这里有很多很好的答案,所以我想在列表中再添加一个:
十多年前,我有一本叫做Project Oberon的书,里面有一些关于编译器的非常好的文字。这本书的真正突出之处在于,它的来源和解释都是非常实用和易读的。全文(2005年版)已以pdf格式提供,因此您可以立即下载。编译器将在第12章讨论:
http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf
尼克劳斯·沃斯,于尔格·古特克内西
(这本书的内容不像他关于编译器的书那么广泛)
我读过几本关于编译器的书,我可以第二龙书,花时间在这本书上是非常值得的。
最快的方法是读两本书:
JP Bennett的1990版《编译技术介绍,使用ANSI C, LeX和YaCC的第一课程》-示例代码,解析理论和设计的完美平衡-它包含了一个用C, LeX和YaCC编写的简单语法的完整编译器
龙书(旧版本)-主要是一个详细的参考功能没有涵盖在前一本书
我同意龙书的参考;IMO,它是编译器构造的权威指南。准备好接受一些核心理论吧。
If you want a book that is lighter on theory, Game Scripting Mastery might be a better book for you. If you are a total newbie at compiler theory, it provides a gentler introduction. It doesn't cover more practical parsing methods (opting for non-predictive recursive descent without discussing LL or LR parsing), and as I recall, it doesn't even discuss any sort of optimization theory. Plus, instead of compiling to machine code, it compiles to a bytecode that is supposed to run on a VM that you also write.
这仍然是一本不错的读物,尤其是如果你能在亚马逊上以便宜的价格买到的话。如果你只想简单介绍编译器,《Game Scripting Mastery》是个不错的选择。如果你想先玩硬核游戏,那么你应该选择《龙之书》。
这是一个庞大的课题。不要低估这一点。不要低估我的观点。 我听说龙之书是一个(?)开始的地方,连同搜索。(收集学会寻找,最终它将成为你的人生。 构建自己的编程语言绝对是一个很好的练习!但你要知道,它最终永远不会被用于任何实际目的。这种情况很少有例外。
我记得大约七年前问过这个问题,当时我对编程还是个新手。
我问的时候非常小心,令人惊讶的是,我没有像你们在这里受到那么多批评。然而,他们确实给我指出了“龙书”的方向,在我看来,这是一本真正伟大的书,解释了编写编译器所需知道的一切(当然,你必须掌握一两种语言)。你懂的语言越多越好。
是的,很多人说读那本书是疯狂的,你不会从中学到任何东西,但我完全不同意这种说法。
许多人还说编写编译器是愚蠢和毫无意义的。编译器开发之所以有用,原因有很多:
因为它很有趣。 它是有教育意义的,当你学习如何编写编译器时,你会学到很多计算机科学和其他技术,这些技术在编写其他应用程序时很有用。 如果没有人编写编译器,现有的语言就不会变得更好。
我没有立即编写自己的编译器,但在询问之后,我知道从哪里开始。现在,在学习了许多不同的语言和阅读了龙书之后,写作并不是什么大问题。(我也在学习计算机工程,但我对编程的大部分知识都是自学的。)
总之,《龙之书》是一个很棒的“教程”。但是在尝试编写编译器之前,先花些时间掌握一两种语言。不过,不要指望在未来十年左右成为编译器大师。
如果你想学习如何编写解析器/解释器,这本书也是不错的选择。