北航编译原理课件 12.编译程序生成方法和工具
- 格式:ppt
- 大小:189.50 KB
- 文档页数:22
123是汇编程序、编译程序以及各种变换程序的总称。
4567891011121314151617181920一遍扫描即可完成整个编译工作的称为一遍扫描编译程序 其结构为: S.P.取单词 返回单词 词法分析 整理目标程序 停机 语法分析 语法成分 返回分析结果 语义分析生成 目标程序O.P.北京航空航天大学计算机学院21三、前端和后端 根据编译程序各部分功能,将编译程序分成前端和后端。
前端:通常将与源程序有关的编译部分称为前端。
词法分析、语法分析、语义分析、中间代码生成、 代码优化 -------分析部分 特点:与源语言有关后端:与目标机有关的部分称为后端。
目标程序生成(与目标机有关的优化) -------综合部分 特点:与目标机有关北京航空航天大学计算机学院 22四、 编译程序的前后处理器源程序:多文件、宏定义和宏替换(调用),包含文件 目标程序:一般为汇编程序或可重定位的机器代码框架源程序 预处理器 源程序 编译程序 目标程序(汇编) 汇编程序 可运行的机器代码 可重定位机器码 (Obj文件)北京航空航天大学计算机学院 23可重定位机器码 (文件组) 连接编辑 可执行文件 加载器 库目标、可重 定位目标文件1.4 编译技术的应用[ 语法制导的结构化编辑器 [ 程序格式化工具 [ 软件分析与测试工具 [ 程序理解工具 [ 高级语言的翻译工具 [ 等等北京航空航天大学计算机学院24。
第十二章代码生成课前索引【课前思考】在第2章PL/0语言编译程序的实现中,产生的目标代码是一种与机器无关的假想栈式计算机器汇编语言类PCODE,它的执行需要用具体机器配置的语言编写一个解释程序。
本章将介绍的代码生成是把某种高级程序设计语言经过语法语义分析或优化后的中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出,这样的转换程序称为代码生成器,因此,代码生成器的构造与输入的中间代码形式和输出的目标代码的机器结构密切相关。
本章将主要介绍生成具体机器汇编语言为目标代码时需要考虑的一些共同问题和中间语言的选择考虑。
建议学员考虑如何把PL/0语言编译程序的目标代码类PCODE翻译成你所熟悉的具体机器的汇编语言,作为学习代码生成的预习思考。
【学习目标】本章将介绍以具体计算机指令作为目标代码的代码生成器的设计,以一个计算机模型为例介绍一个简单的代码生成器需要考虑的问题,在代码生成时要考虑充分利用寄存器,以减少对内存的存取次数以提高目标程序运行速度,为此,本章将给出寄存器分配的原则,并使用待用信息链表法的代码生成算法,最后给出中间语言的选择需要考虑的问题。
【学习指南】由于代码生成的目标代码与具体计算机的结构有关,如指令格式、字长及寄存器的个数和种类,并与指令的语义和所用操作系统等都密切相关,因此实现非常困难。
通过本章学习,仅为学员初步了解一个高级程序设计语言编译程序目标代码生成需要考虑的问题和解决这些问题的基本原则和方法,为今后应用打下初步基础。
要想真正掌握代码生成技术的细节,最好的方法是实现一个代码生成器,建议学员学习本章后,用第2章PL/0语言的中间代码类PCODE为输入,选择一个自己熟悉的汇编语言为输出,编写一个代码生成器。
【难重点】重点:衡量目标代码的质量主要从占用空间和执行效率两方面考虑,而寄存器的合理分配对解决这两方面的问题起着重要的作用,因此要求学员了解寄存器的分配原则很重要,一个要求执行效率高的编译器对寄存器的分配可能要进行优化。
编译程序生成的常用方法一、预处理预处理是编译程序生成的第一步,它主要处理源代码中的宏定义、条件编译和包含其他文件等预处理指令。
预处理器根据这些指令对源代码进行处理,并生成一个修改后的源代码文件。
预处理的主要目的是为了提高代码的可读性和可维护性,同时也为后续的编译过程做好准备。
二、编译编译是编译程序生成的第二步,它将预处理后的源代码文件转化为汇编代码。
编译器会对源代码进行语法和语义检查,并将其转化为中间代码。
编译的主要目的是将高级语言转化为机器语言,使得计算机能够理解和执行源代码。
三、汇编汇编是编译程序生成的第三步,它将编译器生成的中间代码转化为机器码。
汇编器会将中间代码转化为与特定计算机体系结构相关的机器指令。
汇编的主要目的是将中间代码转化为可执行的机器指令,使得计算机能够执行程序。
四、链接链接是编译程序生成的最后一步,它将汇编生成的目标文件和一些库文件进行链接,生成最终的可执行文件。
链接器会解析目标文件中的符号引用,并将其与定义进行匹配,最终生成可执行文件。
链接的主要目的是将各个目标文件和库文件进行整合,使得程序能够正确地执行。
编译程序生成的常用方法不仅包括以上四个步骤,还包括一些辅助工具和技术。
下面将介绍一些常用的编译程序生成方法。
1. 优化编译优化编译是编译程序生成的一个重要方法。
通过对源代码进行优化,可以提高程序的执行效率和运行速度。
优化编译主要包括代码优化、内存优化和算法优化等方面。
2. 调试调试是编译程序生成的另一个常用方法。
调试工具可以帮助开发人员在程序运行过程中发现和修复错误。
调试技术包括断点调试、单步执行、变量跟踪等。
3. 静态分析静态分析是编译程序生成的一种重要方法。
静态分析工具可以对源代码进行静态检查,发现潜在的错误和漏洞。
静态分析可以帮助开发人员提前发现和解决问题,提高代码的质量和可靠性。
4. 动态链接动态链接是编译程序生成的一种常用方法。
通过动态链接,可以将程序的某些部分在运行时进行链接,而不是在编译时进行链接。