首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
当前回答
这里有很多很好的答案,所以我想在列表中再添加一个:
十多年前,我有一本叫做Project Oberon的书,里面有一些关于编译器的非常好的文字。这本书的真正突出之处在于,它的来源和解释都是非常实用和易读的。全文(2005年版)已以pdf格式提供,因此您可以立即下载。编译器将在第12章讨论:
http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf
尼克劳斯·沃斯,于尔格·古特克内西
(这本书的内容不像他关于编译器的书那么广泛)
我读过几本关于编译器的书,我可以第二龙书,花时间在这本书上是非常值得的。
其他回答
我发现Dragon的书太难读了,因为它太专注于语言理论,而实际上编写编译器并不需要这些理论。
我将添加Oberon书籍,其中包含了一个惊人的快速和简单的Oberon编译器项目Oberon的完整源代码。
我同意龙书的参考;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》是个不错的选择。如果你想先玩硬核游戏,那么你应该选择《龙之书》。
弗雷泽和汉森的LCC编译器(维基百科)(项目主页)(github.com/drh/lcc)在他们的书“A Retargetable C编译器:设计和实现”中有描述。它是相当可读的,并解释了整个编译器,直到代码生成。
每当我想尝试一种新的语言想法时,我就写一个简单的解析器,让它生成一些容易获得良好编译器的语言,比如C。
你认为c++是如何完成的?
创建编译器的一个简单方法是使用bison和flex(或类似),构建一个树(AST)并用C生成代码,生成C代码是最重要的步骤。通过生成C代码,您的语言将自动在所有具有C编译器的平台上运行。
生成C代码就像生成HTML一样简单(只需使用打印或等效工具),这又比编写C解析器或HTML解析器容易得多。