当前课程知识点:编译原理 > 第1章 编译原理概述 > 1.3 编译程序的组织 > 编译程序的组织
同学们好
这节课给大家介绍一下
编译程序的组织
编译程序包括八项功能
对应八个模块
这八个模块我们可以分为三类
分析模块 翻译模块 辅助模块
词法分析 语法分析 语义分析
属于分析模块
中间代码生成
代码优化
目标代码生成属于翻译模块
符号表的管理 出错处理是辅助模块
下面我们介绍一个概念
就是编译的遍(Pass)
编译程序中对于源程序
或中间语言程序
从头到尾扫视一次
并实现所规定的工作
我们称之为一遍
每一遍可以完成一个或相连几个
逻辑步骤的工作
遍可以与阶段相对应
也可以无关
根据系统资源的状况
运行目标的要求
可以将一个编译程序设计成
多遍扫描的形式
在每一遍扫描中
完成不同的任务
比如说 从头到尾扫视一次源程序
或中间语言程序
我们做了分词处理
那就是把词法分析作为第一遍
扫视一次进行语法分析和语义分析
我们称之为第二遍
代码优化作为第三遍
代码生成作为第四遍
反之 为了适应较小的存储空间
或提高目标代码质量
我们也可以把一个逻辑步骤的工作
分为几遍去执行
例如 代码优化我们可以划分为
代码优化准备工作
和实际代码优化两遍进行
一个遍历程序是否分遍
以及如何分遍
那要根据情况来定
那么分遍的好处
就是各遍功能独立单纯
相互联系简单
逻辑结构清晰
优化准备工作充分
它的缺点是各遍之中不可避免地
要有一些重复的部分
而且遍和遍之间要有交接工作
增加了编译程序的长度和编译的时间
一遍编译程序是一种极端的情况
整个编译程序同时驻留在内存
彼此之间采用调用转接方式连接在一起
这里是一个一遍扫描的编译程序
这个编译程序以语法分析为中心
词法分析 语义分析 代码生成
是子程序
当语法分析程序需要一个单词时
它就调用词法分析程序
由词法分析程序从源程序中
分出一个单词并返回给主程序
当识别出某一个语法结构时
我们就要调用语义分析程序
语义分析程序对识别出的结构
进行语义检查
并调用"存储分配"和"代码生成"程序
生成相应的目标语言指令
无论设计为几遍扫描的形式
都希望编译程序完成的工作
在限定的条件下是最优的
通常要求编译程序
本身的规模尽可能的小
执行速度尽可能的快
诊断能力要强
可靠性高
可移植性强
同时可扩展性好
而且它所生成的目标程序要规模小
执行速度快
为了提高编译程序的可移植性
一般将编译程序可以划分为
前端和后端
前端指的是与源语言有关
与机器无关的部分
通常包括词法分析 语法分析
语义分析与中间代码生成
与机器无关的代码优化
后端 通常包括与机器有关的
代码优化和目标代码生成
前端的内容与机器无关
一种高级程序设计语言在不同类型的
机器上的编译系统
前端的处理基本上是一致的
除非编译系统有不同的追求
所以这部分可以被复用
只要针对不同类型的机器
构建它的后端就可以了
这样就提高了前端程序的可移植性
要在同一类型的机器上实现多种
高级程序设计语言的编译程序
尽可能使他的后端一致起来
也就是说编制统一的后端
再针对不同的语言构建不同的前端
这节课就讲到这里
谢谢大家
-1.1 什么是编译原理
--什么是编译原理
--什么是编译程序
--讨论:翻译程序、汇编程序、编译程序、解释程序的区别和联系。
--练习1
-1.2 编译的基本过程
--编译的基本过程
--编译的基本过程
--练习2
-1.3 编译程序的组织
--编译程序的组织
--编译程序的组织
--练习3
-编译原理概述
-2.1 文法与语言
--文法与语言
--文法与语言
-2.2 文法和语言的形式定义
--练习1
-2.3 文法的类型
--文法的类型
--文法的类型
--练习2
-2.4 上下文无关文法及语法树
--练习3
-2.5 上下文无关文法的句型分析
--练习4
-编译理论基础作业
-3.1 词法分析概述
--词法分析概述
--词法分析概述
--练习1
-3.2 正规文法和状态转换图
--练习2
-3.3 有限状态自动机
--有限状态自动机
--有限状态自动机
--练习3
-3.4 NFA与DFA的等价性
--练习4
-3.5 正规表达式与正规集
--练习5
-3.6 正规文法与正规式
--正规文法与正规式
--正规文法与正规式
--练习6
-3.7 正规式与FA
--正规式与FA
--正规式与FA
--练习7
-词法分析作业
-4.1 自顶向下语法分析及其面临的问题
--练习1
-4.2 文法的等价转化
--文法的等价转化
--文法的等价转化
--练习2
-4.3 LL(1)文法与递归下降分析法
--练习3
-4.4 构建FIRST集合FOLLOW集合
--练习4
-4.5 LL(1)分析器工作原理
-- LL(1)分析器工作原理
-4.6 LL(1)分析表构造算法
--练习5
-5.1 自底向上的语法分析及优先分析
--练习1
-5.2 LR分析器
--LR分析器
--LR分析器
--练习2
-5.3 活前缀和LR(0)项目
-- 活前缀和LR(0)项目
--练习3
-5.4 构造识别活前缀的FA
--练习4
-5.5 LR(0)分析表构造算法
--练习5
-5.6 SLR(1)分析法
--练习6
-5.7 LR(1)分析法与LALR分析法
--练习7
-6.1 语义分析和语法制导翻译概述
--练习1
-6.2 常见中间语言简介
--常见中间语言简介
--常见中间语言简介
--练习2
-6.3 简单算术表达式和赋值语句翻译
--练习3
-6.4 布尔表达式和复制语句翻译
-6.5 拉链和回填
--拉链与回填
--拉链与回填
--练习4
-6.6 程序控制语句翻译
--程序控制语句翻译
--程序控制语句翻译
--练习5
-6.7 for循环语句的翻译
-6.8 GOTO语句和情况语句的翻译
--练习6
-6.9 含数组元素的算术表达式的翻译
--练习7
-6.10 数组元素赋值语句的翻译
--练习8
-7.1 符号表概述
--符号表概述
--符号表概述
--练习1
-7.2 符号表的建立
--符号表的建立
-- 符号表的建立
--练习2
-8.1 运行时存储空间组织概述
-8.2 运行时分配策略
--运行时分配策略
--运行时分配策略
--练习
-9.1 线性窥孔优化
--线性窥孔优化
--线性窥孔优化
-9.2 基本块及其优化方法
-9.3 循环概念
--循环概念
--循环概念
-9.4 循环优化
--循环优化
--循环优化
-代码优化作业