摘要: 在上一章的旅程中,我们已经实现了if语句和while语句的代码生成器分派函数,而在这一章的旅程中,我们将要实现变量存取相关的代码生成器分派函数。要讨论变量存取,我们就需要对变量存取时的栈内存情况具有充分的了解。所以接下来,就让我们先来认识一下:在变量存取过程中所涉及到的栈内存情况吧。 1. 与变量存 阅读全文
posted @ 2021-02-19 16:50 樱雨楼 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 在上一章的旅程中,我们已经实现了表达式类代码生成器分派函数,而在这一章的旅程中,我们将要实现if语句和while语句的代码生成器分派函数。if语句和while语句是两种典型的带有跳转指令的语句。观察CMM指令集的实现不难发现,跳转指令,实际上就是通过强行修改IP的值,使得虚拟机下一次看到的CS[IP 阅读全文
posted @ 2021-02-19 16:48 樱雨楼 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 在上一章的旅程中,我们已经实现了一类最为简单的,只含有委托调用的分派函数,而在这一章的旅程中,我们将要实现表达式类节点的分派函数。表达式类节点,包括数字常量节点、算术运算类节点和比较运算类节点。在我们展开讨论之前,不知道你有没有从CMM指令集中注意到这样一件事:CMM指令集中的所有指令,如果只需要一 阅读全文
posted @ 2021-02-19 16:45 樱雨楼 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 从这一章的旅程开始,我们就要开始逐步的实现各个代码生成器分派函数了。首先,什么叫"较为顶层的代码生成器分派函数"?原来呀,这类分派函数都有一个共同特点:其自身不产生任何代码,而只是通过调用一些其他的分派函数,并合并这些函数所产生的代码,以实现自身功能。接下来,就让我们来看看这样的函数都有哪些,分别都 阅读全文
posted @ 2021-02-19 16:44 樱雨楼 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 从这一章开始,我们将进入代码生成器的世界。代码生成器是整个编译器中最复杂,但也最为精彩的部分。话不多说,就让我们开始吧。 1. 代码生成器概观 顾名思义,代码生成器就是用来生成代码的编译器组件。这里的"代码"一词,指的是我们已经实现了的CMM指令集中的指令。代码生成器通过解析抽象语法树,并利用符号表 阅读全文
posted @ 2021-02-19 16:39 樱雨楼 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 在这一章的旅程中,我们来实现虚拟机。CMM的虚拟机具有一套极为简单的指令集,和一个能够运行这套指令集的虚拟机。 需要注意的是:本章将不会对指令集以及虚拟机的设计和行为做过多的解释,而只是着重于展示。这是因为:在没有讲解代码生成器之前,这些解释是十分苍白的。 1. CMM虚拟机的指令集 CMM指令集一 阅读全文
posted @ 2021-02-19 16:38 樱雨楼 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 作为编译器后端的第一站,我们首先来实现语义分析器。 1. 语义分析器概观 正如上一章所说,语义分析器主要用于对抽象语法树进行语义层面的进一步检查,并生成符号表。我们也为符号表给出了一个"记录任何你想额外记录下的东西的表"这样的说了等于没说的定义。那么,CMM编译器的语义分析器到底需要做什么?其符号表 阅读全文
posted @ 2021-02-19 16:37 樱雨楼 阅读(919) 评论(0) 推荐(0) 编辑
摘要: 在前面的旅程中,我们已经实现了整个的编译器前端。我们也知道,前端的目标是将源代码转变为抽象语法树,以供后端使用。从这一章开始,我们就要前往后端世界一探究竟了,现在,就让我们来看看编译器后端到底由哪些组件组成,其分别又是在做什么吧。 1. 编译器后端的结构组成 不同于编译器前端,编译器后端并不是一个严 阅读全文
posted @ 2021-02-19 16:31 樱雨楼 阅读(620) 评论(0) 推荐(0) 编辑
摘要: 在上一章的旅程中,我们为实现语法分析器做了许多准备,我们讨论了如何表示语法,如何将记号流变为抽象语法树,如何消除左递归,如何得到First集合等问题。现在,就让我们来实现语法分析器吧。 1. CMM语言的语法及其做出选择的方案 这里,我们直接给出CMM语言的语法及其做出选择的方案,并已经消除了左递归 阅读全文
posted @ 2021-02-19 16:29 樱雨楼 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 在前面的旅程中,我们已经实现了词法分析器。词法分析器可将源代码转变为记号流,以供语法分析器使用。所以现在就让我们启程,朝着下一站——语法分析器出发吧。 1. 什么是语法 什么是语法呢?提到词法分析器,我们能够立即联想到一个个看得见摸得着的词;而提到语法分析器,又能联想到什么呢? 词法和语法的关系,就 阅读全文
posted @ 2021-02-19 16:28 樱雨楼 阅读(534) 评论(0) 推荐(3) 编辑