我想知道专业程序员如何创建自己的编程语言。
他们是否只创建一个编译器来读取文本文件并从中生成可执行文件(考虑到没有语法错误等)?
我不打算创建自己的编程语言(我显然对此缺乏经验),我只是想知道他们是如何做到的。
我想知道专业程序员如何创建自己的编程语言。
他们是否只创建一个编译器来读取文本文件并从中生成可执行文件(考虑到没有语法错误等)?
我不打算创建自己的编程语言(我显然对此缺乏经验),我只是想知道他们是如何做到的。
您应该阅读编译器构造。一些主要领域包括:
如果您有兴趣,可以在 Udacity 上学习一门很棒的免费课程,它会给您一个好主意:https ://www.udacity.com/course/cs262 (编程语言 - 构建 Web 浏览器)。我的课程还没有完成一半,但我们已经学习了一些有趣的概念以及词法分析的基础。您可能认为 Web 浏览器与编程语言无关(我曾这样做过),但实际上,除了将代码编译为可执行形式之外,它们的作用几乎相同。他们都必须阅读、解析和 lex 代码,并根据语言规范对其进行解释。JavaScript 也是一种非常强大的语言,内置于每个现代浏览器中(许多其他“语言”现在也被浏览器解释)。
再举一个例子,Python 的首次实现是用 C 编程语言实现的。这允许 python 程序使用 C 源代码。还有一个 Java 版本的 Python (jython) 可以与 Java 程序互操作。是什么让 Python Python(如果你忽略它的电池方面)是语言规范,其中包括什么是保留字,对象如何存储在内存中,什么样的表达式和控制结构是有效的,等等。 . 我的知识不足以开发像 Python 这样的“严肃”语言。但是有人必须用另一种语言来开发它。即使你确实有能力开发另一种语言,你也必须有一些特别的东西才能让它被广泛使用,
大多数时候,当有人需要一种编程语言时,他们正在创建一种“领域特定语言”。基本上,他们正在创建一种专门为他们需要解决的问题而构建的编程语言。
通常这些编程语言不会产生可执行代码。他们通常会分析程序并在内存中生成一个数据结构,该数据结构是程序的一种表示形式,以便于评估程序的语句。然后他们直接从该数据结构评估这些语句,而不是将该数据结构翻译成一系列汇编语言指令。
执行此操作的编程语言称为“解释型”。并且有一些非常流行的编程语言属于这一类。用于此类语言的另一个术语是“脚本语言”。所有的脚本语言都是解释型的,但并不是所有的解释型语言都被称为脚本语言。
产生 CPU 直接执行的“可执行文件”或一系列指令的策略称为“编译”。使用这种策略的语言被称为“编译”语言。C 和 C++ 都是编译语言。
一件有趣的事情是编译或解释只是不同的执行策略。可以制作 C 解释器,也可以编译 Python 程序。但是使用一种执行策略获得广泛接受的语言很少看到使用另一种执行策略的实现。
因此,程序员为创建新的编程语言所做的最重要的事情是:
通常,选择特定领域语言的语法是为了使第一步非常容易。要么选择与现有语言非常接近的语法,以便程序员可以重用现有的解析器,要么专门选择语法以使语言非常易于解析。
第二步通常相当简单,尽管某些语言特性可能会使事情变得非常复杂。
我发现那里的很多资源太自下而上或太理论化,对于那些不想让你的手深入 LLVM、C 或汇编,但仍然喜欢从“零开始”编写编程语言(不使用解析器生成工具)的人)。
您可以查看我的教程系列在 Swift 中实现编程语言。
我也喜欢这些资源,它们也非常适合初学者: