《编译原理和技术.ppt》由会员分享,可在线阅读,更多相关《编译原理和技术.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、编译原理和技术编译原理和技术中国科学技术大学中国科学技术大学计算机科学与技术学院计算机科学与技术学院陈意云陈意云课课 程程 简简 介介课程内容课程内容介绍编译器构造的一般原理和基本实现方法介绍编译器构造的一般原理和基本实现方法包括的理论知识:形式语言和自动机理论、语法包括的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论与类型系统、程制导的定义和属性文法、类型论与类型系统、程序分析原理等序分析原理等强调形式描述技术和自动生成技术强调形式描述技术和自动生成技术强调对编译原理和技术的宏观理解,不把注意力强调对编译原理和技术的宏观理解,不把注意力分散到枝节算法,不偏向于任何源语言或目
2、标机分散到枝节算法,不偏向于任何源语言或目标机器器课课 程程 简简 介介学习意义学习意义对对编编程程语语言言的的设设计计和和实实现现有有深深刻刻的的理理解解,对对和和编编程程语语言言有有关关的的理理论论有有所所了了解解,对对宏宏观观上上把把握握编编程程语言来说,起一个奠基的作用语言来说,起一个奠基的作用从从软软件件工工程程看看,编编译译器器是是一一个个很很好好的的实实例例,所所介介绍的概念和技术能应用到一般的软件设计之中绍的概念和技术能应用到一般的软件设计之中编译技术的应用和编译技术的发展编译技术的应用和编译技术的发展高级语言设计、计算机体系结构的优化(并行、内高级语言设计、计算机体系结构的优
3、化(并行、内存分层)、新型计算机体系结构设计、程序翻译、存分层)、新型计算机体系结构设计、程序翻译、提高软件开发效率的工具提高软件开发效率的工具、高可信软件可信软件课课 程程 简简 介介教材和参考书教材和参考书陈陈意意云云、张张昱昱,编编译译原原理理,高高等等教教育育出出版版社社,2008张张昱昱、陈陈意意云云,编编译译原原理理实实验验教教程程,高高等等教教育育出出版社,版社,2009A.V.Aho,M.S.Lam,R.Sethi,and J.D.Ullman,Compilers:Principles,Techniques,and Tools,2nd edition,Addison-Wesle
4、y,2007 陈陈意意云云、张张昱昱,编编译译原原理理习习题题精精选选与与解解析析,高高等等教育出版社,教育出版社,2005 教学资源网页:教学资源网页:http:/ http:/ 程程 简简 介介课程要求课程要求质量上的目标:师生共同努力,达国内最好水平质量上的目标:师生共同努力,达国内最好水平讲讲课课进进展展较较快快,平平时时不不复复习习并并加加深深理理解解,后后面面将将听不懂听不懂作业:少而精,周一课间交作业作业:少而精,周一课间交作业课程设计:自己动手,大有收获课程设计:自己动手,大有收获考试:开卷,灵活运用知识考试:开卷,灵活运用知识学学期期总总评评=考考试试成成绩绩占占60%,作作
5、业业占占10%,课课程程设计设计30%上课、设计、考试时间大体安排上课、设计、考试时间大体安排课课 程程 简简 介介课程设计要求课程设计要求内内容容:独独立立地地研研发发扩扩展展PL/0语语言言的的编编译译器器和和解解释释器器目目标标:巩巩固固对对理理论论和和技技术术的的理理解解,提提高高程程序序设设计计能力能力技术准备:技术准备:VC+的编程环境,的编程环境,C语言编程语言编程考考查查与与评评分分:对对截截止止时时间间前前提提交交的的程程序序,通通过过测测试和答辩进行公开评分试和答辩进行公开评分前四年课程设计的经验和教训前四年课程设计的经验和教训对该课程设计的综合性认识不足对该课程设计的综合
6、性认识不足对考查的对考查的“动真格动真格”认识不足认识不足对对 课课 程程 的的 评评 论论本校少年班本校少年班1994级一个同学,级一个同学,Stanford大学博大学博士(士(1999年)年)Actually I think the quality of the compiler course in USTC is really very good and can be compared with any universities here.本系某考研同学(本系某考研同学(2006年)年)感觉您出的题目很有创意,也很有深度感觉您出的题目很有创意,也很有深度,没有,没有局限于固定的算法和题型
7、,只看课本和复习往年的局限于固定的算法和题型,只看课本和复习往年的题目而不深入思考的人是做不出来的,能够真正从题目而不深入思考的人是做不出来的,能够真正从本质上考察一个考生的水平本质上考察一个考生的水平对对 课课 程程 的的 评评 论论西南科技大学某考研学生(西南科技大学某考研学生(2004年)年)看过你编的书后,感觉编译的原理可以一下子和看过你编的书后,感觉编译的原理可以一下子和我平常学的很多学科和语言都联系起来了,可以学我平常学的很多学科和语言都联系起来了,可以学到很多可以实际用到的东西,虽然是在讲同样的东到很多可以实际用到的东西,虽然是在讲同样的东西,但您的教学方式让我很适应,学起来也很
8、有兴西,但您的教学方式让我很适应,学起来也很有兴趣,大大减轻了我考研的疲劳感趣,大大减轻了我考研的疲劳感第一章第一章 引引 论论 名词解释名词解释 翻译器翻译器(translator)、编译器、编译器(compiler)解释器解释器(interpreter)编译器从逻辑上可以分成若干个编译器从逻辑上可以分成若干个阶段阶段每个阶段把源程序从一种表示变换成另一种每个阶段把源程序从一种表示变换成另一种表示表示本章通过描述编译器的各个阶段来介绍编译本章通过描述编译器的各个阶段来介绍编译这个课题这个课题1.1 编译器概述编译器概述词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中
9、间代码生成器中间代码生成器独立于机器的代码优化器独立于机器的代码优化器代码生成器代码生成器依赖于机器的代码优化器依赖于机器的代码优化器目标机器代码目标机器代码符号表符号表符符 号号 表表 positioninitialrate.123词法分析器词法分析器 id,1 =id,2 +id,3 60 position=initial+rate 601.1 编译器概述编译器概述 记号流记号流 字符流字符流1.1 编译器概述编译器概述表达式的语法特征表达式的语法特征任任何何一一个个标标识识符符都都是表达式是表达式任任何何一一个个数数都都是是表表达式达式如如果果e1和和e2都都是是表表达式,那么达式,那么
10、 e1+e2 e1*e2 (e1)也都是表达式也都是表达式表达式表达式表达式表达式表达式表达式标识符标识符表达式表达式表达式表达式(initial)标识符标识符(rate)数数(60)*+initial+rate*60的的分析树分析树符符 号号 表表 positioninitialrate.123语法分析器语法分析器 id,1 =id,2 +id,3 60 =+60 id,1 id,2 id,3 语法树语法树1.1 编译器概述编译器概述 记号流记号流符符 号号 表表 positioninitialrate.1231.1 编译器概述编译器概述语义分析器语义分析器=+60 id,1 id,2 id
11、,3 =+inttofloat id,1 id,2 id,3 60 语法树语法树 语法树语法树符符 号号 表表 positioninitialrate.123中间代码生成器中间代码生成器t1=inttofloat(60)t2=id3 t1t3=id2+t2id1=t3=+inttofloat id,1 id,2 id,3 60 1.1 编译器概述编译器概述 三地址三地址中间代码中间代码 语法树语法树符符 号号 表表 positioninitialrate.123代码优化器代码优化器t1=inttofloat(60)t2=id3 t1t3=id2+t2id1=t3t1=id3*60.0id1=i
12、d2+t11.1 编译器概述编译器概述 三地址三地址中间代码中间代码 三地址三地址中间代码中间代码符符 号号 表表 positioninitialrate.123代码生成器代码生成器MOVF id3,R2MULF#60.0,R2MOVF id2,R1ADDF R2,R1MOVF R1,id1t1=id3*60.0id1=id2+t11.1 编译器概述编译器概述 三地址三地址中间代码中间代码 汇编汇编代码代码1.1 编译器概述编译器概述解释器和编解释器和编译器的区别译器的区别词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器独立于机器的代码优化器
13、独立于机器的代码优化器代码生成器代码生成器依赖于机器的代码优化器依赖于机器的代码优化器目标机器代码目标机器代码解释器不生成目标代解释器不生成目标代码,而是直接执行源码,而是直接执行源程序所指定的运算程序所指定的运算 解释器也需解释器也需要对源程序要对源程序进行词法进行词法、语法和语义语法和语义分析分析,中间中间代码生成代码生成1.1 编译器概述编译器概述BASIC年代的解释器年代的解释器功能:它将高级语言的源程序翻译成一种中间语功能:它将高级语言的源程序翻译成一种中间语言程序,然后对中间语言程序进行解释执行言程序,然后对中间语言程序进行解释执行在那个年代,编译和解释两个功能是合在一个程在那个年
14、代,编译和解释两个功能是合在一个程序中,该程序被称为解释器序中,该程序被称为解释器Java年代的解释器年代的解释器上述两个功能分在两个程序中上述两个功能分在两个程序中前一个叫做编译器,它把源程序翻译成一种叫做前一个叫做编译器,它把源程序翻译成一种叫做字节码的中间语言程序字节码的中间语言程序后一个叫做解释器,它对字节码程序进行解释执后一个叫做解释器,它对字节码程序进行解释执行行1.1 编译器概述编译器概述阶段分组阶段分组前端前端后端后端词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器独立于机器的代码优化器独立于机器的代码优化器代码生成器代码生成
15、器依赖于机器的代码优化器依赖于机器的代码优化器目标机器代码目标机器代码1.1 编译器概述编译器概述词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器源程序源程序中间代码生成器中间代码生成器独立于机器的代码优化器独立于机器的代码优化器代码生成器代码生成器依赖于机器的代码优化器依赖于机器的代码优化器目标机器代码目标机器代码阶段分组阶段分组遍遍1.2 编译器技术的应用编译器技术的应用 高级语言的实现高级语言的实现高级编程语言易于编程,但程序运行较慢高级编程语言易于编程,但程序运行较慢低级语言编程时可实施更有效的控制方式,得到低级语言编程时可实施更有效的控制方式,得到更有效的代码,但难编写、
16、易出错更有效的代码,但难编写、易出错、难维护难维护流行编程语言的大多数演变都是朝着提高抽象级流行编程语言的大多数演变都是朝着提高抽象级别的方向别的方向每一轮编程语言新特征的出现都刺激编译器优化每一轮编程语言新特征的出现都刺激编译器优化的新研究的新研究1.2 编译器技术的应用编译器技术的应用 高级语言的实现高级语言的实现每一轮编程语言新特征的出现都刺激编译器优每一轮编程语言新特征的出现都刺激编译器优化的新研究化的新研究支持用户定义的聚合数据类型和高级控制流,如数支持用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用:组和记录、循环和过程调用:C、Fortran面向对象的主要概念是数
17、据抽象和性质继承,使得面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护程序更加模块化并易于维护:Smalltalk、C+、C#、Java类型安全的语言:类型安全的语言:Java没有指针,也不允许指针算没有指针,也不允许指针算术。它用无用单元收集机制来自动地释放那些不再术。它用无用单元收集机制来自动地释放那些不再使用的变量占据的内存使用的变量占据的内存Java设计来支持代码移植和代码移动设计来支持代码移植和代码移动1.2 编译器技术的应用编译器技术的应用 针对计算机体系结构的优化针对计算机体系结构的优化计算机体系结构的迅速演化引起对新的编译器技计算机体系结构的迅速演化引起对新
18、的编译器技术一种不知足的需要术一种不知足的需要并行化并行化 编译器重新整理指令,使得指令级并行更有效编译器重新整理指令,使得指令级并行更有效 编译器从传统的串行程序自动生成并行代码,编译器从传统的串行程序自动生成并行代码,使之运行于多处理器上使之运行于多处理器上内存分层内存分层 编译器优化历来集中在优化处理器的执行上,编译器优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效但是现在更强调要使内存分层更有效1.2 编译器技术的应用编译器技术的应用 新计算机体系结构的设计新计算机体系结构的设计现在计算机系统的性能不仅仅取决于它的原始速现在计算机系统的性能不仅仅取决于它的原始速度,还
19、取决于编译器是否能生成充分利用其特征度,还取决于编译器是否能生成充分利用其特征的代码的代码在现代计算机体系结构的研究中,在处理器的设在现代计算机体系结构的研究中,在处理器的设计阶段就开发编译器,并将编译生成的代码在模计阶段就开发编译器,并将编译生成的代码在模拟器上运行,以评价拟采用体系结构的特征拟器上运行,以评价拟采用体系结构的特征编译器技术影响计算机体系结构设计的一个著名编译器技术影响计算机体系结构设计的一个著名例子是精简指令集计算机(例子是精简指令集计算机(RISC)的发明)的发明1.2 编译器技术的应用编译器技术的应用 程序翻译程序翻译二进制翻译二进制翻译 编译器技术可用于把一种机器的二
20、进制代码翻译编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令集成另一种机器的代码,以运行原先为别的指令集编译的代码编译的代码数据库查询解释器数据库查询解释器 数据库查询由一些谓词组成,这些谓词由包含关数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行系运算的布尔表达式组成,可以被解释执行,也可也可以被编译成搜索数据库的命令以被编译成搜索数据库的命令1.2 编译器技术的应用编译器技术的应用 提高软件开发效率的工具提高软件开发效率的工具源于编译器中代码优化技术的程序分析一直在源于编译器中代码优化技术的程序分析一直在改进软件开发效率改进软件开发效率类型检查类型检查 类型检查是一种捕捉程序中前后不一致的成熟而类型检查是一种捕捉程序中前后不一致的成熟而有效的技术有效的技术边界检查边界检查 数据流分析技术可用来定位缓冲区溢出数据流分析技术可用来定位缓冲区溢出内存管理内存管理 自动的内存管理删除内存泄漏等内存管理错误自动的内存管理删除内存泄漏等内存管理错误