这一节主要是向我们引出了编译器原理与技术这一概念,介绍编译器构造的一般原理和基本实现方法,编译器概述,以及编译器技术的应用。这一章对于我们学习编译器的原理有非常的的作用。

注脚

1.第 1 章 引论 编译原理与技术

2.介绍编译器构造的一般原理和基本实现方法 包括 的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论与类型系统、程序分析原理等 强调 形式描述技术和自动生成技术 强调 对编译原理和技术的宏观理解,不把注意力分散到枝节算法,不偏向于任何源语言或目标 机器 课程简介 课程内容

3.提高编程水平:对编程语言的设计和实现有深刻的理解,对和编程语言有关的理论有所了解,对宏观上把握编程语言来说,起一个奠基的作用 高级语言 汇编语言 提升 对计算机系统的理解,提升软件分析能力 了解软件 安全相关问题: 漏洞、恶意代码 高 可信 软件 如何安全地编程 课程简介 学习意义

4.教材: 陈意云 、张昱, 编译原理(第 3 版) ,高等教育出版社 参考书: 张昱 、陈意云, 编译原理实验教程 ,高等教育出版社 陈意云、张昱, 编译原理习题精选与解析 ,高等教育出版社 课程简介 教材和参考书 龙书 虎书 鲸书

5.课程 难度: 质量 上接近本校 计算机 专业 前 难后易,前少后多 每次课程内容务必在下次课前理解,不要积压 课件无需打印,例题应做笔记 到课率: 不点名,不计入成绩,但作为调整分数的依据 除非你有很好的编程基础,否则不建议自学 作业 : 作业务必自己做,要思考 不计入总分,但作为调整分数的依据 课程实验: 自己动手,大有收获 独立完成,按时 提交 课程简介 课程要求

6.闭卷考试 理解概念 掌握方法 学期 总评 考试卷面成绩 占 80 % 实验 20% 警告:本课挂科 率可能会 比较高 课程简介 考试情况

7.名词解释 翻译器 (translator ) :一种语言到另一种语言 编译器 (compiler ) :高级语言到低级语言 解释器 (interpreter ) :边解释边执行 编译器 从逻辑上可以分成若干个 阶段 每个阶段把源程序从一种表示变换成另一种表示 本章 通过描述编译器的各个阶段来介绍编译这个课题 1 引论 内容提要

8.1.1 编译器 概述 第 1 章 引论

9.1.1 编译器概述 基本流程 词法分析 器 语法分析 器 语义分析 器 源程序 中间代码 生成器 独立于机器的代码优化 器 代码生成器 依赖于机器的代码优化 器 目标机器代码 符号 表

10.1.1 编译器概述 词法 分析 符 号 表 position initial rate . . . . . . . . . 1 2 3 词法分析器 i d, 1   =   id, 2   +   id, 3    60  position = initial + rate  60  记号流  字符流

11.表达式的语法特征 任何一个标识符都是表达式 任何一个数都是表达式 如果 e 1 和 e 2 都是表达式,那么 e 1 + e 2 e 1  e 2 (e 1 ) 也都是表达式 1.1 编译器概述 语法分析 表达式 表达式 表达式 标识符 (initial ) 表达式 表达式 标识符 (rate) 数 (60)  + initial + rate  60 的 分析树

12.1.1 编译器概述 语法分析 符 号 表 position initial rate . . . . . . . . . 1 2 3 语法分析器 i d, 1   =   id, 2   +   id, 3    60   =   +    60  i d, 1   id, 2   id, 3   语法树  记号流

13.1.1 编译器概述 语义 分析 符 号 表 position initial rate . . . . . . . . . 1 2 3 语义分析器  =   +    60  i d, 1   id, 2   id, 3   =   +   inttofloat i d, 1   id, 2   id, 3   60   语法树  语法树

14.1.1 编译器概述 中间代码生成 符 号 表 position initial rate . . . . . . . . . 1 2 3 中间代码生成器 t1 = inttofloat(60) t2 = id3  t1 t3 = id2 + t2 id1 = t3  =   +   inttofloat i d, 1   id, 2   id, 3   60   三地址 中间代码  语法树

15.1.1 编译器概述 代码优化 代码优化器 t1 = inttofloat (60) t2 = id3  t1 t3 = id2 + t2 id1 = t3 t1 = id3  60.0 id1 = id2 + t1  三地址 中间代码  三地址 中间代码 符 号 表 position initial rate . . . . . . . . . 1 2 3

16.1.1 编译器概述 代码生成 符 号 表 position initial rate . . . . . . . . . 1 2 3 代码生成器 MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 t1 = id3  60.0 id1 = id2 + t1  三地址 中间代码  汇编 代码

