购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 内容组织

如图1.1所示,本书分为七章,除了第1章为概述和第7章为结束语之外,中间五章重点介绍编译器设计与实现的五个核心阶段,它们分别为:第2章词法分析和语法分析、第3章语义分析、第4章中间代码生成、第5章目标代码生成,以及第6章中间代码优化。这五章中每章的主要内容分别讨论相关内容的理论方法、实践技术和实践内容。其中, 理论方法部分 关注编译过程中各个关键步骤的理论知识,介绍相关的核心算法和技术原理; 实践技术部分 则基于理论知识,介绍编译器实现过程中的技术要点,涵盖当前使用较为广泛的工具,并用代码呼应前面的理论知识和算法; 实践内容部分 则设计了具有不同难度的编译器实现任务,帮助学生加深理解前面介绍的理论方法和实践技术。同时,从第2章至第6章的实践内容可形成一个流程完整、现实可用和功能完备的编译器。其中,第2、3和4章的实践内容前后衔接,逐步完成编译的过程(从源程序到中间代码)。而第5章和第6章的实践内容,均依赖于第4章的实践内容中中间代码生成器的输出。其中,第5章的实践内容完成从中间代码到目标代码的翻译,而第6章的实践内容则以中间代码为输入,在完成机器无关的优化之后,再输出中间代码,这可以作为第5章实践内容的输入,继续完成从中间代码到目标代码的翻译。

在第2章词法分析和语法分析中,对于词法分析的理论方法,我们重点介绍正则表达式、有限状态自动机,以及状态最小化算法;对于语法分析的理论方法,我们重点介绍上下文无关文法,并详细讨论自顶向下和自底向上这两种语法分析算法。对应于这些理论方法,在实践技术部分,我们结合当前使用广泛的Flex和Bison工具,介绍当前编译器实践中常用的实现技术和工具的使用方法。本章的实践内容为基于Flex和Bison实现面向C--语言的词法分析和语法分析器,该分析器以C--源代码为输入,其输出内容会成为第3章语义分析实践内容的输入。

图1.1 本书内容的组织框架图

在第3章语义分析中,我们重点介绍语义分析的理论方法,并结合示例深入讨论上下文相关的分析和语法制导的翻译等内容。在实践技术部分,我们重点讨论属性文法和符号表的设计与实现原理,并介绍支持多层作用域的符号表和语义分析过程中的提示信息实现技术。本章的实践内容是在第2章实践内容的基础上构建语义分析器,实现对源代码的语义分析,检测其中的多种类型错误,并反馈错误信息。

在第4章中间代码生成中,我们重点介绍中间代码的设计与表示,并详细介绍中间代码的内存模型及其技术原理。在实践技术部分,我们重点介绍中间代码的线形表示和树形表示,以及运行时环境的设计与实现,详细介绍基本表达式、语句、函数调用以及数组和结构体的翻译模式;同时,我们还介绍中间代码生成实践的额外提示实现方法。前面的章节完成了词法和语法分析,并实现了语义分析器,本章的实践内容是根据语义分析的结构,将C--语言书写的源程序翻译为中间代码程序。

在第5章目标代码生成中,我们重点介绍目标代码生成的设计,以及目标代码的内存模型设计和管理。同时,为了讨论目标代码生成过程中的寄存器选择问题,我们介绍寄存器分配算法和活跃变量分析算法。最后,我们详细介绍目标代码生成过程中的指令选择问题。基于这些理论方法,我们在实践技术部分详细介绍目标代码的MIPS模拟器QtSpim的安装与使用,并讨论目标代码MIPS32的语法和书写规范。基于对MIPS32的讨论,我们进一步介绍指令选择的实现。并且,对应于理论部分的内容,我们也介绍寄存器分配算法和活跃变量分析算法的具体实现。最后,我们介绍代码生成实践的额外提示实现方法。本章的实践内容基于第4章实践内容生成的中间代码表示形式,进一步将中间代码翻译为我们的目标语言MIPS32汇编代码。

在第6章中间代码优化中,主要的理论内容是基于程序分析技术的中间代码优化。我们首先概要性地介绍程序分析技术,并重点介绍基本块的定义和控制流图的构建与分析技术。接着,我们进一步介绍局部分析与优化,详细介绍数据流分析的算法与理论。在完成局部分析的理论介绍之后,我们进一步讨论全局和过程间的分析与优化的方法。基于理论方法的讨论,我们在实践技术部分重点介绍基于三地址码的符号表和有向无环图构造过程中的实现细节。我们也详细讨论了基于迭代的数据流分析算法的实现细节,并进一步讨论全局优化算法的实现。本章的实践内容的输入格式与第5章中相同,均基于第4章实践内容生成的中间代码表示形式,但本章重点考察基于中间代码的优化,目标是将输入的中间代码经过本章理论方法部分介绍的算法优化之后,以更好的中间代码的形式输出。 D9+h7LUJwF9xvV8QrJ4V8FUtO17/QmUfVZTXwu36RxAB/EtM/NqalR9sOYzd+X1D

点击中间区域
呼出菜单
上一章
目录
下一章
×