编译原理和技术课件.ppt

上传人:飞****2 文档编号:70500985 上传时间:2023-01-21 格式:PPT 页数:57 大小:2.40MB
返回 下载 相关 举报
编译原理和技术课件.ppt_第1页
第1页 / 共57页
编译原理和技术课件.ppt_第2页
第2页 / 共57页
点击查看更多>>
资源描述

《编译原理和技术课件.ppt》由会员分享,可在线阅读,更多相关《编译原理和技术课件.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、编译原理和技术编译原理和技术编译原理课程在计算机科学技术中的地位:编译原理课程在计算机科学技术中的地位:程序设计语言离散数学数据结构编译原理操作系统系统软件应用软件软件工程信息系统电子商务课课 程程 简简 介介编译理论与方法计算机科学与技术中理论和实践相结合的最好典范 ACM 图灵奖,授予在计算机技术领域作出突出贡献的科学家程序设计语言、编译理论与方法约占1/3课课 程程 简简 介介课程内容课程内容介绍编译器构造的一般原理和基本实现方法介绍编译器构造的一般原理和基本实现方法介绍编译器构造的一般原理和基本实现方法介绍编译器构造的一般原理和基本实现方法介绍的理论知识:形式语言和自动机理论、介绍的理

2、论知识:形式语言和自动机理论、介绍的理论知识:形式语言和自动机理论、介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等语法制导的定义和属性文法、类型论等语法制导的定义和属性文法、类型论等语法制导的定义和属性文法、类型论等课程特点课程特点强调形式化描述技术强调形式化描述技术强调形式化描述技术强调形式化描述技术强调对编译原理和技术的宏观理解,不把注强调对编译原理和技术的宏观理解,不把注强调对编译原理和技术的宏观理解,不把注强调对编译原理和技术的宏观理解,不把注意力分散到枝节算法,不偏向于某种源语言意力分散到枝节算法,不偏向于某种源语言意力分散到枝节算法,不偏向于某种源语言意力

3、分散到枝节算法,不偏向于某种源语言或目标机器或目标机器或目标机器或目标机器课课 程程 简简 介介学习的意义学习的意义它它它它是是是是计计计计算算算算机机机机专专专专业业业业的的的的核核核核心心心心课课课课程程程程。对对对对编编编编程程程程语语语语言言言言的的的的设设设设计计计计和和和和实实实实现现现现有有有有深深深深刻刻刻刻的的的的理理理理解解解解,有有有有利利利利于于于于学学学学习习习习编编编编程程程程语言,知其然知其所以然。语言,知其然知其所以然。语言,知其然知其所以然。语言,知其然知其所以然。if(c=5)then if(c=5)then if(c=5)thenif(c=5)thenif

4、(5=c)then if(5=c)then if(5=c)thenif(5=c)then编译器不报错,编译器不报错,编译器不报错,编译器不报错,但实际上错了但实际上错了但实际上错了但实际上错了编译器报错编译器报错编译器报错编译器报错课课 程程 简简 介介学习的意义学习的意义学习的意义学习的意义从从从从软软软软件件件件工工工工程程程程看看看看,编编编编译译译译器器器器是是是是一一一一个个个个很很很很好好好好的的的的实实实实例例例例(基基基基本本本本设设设设计计计计、模模模模块块块块划划划划分分分分等等等等),所所所所介介介介绍绍绍绍的的的的概概概概念念念念和和和和技技技技术术术术能能能能应应应应

5、用用用用到到到到一一一一般般般般的的的的软软软软件件件件设设设设计计计计之之之之中中中中。编编编编译译译译器器器器也也也也许许许许是是是是大大大大家家家家在在在在本本本本科科科科阶阶阶阶段段段段分分分分析析析析最最最最透透透透彻彻彻彻的的的的实实实实例例例例了了了了。从从从从本本本本课课课课程程程程的的的的学学学学习习习习也也也也能能能能了了了了解解解解到到到到软软软软件件件件工工工工程程程程中中中中的的的的一一一一些些些些技技技技术术术术(如如如如基基基基于于于于事事事事件件件件驱驱驱驱动动动动的的的的编编编编程程程程)。本本本本课课课课程程程程所所所所介介介介绍绍绍绍的的的的概概概概念念念