17.后 端 前端 1.1 编译器概述 编译器的阶段分组 词法分析 器 语法分析 器 语义分析 器 源程序 中间代码 生成器 独立于机器的代码优化 器 代码生成器 依赖于机器的代码优化 器 目标机器代码 符号 表

18.1.1 编译器概述 编译器的阶段分组 词法分析 器 语法分析 器 语义分析 器 源程序 中间代码 生成器 独立于机器的代码优化 器 代码生成器 依赖于机器的代码优化 器 目标机器代码 符号 表 遍

19.1.1 编译器概述 解释器与编译器区别 词法分析 器 语法分析 器 语义分析 器 源程序 中间代码 生成器 独立于机器的代码优化 器 代码生成器 依赖于机器的代码优化 器 目标机器代码 符号 表 解释器不生成目标代码,而是直接执行源程序所指定的运算 解释器也需要对源程序进行词法、语法和语义分析 , 中间代码生成

20.BASIC 年代的解释器 功能:它将高级语言的源程序翻译成一种中间语言程序,然后对中间语言程序进行解释执行 在那个年代,编译和解释两个功能是合在一个程序中,该程序被称为解释器 Java 年代的解释器 上述两个功能分在两个程序中 前一个叫做编译器,它把源程序翻译成一种叫做字节码的中间语言程序 后一个叫做解释器,它对字节码程序进行解释 执行 1.1 编译器概述 解释器

21.1.2 编译器技术的应用 第 1 章 引论

22.高级编程语言易于编程,但程序运行较慢 低级语言 编程时可实施更有效的控制方式,得到更有效的代码,但难编写、易出错、难维护 流行 编程语言的大多数演变都是朝着提高抽象级别的方向 每 一轮编程语言新特征的出现都刺激编译器优化的新 研究 支持 用户定义的聚合数据类型和高级控制流,如数组和记录、循环和过程调用: C 、 Fortran 面向对象的主要概念是数据抽象和性质继承,使得程序更加模块化并易于维护: Smalltalk 、 C++ 、 C# 、 Java 类型安全的语言: Java 没有指针,也不允许指针算术。它用无用单元收集机制来自动地释放那些不再使用的变量占据的内存 Java 设计来支持代码移植和代码 移动 1.2 编译器技术的应用 高级语言的实现

23.针对计算机体系结构的 优化:计算机体系结构的迅速演化引起对新的编译器技术一种不知足的需要 并行化 编译 器重新整理指令,使得指令级并行更有效 编译器 从传统的串行程序自动生成并行代码,使之运行于多处理器上 内存分层 编译器 优化历来集中在优化处理器的执行上,但是现在更强调要使内存分层更有效 新计算机体系结构的设计 现在计算机系统的性能不仅仅取决于它的原始速度,还取决于编译器是否能生成充分利用其特征的代码 在现代计算机体系结构的研究中,在处理器的设计阶段就开发编译器,并将编译生成的代码在模拟器上运行,以评价拟采用体系结构的特征 编译器技术影响计算机体系结构设计的一个著名例子是精简指令集计算机( RISC )的 发明 1.2 编译器技术的应用 与计算机体系结构的相互促进

24.二进制翻译 编译器 技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令集编译的代码 数据库 查询解释器 数据库 查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释 执行,也 可以被编译成搜索数据库的命令 1.2 编译器技术的应用 程序翻译

25.源于编译器中代码优化技术的程序分析一直 在改进 软件开发效率 类型检查 类型 检查是一种捕捉程序中前后不一致的成熟而有效的技术 边界 检查 数据流分析 技术可用来定位缓冲区溢出 内存 管理 自动 的内存管理删除内存泄漏等内存管理错误 1.2 编译器技术的应用 提高软件开发效率的工具

26.翻译器 、编译器、 解释器 的 概念 编译器 的典型阶段 1 引论 本章要点

相关Slides

  • 用最精炼的语言(图)来描绘出Akka编程的基本核心组件的概念,并点出基本原理,特别是编程方法,是akka概念性入门的非常好的参考资料。

  • Java多线程开发的基本概念和原理,包括什么是线程,什么是进程,为什么要用多线程,现代处理器多核时代,并行编程会碰到的问题,java对应的多线程并行编程的API和对应的操作系统原理是什么?如果使用java来实现多线程,线程管理,暂停,休眠,中断,以及线程间的协作同步,死锁等概念及其对应Java的编程模型。

  • 多线程编程中,特别是在多核时代,各种程序优化诸如乱序执行等,如何严格确保数据在多线程间共享访问的处理顺序,相关同步的API很关键,理解原理对于编写正确安全的多线程程序非常重要。本文对于多线程执行进行的设计模式归纳,把常用的编程模型用java语言进行了演示。