收藏 分享(赏)

编译(第1章:编译程序概论).ppt

上传人:jinchen 文档编号:5779176 上传时间:2019-03-17 格式:PPT 页数:23 大小:178KB
下载 相关 举报
编译(第1章:编译程序概论).ppt_第1页
第1页 / 共23页
编译(第1章:编译程序概论).ppt_第2页
第2页 / 共23页
编译(第1章:编译程序概论).ppt_第3页
第3页 / 共23页
编译(第1章:编译程序概论).ppt_第4页
第4页 / 共23页
编译(第1章:编译程序概论).ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、1,第1章 编译程序概论,1.1 什么是编译程序,2,1.1 什么是编译程序,编译程序: 把源程序翻译(转换)成等价的目标程序的程序,其转换过程可图示如下:,说明:除编译程序自身外,多数编译系统还需要一些其他的辅助程序来帮助完成其最终的翻译(转换)工作。,3,1.1 什么是编译程序,(典型)高级语言程序的处理过程:,4,1.1 什么是编译程序,例:C语言需预处理的源程序/*文件名:example.c*/#include “stdio.h“#define CHARACTER charmain()CHARACTER ch;ch=getchar();putchar(ch);,5,1.1 什么是编译程

2、序,经预处理程序“CPP.EXE”处理后得如下源程序 DOS命令为:cpp example.c 结果文件名:example.I example.c 1: main() example.c 2: example.c 3: char ch; example.c 4: ch=(-( example.c 6: ,6,1.1 什么是编译程序,可再装配的obj文件:-调用sin子程序调用printf子程序-,Sin() Cos() Scanf() Printf() ,函数子程序库,装 配 / 连 接 程 序,7,1.1 什么是编译程序,解释程序(Interpreter):其工作方式是边翻译边执行,其加工的

3、结果是源程序的运行结果。,解释程序工作方式 :,8,1.1 什么是编译程序,10 PRINT “X,Y=?” 20 INPUT X,Y 30 IF XY THEN 60 40 LET Z=Y-X 50 GOTO 70 60 LET Z=X-Y 70 PRINT “Z=“,Z 80 END,BASIC语言程序,解释程序工作过程:,9,1.2 编译过程概述,典型编译程序工作过程:,10,1.2 编译过程概述,词法分析 主要任务:扫描源程序的ASCII码序列,识别出一个个单词(也称单词符号或(语法)符号)。 具体任务: 1.拼单词:组合分解源程序中的字符,得到符合语言词法规则的单词。例如某源程序片断

4、如下:begin var sum,first,count:real;sum:=first+count*10 end词法分析将其视为字符(ASCII码)序列:,组合分解成单词符号序列:,11,1.2 编译过程概述,2.翻译单词:将单词加工成含有特征/属性的机内表示(机内符) 例如:上述源程序片断的词法分析的结果为如下二元组序列:1保留字 begin 2保留字 var3标识符 sum 4逗号 ,5标识符 first 6逗号 ,7标识符 count 8冒号 :9保留字 real 10分号 ;11标识符 sum 12赋值号 :=13标识符 first 14加号 +15标识符 count 16乘号 *1

5、7整数 10 18保留字 end19界符 ,12,1.2 编译过程概述,3词法检查:检查词法错误(主要是检查单词中使用了非法字符错误)例如:beg#n nd 10$ 等等4删除空白符、注释等,13,1.2 编译过程概述,2检查形式语法错误,例如:Y=A+B; /PASCAL赋值语句其赋值号应为 :=Y:=IF*Y;/PASCAL中用保留字作为标识符来使用a=b+c; /C中两个子表达式之间没有运算符if=x+y; /C中条件语句出错(x+y)*z;/C中括号不配对等等,说明:关于书中在这里引进的有关语言的“递归规则定义”和“语法树”相关知识,我们暂不讨论。,14,1.2 编译过程概述,语义分析

6、 任务:检查(静态)语义错误,提取语义信息。,其中:语义错误分为静态和动态两种.静态语义错误:在编译期间可以检查的语义错误例如:int *px,*py,i;px+py ; /两个运算对象类型不相容 ai ; /a没有声明goto loop; /loop没有定义等等(即独立的观察一条语句看不出的错误)动态语义错误:在目标程序运行时才可以检查的语义错误。例如:sqrt(x) /当x为负数时1/x /当x为0时fopen(pf,”r”) /文件如果不存在 语义信息包括:标识符的“种类”、“类型”等信息,15,1.2 编译过程概述,中间代码生成 中间代码:介于源程序和目标程序之间的一种结构简单、含义明

7、确的记号系统。如:逆波兰式、三元式、四元式、树形结构表示等 例如:源程序(赋值语句)sum:=first+count*10 所对应 的四元式序列如下:(inttoreal, 10, _ ,t1)(* , id3 , t1 , t2)(+ , id2 , t2 , t3) (:= , t3 , _ , id1),目的:方便加工,便于优化。 设计原则:容易生成,容易将其翻译成目标代码,16,1.2 编译过程概述,中间代码优化:为得到高质量的目标代码而进行的变换工作 任务:把原中间代码转换成可产生高质量(省时间和省空间)目标代码的中间代码。 例如:(inttoreal,10,_,t1)(* , id

8、3 , t1 , t2) (* ,id3 ,10.0 ,t1)(+ , id2 , t2 , t3) (+ ,id2 ,t1 , id1) (:= , t3 , _ ,id1),17,1.2 编译过程概述,目标代码生成 任务:把中间代码或语义分析的结果转换成目标代码程序,目标代码的三种形式: 1.绝对指令代码:具有绝对地址的机器指令代码,无需连接即可运行。 2.可重定位的指令代码:具有浮动地址的机器指令代码,需连接装配后方能运行。 3.汇编指令代码:汇编语言形式的目标程序,需经汇编程序汇编产生相应的机器代码。,18,1.3 编译程序的结构,典型编译程序结构:,19,1.4 编译阶段的组合,具体

9、实现上可从以下两个角度来考虑,1前端(front end)和后端(back end),后端:只与目标机有关的工作,即,优点:便于移植(在不同机器或不同语言之间使用) 其中:前端可用于在不同机器开发相同语言的编译程序后端可用于在同一台机器上开发不同语言的编译程序,20,1.4 编译阶段的组合,一遍扫描的优点:编译的速度快 多遍扫描的优点:算法清晰,便于分工,便于优化 设:COMP 编译程序 则有:,2.分遍(或趟):是指对源程序或对其等价的中间语言程序从头至尾扫视并完成规定任务的过程 (此过程称为扫描)。,21,1.4 编译阶段的组合,一遍扫描的编译程序的工作流程:,/*语法分析为合心*/,22,1.4 编译阶段的组合,多遍扫描的编译程序的工作流程:,23,1.5 编译技术和软件工具,1.语言的结构化编辑器(或称智能化编辑器)即编辑器具有检查简单语法错误的功能如:括弧配对检查,关键字组合检查等 2.语言程序的调试工具调试(或称纠错):是在测试发现错误之后排错的过程如:debug 3.语言程序测试工具静态分析器:测试源程序动态测试器:测试目标程序 4.高级语言之间的转换工具如:pascal c 5.并行编译技术 方法1:使用重构技术将串行语言程序分解成并行语言程序 方法2:使用语言自身提供的并行机制,用户自己编写并行语言程序,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报