6、念和和和和技技技技术术术术能能能能应应应应用用用用到到到到一一一一般般般般的的的的软软软软件件件件设计之中。设计之中。设计之中。设计之中。大大大大多多多多数数数数程程程程序序序序员员员员同同同同时时时时是是是是语语语语言言言言的的的的设设设设计计计计者者者者,虽虽虽虽然然然然是是是是一一一一些些些些简简简简单单单单的的的的语语语语言言言言(如如如如输输输输入入入入输输输输出出出出),本本本本课课课课程程程程的的的的学学学学习习习习有有有有助助助助于于于于提提提提高高高高对对对对这这这这些语言的设计水平些语言的设计水平些语言的设计水平些语言的设计水平。课课 程程 简简 介介学习的意义学习的意义可

7、可可可以以以以肯肯肯肯定定定定地地地地说说说说,你你你你们们们们中中中中的的的的95%95%以以以以上上上上的的的的人人人人在在在在一一一一辈辈辈辈子子子子的的的的生生生生涯涯涯涯中中中中都都都都没没没没有有有有机机机机会会会会去去去去实实实实现现现现一一一一个个个个真真真真正正正正的的的的复复复复杂杂杂杂语语语语言言言言的的的的编编编编译译译译器器器器。但但但但是是是是每每每每一一一一个个个个人人人人都都都都绝绝绝绝对对对对遇遇遇遇到需要使用编译技术的项目。到需要使用编译技术的项目。到需要使用编译技术的项目。到需要使用编译技术的项目。以下就是一些以下就是一些以下就是一些以下就是一些小的小的小

8、的小的“编译器编译器编译器编译器”.课课 程程 简简 介介学习的意义学习的意义学习的意义学习的意义普通计算器普通计算器普通计算器普通计算器可编程计算器可编程计算器可编程计算器可编程计算器课课 程程 简简 介介学习的意义学习的意义学习的意义学习的意义自动聊天机器人自动聊天机器人自动聊天机器人自动聊天机器人课课 程程 简简 介介学习的意义学习的意义学习的意义学习的意义各种数据库查询语言及专家系统各种数据库查询语言及专家系统各种数据库查询语言及专家系统各种数据库查询语言及专家系统select select 课程课程课程课程 from table from table 课程表课程表课程表课程表 whe

9、re where 任课老师任课老师任课老师任课老师=贾棋贾棋贾棋贾棋课课 程程 简简 介介学习的意义学习的意义在在计计算算机机专专业业考考研研或或者者各各大大公公司司招招聘聘时时,必必考内容。考内容。在在x86/Linuxx86/Linux工工作作站站上上,以以下下两两个个结结构构的的sizesize分分别别是是2020和和1616,为什么不一样?,为什么不一样?typedef struct _atypedef struct _atypedef struct _btypedef struct _bchar char c1;c1;char c1;char c1;long long i;i;cha

10、r char c2;c2;charcharc2;c2;long i;long i;double f;double f;double f;double f;a;a;b;b;vc结果结果vs Linux下下gcc的结果的结果vc6中的编译选项有中的编译选项有/Zp1|2|4|8|16,/Zp1表示表示以以1字节边界对齐,相应的,字节边界对齐,相应的,/Zpn表示以表示以n字节边字节边界对齐。界对齐。n字节边界对齐的意思是说,一个成员的字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者地址必须安排在成员的尺寸的整数倍地址上或者是是n的整数倍地址上,取它们中的最小值。的整数倍

11、地址上,取它们中的最小值。要使用这个选项,可以在要使用这个选项,可以在vc6中打开工程属性页,中打开工程属性页,c/c+页,选择页,选择Code Generation分类,在分类,在Struct member alignment可以选择。可以选择。第一章第一章 引引 论论 翻译器:把一种语言变换到另外一种语言翻译器:把一种语言变换到另外一种语言的软件。这两种语言分别称为的软件。这两种语言分别称为源语言源语言和和目目标语言标语言。编译器:一种翻译器,它的编译器:一种翻译器,它的目标语言目标语言比比源源语言语言低级。低级。第一章第一章 引引 论论 词法分析器词法分析器词法分析器词法分析器语法分析器

