创建编程语言

时间:2013-03-10 13:52:19

标签: compiler-construction programming-languages

我想知道专业程序员如何创建自己的编程语言 他们只创建一个读取文本文件并从中生成可执行文件的编译器(考虑到没有语法错误等)吗?

我不打算创建我自己的编程语言(我显然对此缺乏经验),我只想知道他们是如何做到的。

4 个答案:

答案 0 :(得分:3)

您应该阅读编译器构造。一些主要领域包括:

  • 词法分析
  • 语法分析
  • 语义分析
  • 代码优化

答案 1 :(得分:3)

如果您有兴趣,可以选择Udacity,这将为您提供一个很好的免费课程:https://www.udacity.com/course/cs262(编程语言 - 构建Web浏览器)。我还没有完成整个课程,但我们学到了一些有趣的概念以及词法分析的基础。您可能认为Web浏览器与编程语言无关(我做过),但实际上,除了将代码编译为可执行形式之外,它们几乎完全相同。它们都必须读取,解析和解释代码,并根据语言的规范对其进行解释。 JavaScript也是一种非常强大的语言,内置于每个现代浏览器中(现在许多其他'语言'也被浏览器解释)。

再举一个例子,Python的首次实现是用C编程语言实现的。这允许python程序使用C源代码。 Python(jython)上还有一个与Java程序互操作的Java版本。是什么让Python Python(如果你忽略它的电池包含方面)是语言规范,其中包括什么是保留字,对象如何存储在内存中,什么样的表达式和控制结构是有效的等等。我完全没有足够的知识来开发像Python这样的“严肃”语言。但是有人必须用另一种语言来开发它。即使你确实有能力开发另一种语言,你也必须有一些特殊的东西才能被广泛使用,因为有成千上万的编程语言,其中许多被认为是业余爱好语言(例如,有一些语言设计如此他们的源代码将类似于莎士比亚戏剧或食谱。

答案 2 :(得分:2)

大多数情况下,当某人需要编程语言时,他们正在创建“特定于域的语言”。基本上他们正在创建一种编程语言,其目的是为他们需要解决的问题而构建。

通常这些编程语言不会产生可执行代码。他们通常会分析程序并在内存中生成一个数据结构,该数据结构是程序的一种表示,可以方便地评估程序的语句。然后,他们直接从该数据结构中评估这些语句,而不是将该数据结构转换为一系列汇编语言指令。

执行此操作的编程语言称为“已解释”。并且有一些非常流行的编程语言属于这一类。另一个用于这种语言的术语是“脚本语言”。所有脚本语言都被解释,但并非所有解释语言都被称为脚本语言。

生成“可执行文件”或CPU直接执行的一系列指令的策略称为“编译”。使用此策略的语言称为“编译”语言。 C和C ++都是编译语言。

有趣的是,编译或解释只是不同的执行策略。可以创建一个C解释器,并且可以编译Python程序。但是,使用一种执行策略实现广泛接受的语言很少会看到使用另一种执行策略的实现。

因此,程序员创建新编程语言所做的最重要的事情是:

  1. 创建词法分析器和/或解析器。 (这是将一系列字符转换为代表程序的内部数据结构的部分。)
  2. 创建一个执行引擎,执行数据结构表示的语句。
  3. 通常选择特定于域的语言的语法,以使第一步非常容易。选择的语法非常接近现有语言,因此程序员可以重用已经存在的解析器,或者专门选择语法以使语言非常容易解析。

    第二步通常是相当微不足道的,尽管某些语言特征可能会使事情变得非常复杂。

答案 3 :(得分:0)

对于那些不想让您深入了解LLVM,C或汇编语言,但仍然喜欢从头开始编写编程语言的人,我发现很多资源都是自下而上或过于理论化的。解析器生成工具)。

您可以查看我的教程系列Implementing a Programming Language in Swift

我也喜欢这些资源,它们对初学者也非常友好: