第一章 编译程序概论PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
生成的某汇编代码如下图:
(1)MOVF id3,R2 (2)MULF #10.0,R2 (3)MOVF id2,R1 (4)ADDF R1,R2 (5)MOV R1,id1
图1.7
⑦ 符号表管理
符号表管理是一个贯穿编译全过 程的工作。编译程序在分析源程序时, 需要记录标识符的各种属性信息;在 语义分析和代码生成阶段,还要对建 立的符号表进行检索,提取相应的属 性信息。
第一章 编译程序概论
本章内容
1.1 什么是编译程序 1.2 编译过程概述 1.3 编译程序的结构 1.4 编译程序的组合 1.来自百度文库 编译技术和软件工具
1.1 什么是编译程序
在计算机上执行高级语言程序一般分为两 步:第一步,用一个编译程序把高级语言 翻译成机器语言;第二步,运行所得到的 机器语言程序求得计算结果。
1.1 什么是编译程序
需处理的源程序
程
序
预处理程序
设 计
源程序
语 言
编译程序
的 典
目标汇编程序
型
汇编程序
处
理 可再装配的机器代码
过
程 装配/连接--编辑程序 可再装配目标文件
绝对机器代码
1.2 编译过程概述
词语语
源 程 序
法 分
法 分
义 分
析析析
中
目
间代
标
目
代码
代
标
码优 码
程
生化 生
序
成
成
错误处理
表格管理(符号表管理)
1.1 什么是编译程序
例:欲将英语 I am a student
翻译成汉语:并假设有一种每个人都理解的语言,称为X语言。若英语 的句子为以下的形式:
Iamastudent 不符合词法规则,(1)符号“”没有定义;(2) 词法分析 单词间没有空格。
I am a studont “studont”不符合词法规则; 语法分析 a student am I 不符合语法规则;
标识符
整数
图1.4
id3(count)
10
② 语法分析
或
id1
:= +
id2
*
id3
10
图1.5
语法分析与语义分析都是对源程序的结 构进行分析。
③ 语义分析
任务∶对语法分析所识别的各种语法成分 的意义(即语义)进行确定并加以处理。语义 分析要对操作数是否已定义,是否类型相 同等进行检查,并根据检查的情况作出相 应处理。
① 词法分析
例:某源程序片断如下:
begin var sum,first,count:real;sum:=first+count*10 end.
词法分析阶段将构成这段程序的字符组
成了如下单词序列:
1.保留字 3.标识符 5.标识符 7.标识符 9.保留字
begin sum first count real
1.1 什么是编译程序
从功能上看,编译程序就是一个语言翻译 程序。它把一种语言书写的程序(源程序) 翻译成另一种语言等价的程序(目标程序)。
高级语言程序 编译程序 源程序
低级语言程序 目标程序
1.1 什么是编译程序
显然,源程序所采用的语言和 目标程序所采用的语言的所有 的词法规则、语法规则,语义 规则,都应该已经定义。
④ 中间代码生成
例:如上述源程序sum:=first+count*10可以生
成如下的四元式序列,如下图
(1)(int to real 10 - t1)
(2)(*
id3 t1 t2)
(3)(+
id2 t2 t3)
(4)(:=
t3 - id3)
图1.6
⑤ 代码优化
对中间代码进行变换或改造,目 的是使生成的目标代码更为高效,即 节省时间和空间。
③ 语义分析
例:如图1.4中的 为id1:=id2+id3*10整型和 实型相加,语义分析阶段进行类型审查后, 在语法分析得到的分析树上增加一语义处 理节点,表示整型转换为实型。如下图
:=
id1
+
id2
*
id3
int to real
10
图1.5
④ 中间代码生成 任务∶进行语法和语义分析后,有些
编译程序将源程序变成一种内 部表示形式,这种内部表示形 式叫做中间语言或者中间代码。 中间代码是一种记号系统,可 以设计为多种形式;设计的原 则为:容易生成、容易将中间 代码翻译成目标代码。
1.2 编译过程概述
编译程序的两个主要任务∶ 一是分析,二是综合。
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
① 词法分析
任务∶从左至右一个字符一个字符地 读入源程序,对构成源程序的 字符流按照词法规则进行扫描 和分析,从而识别出一个个单 词(单词符号、符号,如 begin、 main、 if、 for)
I am a student 符合词法、语法规则;并且可以根据英语的“语 义规则”得到这句话的含义。(语义分析) 假设把这句话先翻译成每个人都理解的X语言(中间代码生成)。 将用X语言翻译后的结果进行适当整理,得到言简意赅的,用X语 言表示的句子(代码优化)。最后,翻译为中文“我是一个学生” (目标代码生成)
⑧ 错误检测及处理
错误可发生在编译的各个阶段,错 误处理也是贯穿编译全过程。
词法分析阶段可查出的错误,如标 识符的组成不符合词法规则;语句结构 错误是在语法分析中可查出的错误;还 有语义分析阶段可查出的错误,即结构 正确,但所涉及的操作无意义或错误。
② 语法分析
例:如上例中sum:=first+count*10 (即 id1:=id2+id3*10 id表示标识符)经语法分析后得 知符合PASCAL语言的“赋值语句”语法规 则,则它可以表示成语法树,如下
赋值语句
标识符
:=
表达式
id1(sum)
表达式 +
表达式
标识符
表达式 * 表达式
id2(first)
如上例可以变换为下图:
(1)(int to real 10
-
(2)(*
id3 t1
(3)(+
id2 t2
(4)(:=
t3
-
t1) t2) t3) id3)
(1)(* id3 (2)(+ id2
10.0 t1)
t1
id1)
⑥ 目标代码生成
将语义分析程序产生的中间代码转换成汇 编程序或者机器语言。
如上例使用两个寄存器(R1和R2),可能
2.保留字
var
4.逗号
,
6.逗号
,
8.冒号
:
10.分号
;
11.标识符 sum
12.赋值号 :=
13.标识符 first
14.加号
+
15.标识符 count
16.乘号
*
17.整数 10 19.界符 .
18.保留字 end
② 语法分析
任务∶根据语法规则,对词法分析输 出的单词序列分解成各类语法 短语,如“程序”、“语句”、 “表达式”等(也称为语法单 位)。可以表示成语法树。 通常语法规则为递归定义。