12、语法分析器语法分析器语法分析器语义分析器语义分析器语义分析器语义分析器源程序源程序源程序源程序中间代码中间代码中间代码中间代码生成器生成器生成器生成器代码优化器代码优化器代码优化器代码优化器代码生成器代码生成器代码生成器代码生成器目标程序目标程序目标程序目标程序出错管理器出错管理器出错管理器出错管理器符号表符号表符号表符号表管理器管理器管理器管理器 编译器编译器编译器编译器编译器从逻辑上可以分成若编译器从逻辑上可以分成若编译器从逻辑上可以分成若编译器从逻辑上可以分成若干阶段,每个阶段把源程序干阶段,每个阶段把源程序干阶段,每个阶段把源程序干阶段,每个阶段把源程序从一种表示变换成另一种表从一种表

13、示变换成另一种表从一种表示变换成另一种表从一种表示变换成另一种表示示示示翻译家翻译家翻译家翻译家词法分析词法分析词法分析词法分析语法分析语法分析语法分析语法分析语义分析语义分析语义分析语义分析汉语文本汉语文本汉语文本汉语文本英语文本生成英语文本生成英语文本生成英语文本生成英语文本改进英语文本改进英语文本改进英语文本改进日语文本生成日语文本生成日语文本生成日语文本生成日语文本日语文本日语文本日语文本出错纪录出错纪录出错纪录出错纪录词典词典词典词典第一章第一章 引引 论论 FORTRAN(FORmula TRANslation)第一个实用的高级语言第一个实用的高级语言 擅长于数学函数运算擅长于数学

14、函数运算 常用于科学计算中常用于科学计算中 第一个编译器第一个编译器 历史上第一个实用的编译器历史上第一个实用的编译器(John Backus):Fortran compiler for the IBM 704/709/7090/7094 John Backus,引入了编译器的,引入了编译器的“阶段阶段”或称或称为为“遍遍”的概念,是编译设计的模块化的开始的概念,是编译设计的模块化的开始编译器从逻辑上可以分成若干阶段每个阶段把源程序从一种表示变换成另一种表示本章通过描述编译器的各个阶段来介绍编译这个课题第一章第一章 引引 论论 符号表符号表符号表符号表 positionpositioninit

15、ialinitialraterate.1 12 23 3词典词典词典词典 你们你们你们你们大工学子大工学子大工学子大工学子.1 12 23 3词法分析词法分析词法分析词法分析名词名词名词名词1 1 动词动词动词动词 形容词形容词形容词形容词 名词名词名词名词2 2你们是优秀的大工学子。你们是优秀的大工学子。你们是优秀的大工学子。你们是优秀的大工学子。词法分析:源程序词法分析:源程序词法分析:源程序词法分析:源程序 -词法记号(词法记号(词法记号(词法记号(tokentokentokentoken)流)流)流)流词法分析器词法分析器 id,1 =id,2 +id,3 60 position=in

16、itial+rate 60第一章第一章 引引 论论 任何一个标识符都是表达式;任何一个标识符都是表达式;任何一个标识符都是表达式;任何一个标识符都是表达式;任何一个数都是表达式;任何一个数都是表达式;任何一个数都是表达式;任何一个数都是表达式;如如如如果果果果e e1 1和和和和e e2 2都都都都是是是是表表表表达达达达式式式式,那那那那么么么么 e e1 1+e e2 2 e e1 1 *e e2 2 (e e1 1)也都是表达式也都是表达式也都是表达式也都是表达式表达式表达式表达式表达式表达式表达式表达式表达式表达式表达式表达式表达式标识符标识符标识符标识符表达式表达式表达式表达式表达式

