首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
首选语言:C/ c++、Java、Ruby。
我正在寻找一些关于如何编写自己的编译器的有用书籍/教程,只是为了教育目的。我最熟悉C/ c++、Java和Ruby,所以我更喜欢包含这三者之一的资源,但任何好的资源都是可以接受的。
当前回答
最快的方法是读两本书:
JP Bennett的1990版《编译技术介绍,使用ANSI C, LeX和YaCC的第一课程》-示例代码,解析理论和设计的完美平衡-它包含了一个用C, LeX和YaCC编写的简单语法的完整编译器
龙书(旧版本)-主要是一个详细的参考功能没有涵盖在前一本书
其他回答
如果你想使用功能强大的高级工具,而不是自己构建一切,那么阅读本课程的项目和阅读材料是一个很好的选择。这是一门语言课程,由Java解析器引擎ANTLR的作者编写。你可以从Pragmatic Programmers网站上获得这门课程的PDF版本。
The course goes over the standard compiler compiler stuff that you'd see elsewhere: parsing, types and type checking, polymorphism, symbol tables, and code generation. Pretty much the only thing that isn't covered is optimizations. The final project is a program that compiles a subset of C. Because you use tools like ANTLR and LLVM, it's feasible to write the entire compiler in a single day (I have an existence proof of this, though I do mean ~24 hours). It's heavy on practical engineering using modern tools, a bit lighter on theory.
顺便说一下,LLVM非常棒。在许多情况下,你可能会编译到汇编,你最好编译到LLVM的中间表示。它是更高级别的、跨平台的,LLVM非常擅长从中生成优化的程序集。
每当我想尝试一种新的语言想法时,我就写一个简单的解析器,让它生成一些容易获得良好编译器的语言,比如C。
你认为c++是如何完成的?
“…让我们构建一个编译器……”
我认为@sasb是http://compilers.iecc.com/crenshaw/的第二名。暂时忘掉买更多的书吧。
为什么?工具和语言。
所需的语言是Pascal,如果我没记错的话,是基于Turbo-Pascal的。如果你去http://www.freepascal.org/并下载Pascal编译器,所有的例子都可以直接从页面上运行~ http://www.freepascal.org/download.var Free Pascal的好处是,你可以使用它几乎任何你喜欢的处理器或操作系统。
一旦你掌握了课程,然后尝试更高级的“龙书”~ http://en.wikipedia.org/wiki/Dragon_book
我发现Dragon的书太难读了,因为它太专注于语言理论,而实际上编写编译器并不需要这些理论。
我将添加Oberon书籍,其中包含了一个惊人的快速和简单的Oberon编译器项目Oberon的完整源代码。
最快的方法是读两本书:
JP Bennett的1990版《编译技术介绍,使用ANSI C, LeX和YaCC的第一课程》-示例代码,解析理论和设计的完美平衡-它包含了一个用C, LeX和YaCC编写的简单语法的完整编译器
龙书(旧版本)-主要是一个详细的参考功能没有涵盖在前一本书