可能重复: 学习编写编译器
我环顾四周,试图了解更多关于编程语言开发的信息,但在网上找不到很多。我发现了一些教程视频,但不多的文本指南,常见问题,建议等。我真的很好奇如何建立我自己的编程语言。我不禁要问:
您如何着手创建自己的编程语言?
我想建立一种非常基本的语言。我不打算有一个非常好的语言,我也不认为它将被任何人使用。我只想让自己的语言更好地学习操作系统,编程,并在任何事情上都变得更好。
从哪里开始?构建语法?构建编译器?需要什么技能?很多关于操作系统的组装和理解?大多数编译器和语言都是用哪种语言构建的?我想是C。
发布于 2010-09-28 06:59:27
我想说的是,在开始之前,您可能想看看龙书和/或编程语言语用学。这将使你掌握编程语言的理论。本书涵盖编译和解释,并将使您能够构建生成基本编程语言所需的所有工具。
我不知道你知道多少汇编语言,但除非你对汇编语言编程的某些方言相当满意,否则我建议你不要尝试编写一个编译成汇编代码的编译器,因为这是一个相当大的挑战。您在前面提到过,您熟悉C和C++,因此您也许可以编写一个编译器,该编译器可以编译成C或C++,然后使用gcc/g++或任何其他C/C++编译器将代码转换为本机可执行文件。这就是瓦拉编程语言所做的事情(它将Vala语法转换为使用GObject库的C代码)。
至于您可以使用什么来编写编译器,您有很多选择。您可以用C或C++手工编写它,或者为了简化开发,您可以使用一种更高级的语言,以便您可以更多地关注编译器的编写,而不是内存分配和使用C中字符串所需的内容。
您可以简单地生成语法,并让Flex和野牛生成解析器和词法分析器。这是非常有用的,因为它允许您进行迭代开发,以快速获得一个工作的编译器。
另一种选择是使用反来生成解析器,这样做的好处是,您可以获得许多ANTLR可以编译到的目标语言。我从来没有用过这个,但我听说过很多。
此外,如果您希望更好地了解在编程语言编译器/扫描器/解析器构造中经常使用的模型,那么您应该得到一本关于计算模型的书。我推荐计算理论概论。
您似乎也对获得对操作系统的了解感兴趣。我想说的是,这与编程语言设计是分开的,应该单独进行。这本书“现代操作系统原理”是学习这方面的一个很好的起点。您可以从创建shell或编写模拟ls命令的程序等小项目开始,然后进行更低级别的操作,这取决于如何使用C中的系统调用。
我希望这对你有帮助。
编辑:自从我写了这个答案以来,我学到了很多。当我看到这个答案的时候,我正在接受布朗大学提供的关于编程语言的在线课程。这位教授非常正确地指出,这个答案对解析者有很大的影响,但对其他的一切都是轻描淡写。如果您想更好地了解如何创建一种编程语言,我建议您阅读课程、视频和练习。
发布于 2010-09-28 06:21:30
这完全取决于您的编程语言将是什么样子。
- Native code (which architectures and operating systems?)
- JVM
- Regular .NET
- .NET using the Dynamic Language Runtime (like IronRuby/IronPython)
- [Parrot](http://www.parrot.org/)
就我个人而言,我会强烈考虑以JVM或.NET为目标,因为这样您就可以免费获得许多“安全”,以及您的语言可以使用的大量库。(显然,本机代码中也有很多库,但我怀疑它们之间的互操作性可能更棘手。)
我看不出为什么您特别想用C编写编译器(或系统的其他部分),特别是如果它只是为了教育目的(所以您不需要一亿行每秒的编译器)。你个人最有效率的语言是什么?
发布于 2010-09-28 06:31:40
看看反。它是一个很棒的编译器-编译器,你用它来为一种语言构建一个解析器。
构建一种语言基本上就是定义一个语法,并在这个语法中添加生产规则。手工做这件事并不简单,但是一个好的编译器会对你有很大的帮助。
您可能还想看一看经典的“龙书”(一本关于编译器的书,其中有一位骑士在头版上杀死了一条龙)。(谷歌)
构建特定于领域的语言是一项有用的技能。域特定语言通常不是功能齐全的编程语言,但通常是用为项目定制的自定义语言定制的业务规则。也来看看这个话题。
https://stackoverflow.com/questions/3810119
复制相似问题