17、表达式表达式表达式(initial)(initial)标识符标识符标识符标识符(rate)(rate)数数数数(60(60)*+语法分析:词法记号(语法分析:词法记号(语法分析:词法记号(语法分析:词法记号(tokentokentokentoken)流)流)流)流-语法短语语法短语语法短语语法短语任何名词都可以作宾语;任何名词都可以作宾语;任何名词都可以作宾语;任何名词都可以作宾语;如果如果如果如果e e1 1和和和和e e2 2都是宾语,那么都是宾语,那么都是宾语,那么都是宾语,那么 e e1 1 和和和和e e2 2 e e1 1 与与与与e e2 2 也都可以作宾语也都可以作宾语也都可以

18、作宾语也都可以作宾语 如果如果如果如果e e1 1是定语,是定语,是定语,是定语,e e2 2是宾语,是宾语,是宾语,是宾语,那么那么那么那么e e1 1 e e2 2也可以作宾语。也可以作宾语。也可以作宾语。也可以作宾语。宾语宾语宾语宾语定语定语定语定语 宾语宾语宾语宾语形容词形容词形容词形容词(优秀的优秀的优秀的优秀的)名词名词名词名词(大工学子大工学子大工学子大工学子)第一章第一章 引引 论论 语法分析器语法分析器语法分析器语法分析器 id,1 =id,2 +id,3 60:=:=+*6060idid1 1idid2 2idid3 3语法分析:词法记号(语法分析:词法记号(语法分析:词法

19、记号(语法分析:词法记号(tokentokentokentoken)流)流)流)流-语法短语语法短语语法短语语法短语名词名词名词名词1 1 动词动词动词动词 形容词形容词形容词形容词 名词名词名词名词2 2语法分析语法分析语法分析语法分析(优秀的优秀的优秀的优秀的)名词名词名词名词(大工学子大工学子大工学子大工学子)宾语宾语宾语宾语定语定语定语定语 宾语宾语宾语宾语形容词形容词形容词形容词语句语句语句语句谓语谓语谓语谓语动词动词动词动词(是是是是)主语主语主语主语名词名词名词名词(你们你们你们你们)符号表符号表符号表符号表 positionpositioninitialinitialrater

20、ate.1 12 23 3词典词典词典词典 你们你们你们你们大工学子大工学子大工学子大工学子.1 12 23 3第一章第一章 引引 论论 语义分析器语义分析器语义分析器语义分析器:=:=+*6060idid1 1idid2 2idid3 3:=:=+*6060idid1 1idid2 2idid3 3inttorealinttoreal语义分析:检查程序的语义正确性,如类型检查等语义分析:检查程序的语义正确性,如类型检查等语义分析:检查程序的语义正确性,如类型检查等语义分析:检查程序的语义正确性,如类型检查等你们是优秀的大工学子你们是优秀的大工学子你们是优秀的大工学子你们是优秀的大工学子你们是

21、一个优秀的大工学子。你们是一个优秀的大工学子。你们是一个优秀的大工学子。你们是一个优秀的大工学子。第一章 引 论 词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器代码优化器代码优化器代码生成器代码生成器目标程序目标程序出错管理器出错管理器符号表管理器符号表管理器 前三个阶段前三个阶段完成对源程完成对源程序的分析序的分析第一章第一章 引引 论论 中间代码生成器中间代码生成器中间代码生成器中间代码生成器temp1:=inttoreal(60)temp1:=inttoreal(60)temp2:=id3*temp1temp2:=id3*temp1t

22、emp3:=id2+temp2temp3:=id2+temp2id1:=temp3id1:=temp3:=:=+*6060idid1 1idid2 2idid3 3inttorealinttoreal(优秀的优秀的优秀的优秀的)名词名词名词名词(大工学子大工学子大工学子大工学子)宾语宾语宾语宾语定语定语定语定语 宾语宾语宾语宾语形容词形容词形容词形容词语句语句语句语句谓语谓语谓语谓语动词动词动词动词(是是是是)主语主语主语主语名词名词名词名词(你们你们你们你们)英语文本生成英语文本生成英语文本生成英语文本生成You are good DLUTers.You are good DLUTers.第

23、一章第一章 引引 论论 代码优化器代码优化器代码优化器代码优化器temp1:=inttoreal(60)temp1:=inttoreal(60)temp2:=id3*temp1temp2:=id3*temp1temp3:=id2+temp2temp3:=id2+temp2id1:=temp3id1:=temp3temp1:=id3 temp1:=id3*60.0 60.0id1:=id2 id1:=id2+temp1 temp1You are good DLUTers.You are good DLUTers.英语文本改进英语文本改进英语文本改进英语文本改进You are excellentY

24、ou are excellent DLUTersDLUTers第一章第一章 引引 论论 temp1:=id3 temp1:=id3*60.0 60.0id1:=id2 id1:=id2+temp1temp1代码生成器代码生成器代码生成器代码生成器MOVF id3,R2MOVF id3,R2MULF#60.0,R2MULF#60.0,R2MOVF id2,R1MOVF id2,R1ADDF R2,R1ADDF R2,R1MOVF R1,id1MOVF R1,id1日语文本生成日语文本生成日语文本生成日语文本生成You are excellentYou are excellent DLUTersD

25、LUTers君大連理工大学君大連理工大学君大連理工大学君大連理工大学優秀学生。優秀学生。優秀学生。優秀学生。第一章 引 论 词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器代码优化器代码优化器代码生成器代码生成器目标程序目标程序出错管理器出错管理器符号表管理器符号表管理器 后三个阶后三个阶段对源程段对源程序进行综序进行综合合第一章 引 论 词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器代码优化器代码优化器代码生成器代码生成器目标程序目标程序出错管理器出错管理器符号表管理器符号表管理器 分析

26、和综合:把编译过程分成分析和综合两步把编译过程分成分析和综合两步分析:分析源程序以计算其特性所涉及到的分析源程序以计算其特性所涉及到的操作(词法分析、语法分析、语义分析)操作(词法分析、语法分析、语义分析)综合:生成目标代码时所涉及到的操作(生成目标代码时所涉及到的操作(中中间代码生成、代码优化、代码生成)间代码生成、代码优化、代码生成)辅助:符号表管理、出错处理符号表管理、出错处理8项功能对应8个模块。第一章 引 论第一章第一章 引引 论论 词法分析器词法分析器词法分析器词法分析器语法分析器语法分析器语法分析器语法分析器语义分析器语义分析器语义分析器语义分析器源程序源程序源程序源程序中间代码

27、生成器中间代码生成器中间代码生成器中间代码生成器代码优化器代码优化器代码优化器代码优化器代码生成器代码生成器代码生成器代码生成器目标程序目标程序目标程序目标程序出错管理器出错管理器出错管理器出错管理器符号表管理器符号表管理器符号表管理器符号表管理器 前端前端后端后端前端:依赖于源语前端:依赖于源语前端:依赖于源语前端:依赖于源语言,独立于目标机言,独立于目标机言,独立于目标机言,独立于目标机器。器。器。器。后端:依赖于后端:依赖于后端:依赖于后端:依赖于目标机器,独目标机器,独目标机器,独目标机器,独立于源语言。立于源语言。立于源语言。立于源语言。前端和后端:把编译过程分成前端和后端两部分把编

28、译过程分成前端和后端两部分前端:只依赖于源程序,独立于目标机器只依赖于源程序,独立于目标机器(生成中间代码)(生成中间代码)后端:依赖于目标机器,与源程序无关,只与中间:依赖于目标机器,与源程序无关,只与中间语言有关(从中间代码生成目标代码)语言有关(从中间代码生成目标代码)好处:提高开发编译器的效率提高开发编译器的效率取一个编译器的前端,重写它的后端以产生同一源语言在取一个编译器的前端,重写它的后端以产生同一源语言在另一机器上的编译器另一机器上的编译器不同的前端使用同一个后端,从而得到一个机器上的几个不同的前端使用同一个后端,从而得到一个机器上的几个编译器(采用同一中间语言)编译器(采用同一

29、中间语言)第一章第一章 引引 论论第一章第一章 引引 论论 源程序源程序源程序源程序目目目目标标标标机机机机器器器器1 1目目目目标标标标机机机机器器器器2 2目目目目标标标标机机机机器器器器3 3目目目目标标标标机机机机器器器器n n编译器编译器编译器编译器不区分前端和后端的编译器不区分前端和后端的编译器不区分前端和后端的编译器不区分前端和后端的编译器源程序源程序源程序源程序目目目目标标标标机机机机器器器器1 1目目目目标标标标机机机机器器器器2 2目目目目标标标标机机机机器器器器3 3目目目目标标标标机机机机器器器器n n编译器前端编译器前端编译器前端编译器前端编译器后端编译器后端编译器后

30、端编译器后端区分前端和后端的编译器区分前端和后端的编译器区分前端和后端的编译器区分前端和后端的编译器第一章第一章 引引 论论 词法分析器词法分析器词法分析器词法分析器语法分析器语法分析器语法分析器语法分析器语义分析器语义分析器语义分析器语义分析器源程序源程序源程序源程序中间代码生中间代码生中间代码生中间代码生成器成器成器成器代码优化器代码优化器代码优化器代码优化器代码生成器代码生成器代码生成器代码生成器目标程序目标程序目标程序目标程序出错管理器出错管理器出错管理器出错管理器符号表管理符号表管理符号表管理符号表管理器器器器 遍遍编译的几个阶段常用编译的几个阶段常用编译的几个阶段常用编译的几个阶段

31、常用一遍一遍一遍一遍(passpass)扫描实现,一扫描实现,一扫描实现,一扫描实现,一遍扫描包括读一个输入文遍扫描包括读一个输入文遍扫描包括读一个输入文遍扫描包括读一个输入文件和写一个输出文件。件和写一个输出文件。件和写一个输出文件。件和写一个输出文件。第一章第一章 引引 论论 遍遍类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的“遍遍遍遍”的概念的概念的概念的概念网线网线网线网线水泥水泥水泥水泥瓷砖瓷砖瓷砖瓷砖任务:在一面墙上布置网线,并粉刷水泥,任务:在一面墙上布置网线,并粉刷水泥,任务:在一面墙上布置网线,并粉刷水泥,任务:在一面墙上布置网线,并粉刷水泥,然后贴

32、上瓷砖然后贴上瓷砖然后贴上瓷砖然后贴上瓷砖第一章第一章 引引 论论 遍遍类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的“遍遍遍遍”的概念的概念的概念的概念方法一:方法一:方法一:方法一:第一遍:布上全部网线第一遍:布上全部网线第一遍:布上全部网线第一遍:布上全部网线网线网线网线网线水泥水泥水泥水泥瓷砖瓷砖瓷砖瓷砖第一章第一章 引引 论论 遍遍类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的“遍遍遍遍”的概念的概念的概念的概念方法一:方法一:方法一:方法一:第二遍:粉刷全部墙面的水泥第二遍:粉刷全部墙面的水泥第二遍:粉刷全部墙面的水泥第二遍:粉刷

33、全部墙面的水泥网线网线网线网线水泥水泥水泥水泥瓷砖瓷砖瓷砖瓷砖第一章第一章 引引 论论 遍遍类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的“遍遍遍遍”的概念的概念的概念的概念方法一:方法一:方法一:方法一:第三遍:给整个墙面贴上瓷砖第三遍:给整个墙面贴上瓷砖第三遍:给整个墙面贴上瓷砖第三遍:给整个墙面贴上瓷砖网线网线网线网线水泥水泥水泥水泥瓷砖瓷砖瓷砖瓷砖第一章第一章 引引 论论 遍遍类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的类比:刷墙艺术中的“遍遍遍遍”的概念的概念的概念的概念方法二:方法二:方法二:方法二:一遍:一边布网线,一边粉刷水泥,一边贴瓷砖一遍

34、:一边布网线,一边粉刷水泥,一边贴瓷砖一遍:一边布网线,一边粉刷水泥,一边贴瓷砖一遍:一边布网线,一边粉刷水泥,一边贴瓷砖网线网线网线网线水泥水泥水泥水泥瓷砖瓷砖瓷砖瓷砖遍(趟):一遍或或一趟:是指编译程序在编译时刻把源程序或源程序是指编译程序在编译时刻把源程序或源程序的等价物(中间程序)从头到尾扫描一遍并转换成另一紧邻的等价物(中间程序)从头到尾扫描一遍并转换成另一紧邻的等价物的全过程。的等价物的全过程。单遍扫描与多遍扫描:每一遍的扫视可完成上述一个阶每一遍的扫视可完成上述一个阶段或多个阶段的工作。每一遍的输入都是上一遍的输出,第段或多个阶段的工作。每一遍的输入都是上一遍的输出,第一遍的输入

35、是源程序正文,最后一遍的输出是目标代码。一遍的输入是源程序正文,最后一遍的输出是目标代码。单遍与多遍的比较:遍数多:编译器结构清晰,但时间效率不高遍数多:编译器结构清晰,但时间效率不高遍数少:编译速度快,但对机器的内存要求高遍数少:编译速度快,但对机器的内存要求高遍数的确定:主要因素是源程序和机器(目标机)的特征。主要因素是源程序和机器(目标机)的特征。第一章第一章 引引 论论另一种实现形式另一种实现形式编译技术研究对象:编译器的构造与分析编译技术研究对象:编译器的构造与分析编编编编辑辑辑辑器器器器源程序源程序源程序源程序编编编编译译译译器器器器操操操操作作作作系系系系统统统统可执行程序可执行

36、程序可执行程序可执行程序.exe.exe解解解解释释释释器器器器中间代码中间代码中间代码中间代码可执行程序可执行程序可执行程序可执行程序.exe.exeC,C+,Pascal,Delphi,VC,BCC,C+,Pascal,Delphi,VC,BCJava,VB,BasicJava,VB,BasicEdit,Edit,Word,Word,Notepad,Notepad,ViVigcc,vc,gcc,vc,bc31bc31虚拟机虚拟机集成开发环境集成开发环境集成开发环境集成开发环境BASIC年代的解释器功能:它将高级语言的源程序翻译成一种中间语言程序,然后对中间语言程序进行解释执行在那个年代,编

37、译和解释两个功能是合在一个程序中,该程序被称为解释器Java年代的解释器解释器的上述两个功能分在两个程序中前一个叫做编译器,它把源程序翻译成一种叫做字节码的中间语言程序后一个叫做解释器,它对字节码程序进行解释执行编译器和解释器的区别编译器和解释器的区别三种奶牛三种嗜好三种奶牛三种嗜好编译器和解释器的区别编译器和解释器的区别改进后的方案改进后的方案编译器和解释器的区别编译器和解释器的区别牧草牧草 我们的各种编程语言,我们的各种编程语言,C/C+/C#,Java,Pascal,PHP,Perl,Java Script等等切割机切割机 各种编译器各种编译器奶牛奶牛 各种各种CPU,比如,比如x86,

38、ARM,MIPS等等奶牛会有吃不同形状牧草的嗜好,这个奇奶牛会有吃不同形状牧草的嗜好,这个奇怪的比喻是为了表示不同的怪的比喻是为了表示不同的CPU接受的不接受的不同的机器语言。同的机器语言。编译器和解释器的区别编译器和解释器的区别编译器与解释器的区别编译器与解释器的区别编译器是把源程序的每一条语句都编译成编译器是把源程序的每一条语句都编译成机器语言机器语言,并保存成二进制文件并保存成二进制文件,这样运行时这样运行时计算机可以直接以机器语言来运行此程序计算机可以直接以机器语言来运行此程序,速度很快速度很快;而解释器则是只在执行程序时而解释器则是只在执行程序时,才一条一条才一条一条的解释成机器语言

39、给计算机来执行的解释成机器语言给计算机来执行,所以运所以运行速度是不如编译后的程序运行的快的行速度是不如编译后的程序运行的快的.1.2 编译器技术的应用 高级语言的实现高级编程语言易于编程,但程序运行较慢低级语言编程时可实施更有效的控制方式,得到更有效的代码,但难编写、易出错、难维护流行编程语言的大多数演变都是朝着提高抽象级别的方向每一轮编程语言新特征的出现都刺激编译器优化的新研究编程语言演义编程语言演义编程语言编程语言机器语言机器语言汇编语言汇编语言高级语言(高级语言(Fortran,C,Java,)编程语言演义编程语言演义机器语言特点机器语言特点0,1串串打卡输入打卡输入c7 06 000

40、0 0002 mov x,c 其中符号其中符号x的地址是的地址是0000,c=2计算机可以直接理解机器语言程序计算机可以直接理解机器语言程序机器语言缺点机器语言缺点可读性差可读性差可维护性差可维护性差机器语言机器语言机器语言机器语言汇编语言汇编语言汇编语言汇编语言高级语言高级语言高级语言高级语言编程语言演义编程语言演义汇编语言形式汇编语言形式mov x,2c7 06 0000 0002 变量变量x的地址可以由汇编器维护,而的地址可以由汇编器维护,而不需要固定到某个绝对地址不需要固定到某个绝对地址机器语言机器语言机器语言机器语言汇编语言汇编语言汇编语言汇编语言高级语言高级语言高级语言高级语言编程

41、语言演义编程语言演义高级语言形式高级语言形式赋值语句:赋值语句:x=2贴近人类思维方式,贴近实际问题贴近人类思维方式,贴近实际问题描述形式描述形式计算机无法直接理解计算机无法直接理解需要编译器辅助,将其转换为机器语需要编译器辅助,将其转换为机器语言形式言形式机器语言机器语言机器语言机器语言汇编语言汇编语言汇编语言汇编语言高级语言高级语言高级语言高级语言1.2 编译器技术的应用 高级语言的实现每一轮编程语言新特征的出现都刺激编译器优化的新研究支持用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用:C、Fortran面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护

42、:Smalltalk、C+、C#、Java类型安全的语言:Java没有指针,也不允许指针算术。它用无用单元收集机制来自动地释放那些不再使用的变量占据的内存1.2 编译器技术的应用 针对计算机体系结构的优化计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要并行化 编译器重新整理指令,使得指令级并行更有效 编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上内存分层 编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效1.2 编译器技术的应用 新计算机体系结构的设计现在计算机系统的性能不仅仅取决于它的原始速度,还取决于编译器是否能生成充分利用其特征的代码在现代

43、计算机体系结构的研究中,在处理器的设计阶段就开发编译器,并将编译生成的代码在模拟器上运行,以评价拟采用体系结构的特征编译器技术影响计算机体系结构设计的一个著名例子是精简指令集计算机(RISC)的发明1.2 编译器技术的应用 程序翻译二进制翻译 编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令集编译的代码数据库查询解释器 数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也可以被编译成搜索数据库的命令1.2 编译器技术的应用 提高软件开发效率的工具源于编译器中代码优化技术的程序分析一直在改进软件开发效率类型检查 类型检查是一种捕捉

44、程序中前后不一致的成熟而有效的技术边界检查 数据流分析技术可用来定位缓冲区溢出内存管理 自动的内存管理删除内存泄漏等内存管理错误小结小结编译原理的内容及学习意义编译原理的内容及学习意义翻译器、编译器的定义翻译器、编译器的定义编译器的阶段划分及前端、后端的概念编译器的阶段划分及前端、后端的概念“遍遍”的概念的概念作业作业习题习题习题习题1 1:1.1,1.2(1.1,1.2(编译器与解释器的区别是什么编译器与解释器的区别是什么编译器与解释器的区别是什么编译器与解释器的区别是什么)每周第一次课交作业!每周第一次课交作业!每周第一次课交作业!每周第一次课交作业!课件下载地址:课件下载地址:课件下载地址:课件下载地址:bianyi_bianyi_密码:密码:密码:密码:bianyibianyi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