预处理程序(Preprocessor) 在真正翻译开始之前产生编译程序的输入 的程序 处理宏及注释:宏是被经常使用的较长结 构的缩写 处理文件包含:把头文件包含到程序正文 中(如C的文件包含include<.h>) 必 “理解”预处理器:把现代控制流和数据 结构机制添加到比较老式的语言中 语言扩充:通过大量的内部宏定义来增强 语言的能力,如Equeli语言是一种嵌套在C c…语意中的数据库查询语言 26
CompilerPrinciples 26 2. 预处理程序(Preprocessor) 在真正翻译开始之前产生编译程序的输入 的程序 ❖ 处理宏及注释:宏是被经常使用的较长结 构的缩写 ❖ 处理文件包含:把头文件包含到程序正文 中(如C的文件包含include <….h>) ❖ “理解”预处理器:把现代控制流和数据 结构机制添加到比较老式的语言中 ❖ 语言扩充:通过大量的内部宏定义来增强 语言的能力,如Equel语言是一种嵌套在C 语言中的数据库查询语言
连接程序(Linker)一又称为连接编辑器。 将分别在不同的目标文件中编译(或汇编) 的代码、所用标准库函数的代码以及操作 系统提供的资源(如存储分配程序及输入/ 输出设备)收集到一个可直接执行的文件 中的程序 4. 装配程序(Loader) 完成程序的装入和连接编辑两项功能。 装入过程包括读入可重定位机器代码、修 改可重定位地址、并将修改后的指令和数 据放到内存的适当位置。 装入程序使得可执行代码更加灵活 CompilerPrinciples
CompilerPrinciples 27 3. 连接程序(Linker)——又称为连接编辑器。 将分别在不同的目标文件中编译(或汇编) 的代码、所用标准库函数的代码以及操作 系统提供的资源(如存储分配程序及输入/ 输出设备)收集到一个可直接执行的文件 中的程序 4. 装配程序(Loader) 完成程序的装入和连接编辑两项功能。 装入过程包括读入可重定位机器代码、修 改可重定位地址、并将修改后的指令和数 据放到内存的适当位置。 装入程序使得可执行代码更加灵活
调试程序(Debugger) 可在被编译了的程序中判定执行错误的程 序 它经常与编译程序一起放在DE中 运行一个带有调试程序的程序与直接执行 不同,这是因为调试程序保存着所有的或 大多数源代码信息,它可以在预先指定的 位置(断点BreakPoint)暂停执行,并提供 有关信息(己调用的函数、变量名的当前 值等) 28 CompilerPrinciples
CompilerPrinciples 28 5. 调试程序(Debugger) 可在被编译了的程序中判定执行错误的程 序 ❖ 它经常与编译程序一起放在IDE中 ❖ 运行一个带有调试程序的程序与直接执行 不同,这是因为调试程序保存着所有的或 大多数源代码信息,它可以在预先指定的 位置(断点BreakPoint)暂停执行,并提供 有关信息(已调用的函数、变量名的当前 值等)
6. 其他有关的还有 描述器(Profiler)- 执行中搜集目标程序行 为统计的程序 项目管理程序(Project Manager) 如 Uniⅸ系统中的SCCS(源代码控制系统)和 RCS(修正控制系统)和汇编程序等 综上所述可给出一个“语言处理系统”的图示: 29 CompilerPrinciples
CompilerPrinciples 29 6. 其他有关的还有 ❖ 描述器(Profiler)——执行中搜集目标程序行 为统计的程序 ❖ 项目管理程序(Project Manager)——如 Unix系统中的SCCS(源代码控制系统)和 RCS(修正控制系统)和汇编程序等 综上所述可给出一个“语言处理系统”的图示:
源程序梗概 预处理器 源程序 编译器 目标汇编程序 汇编器 可重定位机器代码 装载器/连接编辑器 库、可重定位目标程序 可执行机器代码 我们这个课只介绍编译程序这一部分 30 CompilerPrinciples
CompilerPrinciples 30 我们这个课只介绍编译程序这一部分 预处理器 编译器 源程序 汇编器 目标汇编程序 装载器/连接编辑器 可重定位机器代码 源程序梗概 可执行机器代码 库、可重定位目标程序