程序员要如何创建一门编程语言?

程序员要如何创建一门编程语言?
文章图片
作者|MdShuvo译者|弯月出品|CSDN(ID:CSDNnews)虽然每位开发人员都掌握了一种甚至多种编程语言 , 但你是否曾想过自己动手创建一种编程语言?
首先 , 我们来看看什么是编程语言:
编程语言是用来定义计算机程序的形式语言 。 它是一种被标准化的交流技巧 , 用来向计算机发出指令 , 一种能够让程序员准确地定义计算机所需要使用数据的计算机语言 , 并精确地定义在不同情况下所应当采取的行动 。简而言之 , 编程语言就是一组预定义的规则 。 然后 , 我们需要通过编译器、解释器等来解释这些规则 。 所以我们可以简单地定义一些规则 , 然后 , 再使用任何现有的编程语言来制作一个可以理解这些规则的程序 , 也就是我们所说的解释器 。
编译器:编译器能够将代码转换为处理器可以执行的机器代码(例如C++编译器) 。 解释器:解释器能够逐行遍历程序并执行每个命令 。下面 , 我们来试试看创建一个超级简单的编程语言 , 在控制台中输出洋红色的字体 , 我们给它起个名字:Magenta(洋红色) 。
程序员要如何创建一门编程语言?
文章图片
建立编程语言在本文中 , 我将使用Node.js , 但你可以使用任何语言 , 基本思路依然是一样的 。 首先 , 我们来创建一个index.js文件 。
classMagenta{constructor(codes){this.codes=codes}run(){console.log(this.codes)}}//Fornow,wearestoringcodesinastringvariablecalled`codes`//Later,wewillreadcodesfromafileconstcodes=`print"helloworld"print"helloagain"`constmagenta=newMagenta(codes)magenta.run()这段代码声明了一个名为Magenta的类 。 该类定义并初始化了一个对象 , 而该对象负责将我们通过变量codes提供的文本显示到控制台 。 我们在文件中直接定义了变量codes:几个带有“hello”的消息 。
程序员要如何创建一门编程语言?
文章图片
下面 , 我们来创建词法分析器 。
什么是词法分析器?我们拿英文举个例子:Howareyou?
此处 , “How”是副词 , “are”是动词 , “you”是代词 。 最后还有一个问号(?) 。 我们可以按照这种方式 , 通过JavaScript编程将句子或短语划分为多个语法组件 。 还有一种方法是 , 将这些句子或短语分割成一个个标记 。 将文本分割成标记的程序就是词法分析器 。
程序员要如何创建一门编程语言?
文章图片
由于我们的这个编程语言非常小 , 它只有两种类型的标记 , 每一种只有一个值:
1.keyword
2.string
我们可以使用正则表达式 , 从字符串codes中提取标记 , 但性能会非常慢 。 更好的方法是遍历字符串codes中的每个字符并提取标记 。 下面 , 我们在Magenta类中创建一个方法tokenize(这就是我们的词法分析器) 。
完整的代码如下:
classMagenta{constructor(codes){this.codes=codes}tokenize(){constlength=this.codes.length//poskeepstrackofcurrentposition/indexletpos=0lettokens=[]constBUILT_IN_KEYWORDS=["print"]//allowedcharactersforvariable/keywordconstvarChars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'while(pos在终端中运行nodeindex.js , 就会看到控制台中输出的标记列表 。
程序员要如何创建一门编程语言?
文章图片
定义规则和语法
我们想看看codes的顺序是否符合某种规则或语法 。 但首先我们需要定义这些规则和语法是什么 。 由于我们的这个编程语言非常小 , 它只有一种简单的语法 , 即关键字print后跟一个字符串 。