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

32 programming-languages

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

我环顾四周试图找到有关编程语言开发的更多信息,但在网上找不到很多东西.我找到了一些教程视频,但对于文本指南,常见问题解答,建议等并不多.我真的很好奇如何构建自己的编程语言.这让我想问:

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

我想建立一个非常基本的语言.我不打算有一个非常好的语言,也不认为它会被任何人使用.我只是想用自己的语言来学习更多关于操作系统,编程的知识,并且在所有方面都变得更好.

一个人从哪里开始?构建语法?构建编译器?需要什么技能?很多装配和理解操作系统?大多数编译器和语言都内置了哪些语言?我假设C.

Var*_*ath 31

我会说在你开始之前你可能想看看龙书和/或编程语言语用学.这将使您了解编程语言理论.这些书涵盖了编译和解释,使您能够构建制作基本编程语言所需的所有工具.

我不知道你知道多少汇编语言,但除非你对汇编语言编程的某些方言感到满意,否则我建议你不要试图编写一个汇编成汇编代码的编译器,因为它有点像一个挑战.你刚才提到你熟悉C和C++,所以也许你可以编写一个编译器,编译成C或C++,然后使用gcc/g ++或任何其他C/C++编译器将代码转换为本机可执行文件.这就是Vala编程语言所做的事情(它将Vala语法转换为使用GObject库的C代码).

至于编写编译器可以使用什么,你有很多选择.您可以在C或C++中手动编写它,或者为了简化开发,您可以使用更高级别的语言,这样您就可以专注于编译器的编写而不是内存分配以及处理字符串所需的内容在C.

您可以简单地生成语法并让FlexBison生成解析器和词法分析器.这非常有用,因为它允许您进行迭代开发以快速获得有效的编译器.

另一个选择是使用ANTLR生成解析器,这样做的好处是可以获得许多ANTLR可以编译的目标语言.我从来没有用过这个,但我听说过很多.

此外,如果您希望在编程语言编译器/扫描器/解析器构造中经常使用的模型有更好的基础,那么您应该获得一本关于计算模型的书.我建议介绍计算理论.

您似乎也对获得对操作系统的理解表现出兴趣.我想说的是与编程语言设计分开的东西,应该单独进行." 现代操作系统原理 "一书是一个很好的学习起点.您可以从创建shell的小项目开始,或编写模拟ls命令的程序,然后进入更低级别的事情,具体取决于您使用C语言进行系统调用的方式.

我希望能帮助你.

编辑:自从我写这个答案以来,我学到了很多东西.当我在那里看到这个答案时,我正在参加布朗大学提供的编程语言在线课程.教授非常正确地指出,这个答案谈论了很多关于解析器的内容,但对其他所有内容都很清楚.如果您想更好地了解如何创建编程语言,我真的建议您阅读课程视频和练习.

  • 感谢您将此标记为正确答案.当我输入所有内容时,其他人的答案已被标记为正确.这是我在此网站上发布的第一个被接受的答案. (3认同)

Jon*_*eet 6

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

  • 你真的希望它被编译吗?还有解释语言......或者你可以在执行时实现编译

  • 你想要什么目标平台?一些选择:

    • 本机代码(架构和操作系统?)
    • JVM
    • 常规.NET
    • .NET使用动态语言运行时(如IronRuby/IronPython)
    • 鹦鹉

就个人而言,我强烈考虑将JVM或.NET作为目标,因为那时你可以免费获得很多"安全",以及你的语言可以使用的大量库.(显然,使用本机代码也有很多库,但我怀疑它们之间的互操作性可能比较复杂.)

我没有理由为什么你特别想在C中编写一个编译器(或系统的其他部分),特别是如果它仅用于教育目的(因此你不需要一个1亿行一秒的编译器) ).你个人最有效的语言是什么?


Hol*_*roe 5

看看ANTLR.它是一个很棒的编译器编译器,用于为语言构建解析器.

构建语言基本上是定义语法并将生成规则添加到此语法中.手工完成这一点并不简单,但一个好的编译器编译器会对你有所帮助.

您可能还想看看经典的"龙书"(一本关于编辑器的书,其中有一个骑士在头版上杀死一条龙).(谷歌一下).

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