预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共123页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编译原理课件第一讲引论§1.课程信息二、课程性质:专业基础课,必修 编译程序(器)出现于上世纪50年代后期(第一个高级语言1958年) 60年代~70年代是研究高峰期 60年代中期开始在高校中开设课程 80年代开始作为计算机科学与技术专业的必修基础课程5三、课程特点: 充分体现了计算学科中抽象、理论和设计三个学科形态 该课程涉及多门课程的内容综合运用,涉及面广,内容庞杂,学习艰难 程序设计语言、计算机体系结构、语言理论及算法等 数据结构、离散数学 该课程涉及的原理、方法和技术具有十分普遍的意义 每一个计算机科学与技术工作者的职业生涯中反复用到,“享用一辈子” 这儿接受的训练很难在其他地方获得,如:抽象与形式化方法、局部与全局优化方法、构造技术、证明方法等四、学习该课程的意义 编译程序是计算机系统不可缺少的重要组成部分 对程序设计语言的设计与实现能有更深刻的理解 对程序设计语言有关理论有所了解 从宏观上把握程序设计语言——掌握了编译原理后,就不能再说:“某语言未学过,所以不会” 有助于快速理解、定位和解决程序调试与运行中出现的问题编译方法与技术有着广泛应用 安全技术、程序理解、软件逆向工程、应用软件与软件工具开发、软件测试与验证等 编译课程蕴含着计算学科中解决问题的思路、抽象和方法,这些与高等数学一样,使你“享用一辈子” 课程所涉及的内容至今非常活跃 自然语言的翻译 软件移植 网络安全 形式化方法 形式语义学等鉴于以上所述,作为计算机科学与技术专业的学生必须学习和掌握编译原理这门课程,当然由于其综合性、处理问题的复杂性等,学习起来有一定难度,这就需要艰苦奋斗的精神和良好的学习方法五、学习方法 编译程序的构造是一个庞大而复杂的系统工程,无论是概念还是理论、方法,对初学者来说许多都是新的,学习起来会感到困难大一些,这一点必须有充分认识,为此建议学习方法上注意以下几点:课前预习,课堂认真听讲,课后复习加深理解,特别要经常有意识地将前后内容联系起来融会贯通。 因为编译程序是一个庞大的程序系统,讲解过程必须“分而治之”(这也是人们处理复杂问题的基本方法),这就要求大家在学习过程中,始终以处理过程为主线,把前后联系起来考虑。理论联系实际——亲自动手,构造一个演示性编译程序,至少要完成扫描器和语法分析器,以及语法制导翻译产生中间代码(课程设计) 认真完成作业,进一步巩固并加深理解所学知识 特别要下功夫认真学习如何从实际问题进行抽象并形式化,最终建立实际问题的模型(上升为理性认识),并借助模型进一步设计实现,这将对你能力的提高大有益处六、教材《程序设计语言编译原理》(第3版)国防工业出版社陈火旺等 内容详实丰富,理论与技术相结合 较为全面介绍了编译程序构造的基本原理、方法与技术 厚度适中 大多数院校一直采用,硕士入学考试参考书 所谓教材,实为第一参考书而已七、参考书目 1.《编译原理》第2版赵建华等译, <Compilers:Principles,Techniques,&Tools>A.V.Aho,M.S.Lam,RaviSethi,J.D.Ullman著,机械工业出版社,2009; 2.《编译原理课程设计》王雷等著,机械工业出版社,2005; 八、期末总评 平时成绩:10% 课程设计:20% 期终考试:70%15§2.编译程序概述任何非机器语言程序都需要翻译程序 翻译程序的工作就是进行等价变换(映射) 两个程序逻辑上等价是指对相同输入得到相同的输出汇编程序(Assembler)把汇编语言程序转变为机器语言程序的翻译程序 解释程序(Interpreter)把源程序作为输入接收,边解释边执行的翻译程序编译程序将高级语言程序转变为低级语言程序的翻译程序20编译程序又可根据用途和侧重点的不同,进一步分类为: ①诊断编译程序(DiagnosticCompiler)专门用于帮助程序开发和调试的编译程序 ②优化编译程序(OptimizingCompiler)着重于提高目标代码效率的编译程序 ③交叉编译程序(CrossCompiler)能够产生不同于其宿主机机器代码的编译程序 ④可变目标编译程序(Retargetablecomplier)无须重写与机器无关部分就能改变目标机的 编译程序二、与编译程序相关的程序 本讲义只介绍编译程序(器)构造的基本原理、方法与技术,但在一个完整的语言开发(或称程序设计)环境中,除了编译器这一主要工具外,还需要其他一些工具,如编辑器、连接器、装入程序等。现代计算机系统常将这些相互独立的程序设计工具集成起来,构成一个集成化的程序开发环境,以提高程序设计效率和程序的质量。如TurboC、VisualC++等语言环境都是集成化的程序设计环境。而Ada语言的集成环境是这方面的典型代表。如Ada语言的集成环境是一个分层的程序开发