上QQ阅读APP看书,第一时间看更新
第2章 你好,字节码!
本章的目标是完成编译并执行以下Monkey表达式:
1 + 2
这听起来并不是一个远大的目标,但为了实现它,我们不得不学习许多新知识,并构建将在后续章节中使用的大量基础架构。选择简单的表达式1 + 2
,是为了避免因Monkey代码本身及其工作原理分心,从而专注于实现编译器和虚拟机。
本章结束后,我们的编译器应该具备以下技能。
- 能够接受Monkey表达式
1 + 2
作为输入。 - 利用已有的包
lexer
、token
、parser
对表达式进行标记和语法分析。 - 生成AST,其节点定义在
ast
包中。 - 将AST作为输入,并将其编译成字节码。
- 将字节码作为新构建虚拟机的输入,并由虚拟机执行。
- 确保虚拟机输出结果
3
。
1 + 2
表达式将贯穿新系统的所有主要部分,如图2-1所示。
图 2-1
对于数据结构来说,在最终输出结果3
之前,你会看到多次数据结构转换,如图2-2所示。
图 2-2
由于可以复用上一本书中构建的多个包,因此我们已经能够处理AST之前的所有内容。在这之后,我们将进入未知领域。我们需要定义字节码指令,并构建编译器和虚拟机——只是为了将1 + 2
变成3
。有没有被吓到?不用担心,我们将像往常一样,一步一步地从字节码开始构建。