正在加载图片...
China-pub.com 下载 第8章 代码生成 本章要点 ·中间代码和用于代码生成的数据结构 ·商用编译器中的代码生成:两个案例研究 ·基本的代码生成技术 ·TM:简单的目标机器 ·数据结构引用的代码生成 ,TNY语言的代码生成器 ·控制语句和逻辑表达式的代码生成 ·代码优化技术考察 ·过程和函数调用的代码生成 ,TNY代码生成器的简单优化 在这一章中,我们着手编译器的最后工作 用来生成日标机器的可执行代码,这个可执 行代码是源代码语义的忠实体现。代码生成是编译器最复杂的阶段,因为它不仅依赖于源语言 的特征,而且还依赖于目标结构、运行时环境的结构和运行在目标机器的操作系统的细节信息 通过收集源程序进一步的信息,并通过定制生成代码以便利用目标机器,如寄存器、寻址模式、 管道和高速缓存的特殊性质,代码生成通常也涉及到了一些优化或改善的尝试。 由于代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构的步骤 其中包括了某种称做中间代码(itermediate code)的抽象代码。编译器也可能没有生成真正的可 执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处 理。汇编器、链接器和装入器可由操作系统提供或由编译器自带。在这一章中,我们仅仅集中 关注于中间代码和汇编代码的生成,这两者之间有很多共同特性。我们不考虑汇编代码到可执 行代码的更进一步的处理,汇编语言或系统的编程文本可以更充分地处理它。 本章的第1节考虑中间代码的两种普遍形式,三地址码和P代码,并且讨论它们的一些属 性。第2节描述生成中间代码或汇编代码的基本算法。接下来的章节讨论针对不同语言特性的 代码生成技术,这包括了表达式、赋值语句、控制语句(如if语句,while语句)以及过程和函 数调用。 之后的一节将应用在前面章节中学到的技术开发TY语言的一个汇编代码生成器。由于 在这种细节水平上的代码生成需要实际的目标机器,因此首先讨论一个目标结构和机器模拟器 TM。附录C提供了源代码清单。然后,我们再描述完整的TNY语言的代码生成器。最后给出 ,个关于标准代码的改善、优化技术的简介,同时描述了怎样将一些简单的技术融入到TNY 代码生成器之中。 8.1中间代码和用于代码生成的数据结构 在翻译期间,中间表示(intermediate representation)或IR代表了源程序的数据结构。迄今为 止,本文使用了抽象语法树作为主要的R。除R外,翻译期间的主要数据结构是符号表,这在 第6章中已学过了。 虽然抽象语法树是源代码完美充分的表述,即使对于代码生成也不过这样(这一点我们将 在后面的章节中看到),但是它与目标代码极不相像,在控制流构造的描述上尤为如此。在控 制流构造上,目标代码(如机器代码或汇编代码)使用转移语句而不是if和wh11e语句。因此,下载 第8章 代 码 生 成 本章要点 • 中间代码和用于代码生成的数据结构 • 商用编译器中的代码生成:两个案例研究 • 基本的代码生成技术 • TM:简单的目标机器 • 数据结构引用的代码生成 • TINY语言的代码生成器 • 控制语句和逻辑表达式的代码生成 • 代码优化技术考察 • 过程和函数调用的代码生成 • TINY代码生成器的简单优化 在这一章中,我们着手编译器的最后工作——用来生成目标机器的可执行代码,这个可执 行代码是源代码语义的忠实体现。代码生成是编译器最复杂的阶段,因为它不仅依赖于源语言 的特征,而且还依赖于目标结构、运行时环境的结构和运行在目标机器的操作系统的细节信息。 通过收集源程序进一步的信息,并通过定制生成代码以便利用目标机器,如寄存器、寻址模式、 管道和高速缓存的特殊性质,代码生成通常也涉及到了一些优化或改善的尝试。 由于代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构的步骤, 其中包括了某种称做中间代码 (itermediate code)的抽象代码。编译器也可能没有生成真正的可 执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处 理。汇编器、链接器和装入器可由操作系统提供或由编译器自带。在这一章中,我们仅仅集中 关注于中间代码和汇编代码的生成,这两者之间有很多共同特性。我们不考虑汇编代码到可执 行代码的更进一步的处理,汇编语言或系统的编程文本可以更充分地处理它。 本章的第1节考虑中间代码的两种普遍形式,三地址码和 P -代码,并且讨论它们的一些属 性。第2节描述生成中间代码或汇编代码的基本算法。接下来的章节讨论针对不同语言特性的 代码生成技术,这包括了表达式、赋值语句、控制语句 (如i f语句,w h i l e语句)以及过程和函 数调用。 之后的一节将应用在前面章节中学到的技术开发 T I N Y语言的一个汇编代码生成器。由于 在这种细节水平上的代码生成需要实际的目标机器,因此首先讨论一个目标结构和机器模拟器 T M。附录C提供了源代码清单。然后,我们再描述完整的 T I N Y语言的代码生成器。最后给出 一个关于标准代码的改善、优化技术的简介,同时描述了怎样将一些简单的技术融入到 T I N Y 代码生成器之中。 8.1 中间代码和用于代码生成的数据结构 在翻译期间,中间表示(intermediate representation)或I R代表了源程序的数据结构。迄今为 止,本文使用了抽象语法树作为主要的I R。除I R外,翻译期间的主要数据结构是符号表,这在 第6章中已学过了。 虽然抽象语法树是源代码完美充分的表述,即使对于代码生成也不过这样 (这一点我们将 在后面的章节中看到 ),但是它与目标代码极不相像,在控制流构造的描述上尤为如此。在控 制流构造上,目标代码 (如机器代码或汇编代码 )使用转移语句而不是 i f和w h i l e语句。因此
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有