我对编写一个非常简约的编译器很感兴趣。
我想编写一小块软件(用C/C++编写),以满足以下条件:
语言特点:
有人能告诉我怎么开始吗?我不知道编译器是由哪些部分组成的(至少我不能马上开始),也不知道如何对它们进行编程。谢谢你的想法。
发布于 2009-02-17 23:00:28
首先,您需要决定是做编译器还是做解释器。编译器将您的代码翻译成可以直接在硬件上运行、在解释器中运行的代码,也可以编译成另一种语言,然后以某种方式进行解释。两种类型的语言都是图灵完整的,因此它们具有相同的表达能力。我建议您创建一个编译器,将代码编译成.net或Java字节码,因为它为您提供了一个非常优化的解释器来运行,以及许多标准库。
一旦做出决定,就有一些常见的步骤需要遵循。
维基百科是很好的学习更多,你可能想要启动这里。
关于现实世界的阅读材料,我建议由David & Deryck F Brown编写的“JAVA编程语言处理器”。我在我的编译器课程中使用了那本书,在这个领域里,以身作则是很棒的。
发布于 2009-02-18 00:28:28
有了你希望达到的所有目标,最具挑战性的需求可能是“非常小(最多为1-2Kloc)”。我认为单是您的第一个需求(生成ELF输出)本身就可能需要超过一千行代码。
简化问题的一种方法,至少首先是用汇编语言文本生成代码,然后输入到现有的汇编程序中(nasm将是一个很好的选择)。汇编程序将负责生成实际的机器代码,以及构建实际可运行的可执行文件所需的所有ELF特定代码。然后,您的工作将简化为语言解析和程序集代码生成。当您的项目成熟到想要消除对汇编程序的依赖时,您可以自己重写这个部分,并随时插入它。
如果我是你,我可能会从一个汇编程序开始,并在上面构建一些片段。最简单的“编译器”可能只使用一些非常简单的语句:
print "hello"
a = 5
print a把它翻译成汇编语言。一旦开始工作,您就可以构建一个lexer和解析器以及抽象语法树和代码生成器,这是现代块结构化语言所需要的大部分部分。
祝好运!
发布于 2009-02-17 22:43:03
这些是绝对必要的部分:
您也可能希望:
编辑:你已经设计语言了吗?如果不是,你也会想要研究语言设计。
https://stackoverflow.com/questions/559025
复制相似问题