2013-03-10 66 views
5

我想知道专业程序员如何创建自己的编程语言。
他们是否只创建一个读取文本文件并编译为可执行文件的编译器(考虑到没有语法错误等)?我不打算创建自己的编程语言(我显然太没经验了),我只是想知道他们是如何做到的。创建编程语言

回答

3

如果你有兴趣,有一个伟大的自由当然,你可以拿在Udacity,这将给你一个好主意:https://www.udacity.com/course/cs262(编程语言 - 建立一个Web浏览器)。我还没有完成课程的一半,但我们已经学习了一些有趣的概念以及词法分析的基础。您可能认为Web浏览器与编程语言无关(我做过),但实际上,除了将代码编译为可执行形式之外,它们几乎完全相同。他们都必须阅读,解析和lex代码,并根据语言的规范进行解释。 JavaScript也是每个现代浏览器都内置的一种非常强大的语言(现在许多其他语言也被浏览器解释)。

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

+0

谢谢!我现在观看了一些视频,我认为这会帮助我理解它。首先,我想“为什么浏览器?我想学习/了解如何编程语言”,但后来我想到了它,并意识到你说的是什么。 – 2013-03-10 15:47:10

3

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

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

我估计前3个点可以省去一个“无语法”编程语言,它允许开发人员直接定义程序结​​构而不是基于分析的编译器。我一直在尝试做类似的事情,但在编程方面我很绿。 – dtech 2013-03-10 14:42:18

+1

等待,您列出代码*优化*,但不代码*生成*也不*解释*?如同那样,让程序做任何事情的东西呢? – delnan 2013-03-11 18:08:08

+2

@delnan - 通知我说主要区域的'some',意味着更多.... – 2013-03-12 08:23:35

2

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

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

这样做的编程语言被称为'解释'。还有一些非常流行的编程语言属于这一类。另一个用于这种语言的术语是'脚本语言'。所有脚本语言都被解释,但并非所有的解释语言都被称为脚本语言。

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

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

所以,一个程序员不会创建一个新的编程语言最重要的事情是这些:

  1. 创建一个词法分析器和/或解析器。 (这是将一系列字符转换为表示程序的内部数据结构的部分。)
  2. 创建一个执行引擎,用于执行由数据结构表示的语句。

通常选择域特定语言的语法使第一步非常容易。选择一种非常接近现有语言的语法,以便程序员可以重用已经存在的语法分析器,或者专门选择语法以使语言非常易于解析。

第二步通常相当平凡,但某些语言功能可能会使事情变得非常复杂。