完成一个编程语言需要做什么?
我们把整个编程语言的工作抽象一下,编程语言需要干什么?
- 我们在一个文本中写了几行代码,然后通过编译器将它编译成了字节码文件去执行,那么我们的工作其实就是要把文本转化为字节码,说起来很轻松,但是实际上需要解决很多问题
在实际的实现中,我们大致可以分为三个部分
模块 | 输入 | 输出 |
---|---|---|
词法分析器(Lexer) | 代码(纯文本) | 符号(Tokens) |
解析器(Parser) | 符号(Tokens) | 抽象语法树(AST) |
编译器(Compiler) | 抽象语法树(AST) | 字节码文件 |
这几个模块或许你们还并不熟悉,这些部分有些需要我们手撸代码,有些则是有现成的工具可以利用,相关的概念网上可以查到很多详细的资料,我们这边不会进行详细的解释,实际上你也并不需要了解这些东西到底是什么,在我们实现它的时候,你就会自然而然地了解
虽说如此,我们还是有必要通过一个例子来解释整个过程
例子
词法分析器接受文本输入并将其每个词标记出来,代码于是变成了一个符号列表。符号还与有助于进一步分析的类型相关联。
符号被传递给解析器,解析器负责将符号组织成称为抽象语法树的层次结构。树决定了代码的执行顺序。Compiler 编译器遍历树并将其映射为有效的字节码指令