Skip to content
GitHub RSS

开发日志02:预期工作

完成一个编程语言需要做什么?

我们把整个编程语言的工作抽象一下,编程语言需要干什么?

  • 我们在一个文本中写了几行代码,然后通过编译器将它编译成了字节码文件去执行,那么我们的工作其实就是要把文本转化为字节码,说起来很轻松,但是实际上需要解决很多问题

在实际的实现中,我们大致可以分为三个部分

模块输入输出
词法分析器(Lexer)代码(纯文本)符号(Tokens)
解析器(Parser)符号(Tokens)抽象语法树(AST)
编译器(Compiler)抽象语法树(AST)字节码文件

这几个模块或许你们还并不熟悉,这些部分有些需要我们手撸代码,有些则是有现成的工具可以利用,相关的概念网上可以查到很多详细的资料,我们这边不会进行详细的解释,实际上你也并不需要了解这些东西到底是什么,在我们实现它的时候,你就会自然而然地了解

虽说如此,我们还是有必要通过一个例子来解释整个过程

例子

词法分析器接受文本输入并将其每个词标记出来,代码于是变成了一个符号列表。符号还与有助于进一步分析的类型相关联。

符号被传递给解析器,解析器负责将符号组织成称为抽象语法树的层次结构。树决定了代码的执行顺序。Compiler 编译器遍历树并将其映射为有效的字节码指令