首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作自己的编程语言?

如何制作自己的编程语言?
EN

Stack Overflow用户
提问于 2010-09-28 06:10:44
回答 4查看 26.9K关注 0票数 33

可能重复: 学习编写编译器

我环顾四周,试图了解更多关于编程语言开发的信息,但在网上找不到很多。我发现了一些教程视频,但不多的文本指南,常见问题,建议等。我真的很好奇如何建立我自己的编程语言。我不禁要问:

您如何着手创建自己的编程语言?

我想建立一种非常基本的语言。我不打算有一个非常好的语言,我也不认为它将被任何人使用。我只想让自己的语言更好地学习操作系统,编程,并在任何事情上都变得更好。

从哪里开始?构建语法?构建编译器?需要什么技能?很多关于操作系统的组装和理解?大多数编译器和语言都是用哪种语言构建的?我想是C。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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中的系统调用。

我希望这对你有帮助。

编辑:自从我写了这个答案以来,我学到了很多。当我看到这个答案的时候,我正在接受布朗大学提供的关于编程语言的在线课程。这位教授非常正确地指出,这个答案对解析者有很大的影响,但对其他的一切都是轻描淡写。如果您想更好地了解如何创建一种编程语言,我建议您阅读课程、视频和练习。

票数 31
EN

Stack Overflow用户

发布于 2010-09-28 06:21:30

这完全取决于您的编程语言将是什么样子。

  • 你真的想要编译吗?还有解释语言..。或者您可以在执行时实现编译。
  • 你希望目标平台是什么?一些备选方案:
代码语言:javascript
复制
- 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编写编译器(或系统的其他部分),特别是如果它只是为了教育目的(所以您不需要一亿行每秒的编译器)。你个人最有效率的语言是什么?

票数 6
EN

Stack Overflow用户

发布于 2010-09-28 06:31:40

看看。它是一个很棒的编译器-编译器,你用它来为一种语言构建一个解析器。

构建一种语言基本上就是定义一个语法,并在这个语法中添加生产规则。手工做这件事并不简单,但是一个好的编译器会对你有很大的帮助。

您可能还想看一看经典的“龙书”(一本关于编译器的书,其中有一位骑士在头版上杀死了一条龙)。(谷歌)

构建特定于领域的语言是一项有用的技能。域特定语言通常不是功能齐全的编程语言,但通常是用为项目定制的自定义语言定制的业务规则。也来看看这个话题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3810119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档