为什么要实现编程语言

  • 好玩
  • 深入理解程序的执行过程
  • 为以后的逆向工程研究打下一些基础

实现什么编程语言

这里我们实现了类似于ruby的编程语言。它具有以下特性:

  • 纯面向对象,即所有的字面量与值都是对象
  • 值驱动,任何表达式都具有值,且其值是一个对象
  • 支持块
  • 大部分操作都可以归结为调用某个类的成员方法/类方法

相比于ruby,我们做出的主要调整有:

  • 只支持部分ruby语法
  • 彻底推翻了ruby的单件类设计,个人认为单件类是ruby设计中问题最大的一部分
  • 继承结构简单,所有对象都默认继承object类

如何实现编程语言

简单来说有三步:

  • 实现前端:将输入的字符串变为一棵树(AST)
  • 实现内部数据结构
  • 实现eval函数

今天(2020年3月14日)我们已经完成了第一个阶段的任务

第一步:Parser

谈谈Parser

Parser是“语法解析器”的意思。一般来说它输入一串Token流,解析出一颗Ast。其实也不一定就是这样,比如说我们实现的产品就没有用词法解析器,直接通过源代码产AST。

如何做到这件事呢?这是有点麻烦的。由于我没有学过编译原理,对LR、LALR的parser generator不太了解,这里只说一说递归下降解析器的原理和我们使用的Parser Generator库。

在此之前,我们先要说一说所谓的“文法”,而这,就留给下面的文章吧。