首选语言: C/C++、Java和Ruby。
我正在寻找一些有用的书籍/教程,关于如何编写您自己的编译器只是为了教育目的。我最熟悉C/C++、Java和Ruby,所以我更喜欢涉及这三种资源之一的资源,但是任何好的资源都是可以接受的。
发布于 2008-08-04 22:52:00
资源大清单:
图例:
发布于 2009-07-20 23:01:20
我认为,这是一个相当模糊的问题,仅仅是因为所涉问题的深度。然而,编译器可以被分解成两个独立的部分:上半部分和底层一部分.上半部分通常采用源语言并将其转换为中间表示,而下半部则负责平台特定的代码生成。
尽管如此,一个简单的方法来处理这个主题(至少在我的编译器类中使用的方法)是在上面描述的两部分中构建编译器。具体来说,你只需构建上半身就能很好地了解整个过程。
只需完成前半部分,您就可以获得编写词法分析器和解析器的经验,并开始生成一些“代码”(我提到的中间表示)。因此,它将获取您的源程序并将其转换为另一个表示,并进行一些优化(如果您愿意的话),这是编译器的核心。下半部分将采用该中间表示,并生成在特定体系结构上运行程序所需的字节。例如,下半部分将接受您的中间表示并生成PE可执行文件。
关于这个主题的一些书,我发现特别有用的是编译器原则和技术 (或龙书,由于封面上可爱的龙)。它有一些很好的理论,并且以一种非常容易理解的方式肯定地涵盖了上下文无关的语法。此外,为了构建词法分析器和解析器,您可能会使用*nix工具-- lex和yacc。无趣的是,这本名为"lex和yacc“的书在”龙书“的结尾处找到了这个部分。
发布于 2008-08-10 07:54:32
我认为现代编译器在ML中的实现是编写文本的最好的入门编译器。还有一个Java版本和一个C版,考虑到您的语言背景,这两种语言都可能更容易访问。这本书包含了许多有用的基本材料(扫描和解析、语义分析、激活记录、指令选择、RISC和x86本机代码生成)和各种“高级”主题(编译面向对象和函数语言、多态性、垃圾收集、优化和单个静态赋值形式)到相对较小的空间(约500页)。
比起巨龙书,我更喜欢现代编译器的实现,因为现代编译器的实现对领域的调查较少--相反,它对所有主题都有很好的涵盖,你需要编写一个严肃、体面的编译器。在你读完这本书之后,如果你需要的话,你将准备好直接处理研究论文,以获得更多的深度。
我必须承认,我对尼克劳斯·威尔斯( Niklaus )的“编译器构造”(这是一个PDF格式的可在线获得 )有一个严肃的软肋。我觉得Wirth的编程美学很美,但是有些人觉得他的风格太少了(例如,Wirth倾向于递归下降解析器,但大多数CS课程侧重于解析器生成器;Wirth的语言设计相当保守)。编译器结构是Wirth的基本思想的一个非常简洁的升华,所以不管你是否喜欢他的风格,我强烈推荐读这本书。
https://stackoverflow.com/questions/1669
复制相似问题