编译程序的组织和生成
编译程序的组织和生成 编译程序的组织 根据系统资源的状况、运行目标的要求…… 等,可以将一个编译程序设计成多遍(Pass) 扫描的形式,在每一遍扫描中,完成不同的 任务。 如:首遍构造语法树,二遍处理中间表示,增加 信息等。 遍可以和阶段相对应,也可以和阶段无关 单遍代码不太有效 编译程序的设计目标 规模小、速度快、诊断能力强、可靠性高、可移植性好、可扩充性好 目标程序也要规模小、执行速度快 编译系统规模较大,因此可移植性很重要 为了提高可移植性,将编译程序划分为前端和 后端 前端 与源语言有关、与目标机无关的部分 词法分析、语法分析、语义分析与中间代码生 成、与机器无关的代码优化 后端 与目标机有关的部分 与机器有关的代码优化、目标代码生成 编译程序的生成 如何实现编译器? 直接用可运行的代码编制——太费力! 自举-使用语言提供的功能来编译该语言自 身。 “第一个编译器是怎样被编译的?” 1、T型图 编译原理 T 形图 源语言 表示语言 目标语言分别是什么? 编译器本身也是一个软件,该软件用何种语言编写的,比如是用c语言编写的,则c语言就是它的表示语言(一般说成实现语言)。编译系统的功能是翻译,它能把一种高级语言(即源语言)编写的程序等价的翻译成另一低级语言(即目标语言)的程序。 举例: 用 C语言实现一个java编译器,可以将java程序翻译成bytecode