Programming languages 如何着手制作自己的编程语言?

Programming languages 如何着手制作自己的编程语言?,programming-languages,Programming Languages,可能重复: 我环顾四周,试图找到更多关于编程语言开发的信息,但在网上找不到很多。我找到了一些教程视频,但没有太多的文字指南,常见问题解答,建议等。我真的很好奇如何建立自己的编程语言。我不禁要问: 您如何着手制作自己的编程语言 我想建立一个非常基本的语言。我不打算拥有一门非常好的语言,我也不认为它会被任何人使用。我只是想用我自己的语言来学习更多关于操作系统、编程的知识,并在任何方面都变得更好 从哪里开始?构建语法?构建编译器?需要什么技能?对操作系统有很多的组装和理解?大多数编译器和内置语言是什

可能重复:

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

您如何着手制作自己的编程语言

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


从哪里开始?构建语法?构建编译器?需要什么技能?对操作系统有很多的组装和理解?大多数编译器和内置语言是什么语言?我假设C.

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

  • 你确定要编译它吗?还有解释语言。。。或者可以在执行时实现编译

  • 您希望目标平台是什么?一些选择:

    • 本机代码(哪些体系结构和操作系统?)
    • 虚拟机
    • 常规.NET
    • .NET使用动态语言运行时(如IronRuby/IronPython)
我个人会强烈地考虑JVM或.NET,因为这样你就可以免费获得大量的“安全”,以及你的语言可以使用的大量的库。(很明显,对于本机代码,也有很多库,但我怀疑要正确地实现它们之间的互操作性可能更为棘手。)

我看不出有什么理由特别想用C编写编译器(或系统的其他部分),特别是如果它只是为了教育目的(因此不需要每秒1亿行的编译器)。你个人最擅长哪种语言?

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

构建一种语言基本上就是定义一种语法,并将产生式规则添加到该语法中。手工操作并不是件小事,但是一个好的编译器会给你很大的帮助

你可能还想看看经典的《龙之书》(一本关于编译器的书,书的头版有一位骑士杀死了一条龙)。(谷歌it)


构建特定于领域的语言是一项需要掌握的有用技能。领域特定语言通常不是功能齐全的编程语言,但通常是用为项目量身定制的定制语言制定的业务规则。也看看这个主题。

我想说,在开始之前,你可能想看看and/or。这将为你奠定编程语言理论的基础。这些书涵盖编译和解释,并将使您能够构建制作基本编程语言所需的所有工具

我不知道你们知道多少汇编语言,但除非你们对汇编语言编程的一些方言很熟悉,否则我建议你们不要试图编写一个编译成汇编代码的编译器,因为这是一个相当大的挑战。前面提到过,您对C和C++都很熟悉,所以也许您可以编写编译器,编译成C或C++,然后使用GCC/G++或任何其他C/C++编译器将代码转换为本地可执行文件。这就是编程语言所做的(它将Vala语法转换为使用GObject库的C代码)

至于你可以用什么来编写编译器,你有很多选择。您可以用C或C++手工编写,或者为了简化开发,可以使用更高级的语言,以便您可以将编译器的编写重点放在内存分配上,而不需要在C.

中使用字符串来进行编译。 您可以简单地生成语法,并拥有和生成解析器和词法分析器。这非常有用,因为它允许您进行迭代开发,以快速获得一个工作的编译器

另一种选择是生成解析器,其优点是可以获得许多ANTLR可以编译成的目标语言。我从未用过这个,但我听说过很多

此外,如果您想更好地了解编程语言编译器/扫描器/解析器构造中经常使用的模型,您应该获得一本关于计算模型的书。我推荐

您似乎也对理解操作系统感兴趣。我想说的是,这与编程语言设计是分开的,应该分开进行。这本书是学习这方面知识的一个很好的起点。您可以从一些小项目开始,比如创建一个shell,或者编写一个模拟ls命令的程序,然后进入更低级的工作,这取决于您对C中系统调用的理解程度

我希望这对你有帮助


编辑:自从我写了这个答案,我学到了很多。当我看到这个答案出现在那里时,我正在接受布朗大学提供的答案。这位教授非常正确地指出,这个答案谈论了很多关于解析器的问题,但对其他所有问题都很重要。如果你想更好地了解如何创建编程语言,我真的建议你浏览课程视频和练习。

网上有各种教程,例如

从“嵌入式领域特定语言”(embedded domain specific language,嵌入式领域特定语言)开始。这是一种实际在另一个环境中运行的语言,但您已经创建了特别适合您要使用的主题(域)的关键字、运算符等

我不确定你