首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
当前回答
Not included in the list so far is this book: Basics of Compiler Design (Torben Mogensen) (from the dept. of Computer Science, University of Copenhagen) I'm also interested in learning about compilers and plan to enter that industry in the next couple of years. This book is the ideal theory book to begin learning compilers as far as I can see. It's FREE to copy and reproduce, cleanly and carefully written and gives it to you in plain English without any code but still presents the mechanics by way of instructions and diagrams etc. Worth a look imo.
其他回答
龙之书绝对是关于“构建编译器”的书,但是如果您的语言不像当前这一代语言那么复杂,那么您可能想看看设计模式中的解释器模式。
书中的示例设计了一种类似正则表达式的语言,并且经过了深思熟虑,但正如书中所述,它有助于思考整个过程,但实际上只在小型语言上有效。然而,用这种模式为一种小型语言编写解释器要快得多,而不必学习所有不同类型的解析器,yacc和lex等等……
我也喜欢Crenshaw的教程,因为它非常清楚地说明了编译器只是另一个程序,它读取一些输入并写出一些输出。
阅读它。
如果您愿意,可以使用它,但随后查看另一篇关于如何编写更大、更完整的编译器的参考文献。
阅读《关于信任的信任》,了解一下在这个领域可以做的不明显的事情。
还有一本书还没有推荐,但非常重要,那就是约翰·莱文的《链接器和加载器》。如果您不使用外部汇编程序,则需要一种方法来输出可以链接到最终程序的目标文件。即使您正在使用外部汇编程序,也可能需要了解重定位以及整个程序加载过程如何工作,以制作一个工作工具。这本书收集了很多关于各种系统的这个过程的随机知识,包括Win32和Linux。
我正在研究同样的概念,发现了Joel Pobar写的一篇很有前景的文章,
为.NET框架创建一个语言编译器-不知道它去了哪里
为.NET框架创建一个语言编译器-原始文档的pdf副本
他讨论了编译器的高级概念,并为. net框架发明了自己的语言。尽管它的目标是。net框架,但其中的许多概念应该能够被复制。文章内容包括:
语言的定义 扫描仪 解析器(位我主要感兴趣) 针对。net框架的 代码生成器
还有其他的话题,但你得到的只是。
它面向初学者,用c#(不完全是Java)编写。
HTH
骨头
这是一个庞大的课题。不要低估这一点。不要低估我的观点。 我听说龙之书是一个(?)开始的地方,连同搜索。(收集学会寻找,最终它将成为你的人生。 构建自己的编程语言绝对是一个很好的练习!但你要知道,它最终永远不会被用于任何实际目的。这种情况很少有例外。