这是我参与更文挑战的第20天,活动详情查看: 更文挑战
第一章:引论
1. 编译程序 vs 解释程序
- 共同点:都是翻译
- 不同点:解释程序是逐条翻译;编译程序是整体翻译
2. 编译过程及各阶段任务
2.1 编译过程:
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成
- 代码优化
- 目标代码生成
2.2 词法分析任务
从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(或陈单词符号或符号)
2.3 语法分析任务
在词法分析的基础上将单词序列分解成各类语法短语,如:“程序”,“语句”,“表达式”等
2.4 语义分析任务
审查源程序有无语义错误,为代码生成阶段收集类型信息
2.5 *中间代码生成
- 三种形式
逆波兰记号(可以理解为后缀表达式):
逆波兰式 a+b ab+ a+b*c abc*+ (a+b)*c ab+c* a:=b* c+d*e abc *de *+ :=
三元式:
a:=b* c+d*e
(1)(*,b,c)
(2)(*,d,e)
(3)(+,(1),(2))
(4)(:=,(3),a)
四元式:
a:=b*c+d *e
(1)(*,b,c,t1)
(2)(*,d,e,t2)
(3)(+,t1,t2,t3)
(4)(:=,t3,__,a)
- 树形结构
3. 编译程序结构
3.1 编译程序结构图
3.2 出错处理程序
哪几个错误:词法、语法、语义
3.3 前端、后端
-
前端:依赖于源程序而与目标机无关
词法分析、语法分析、语义分析、中间代码生成;
某些优化工作也可在前端做,还包括与前端每个阶段相关的出错处理工作和中间代码生成这些阶段
-
后端:依赖于目标机而非源程序
只与中间代码有关的那些阶段的工作,即:目标代码生成,以及相关出错处理和符号表操作