当前位置:文档之家› 编译原理实践及应用.

编译原理实践及应用.

写的源程序作为输入,边解释边执行源程序本身,而 不产生目标程序的翻译程序。

功能
源程序 解释程序
结果
输入数据
2019年1月12日星期 《编译原理实践及应用》 第17页
对编译程序的一些说明
• 编译程序实质上是一个翻译程序,要注意等价变 换 • 本课程的任务就是讲解在这个转换过程中所涉及 到的一些理论和方法,最后,使用这些理论和方 法,自己编写一个小的编译器 • 转换是一个总体的功能,要抓住总体结构,逐层 细分,写编译器时要体现软件工程中软件设计的 原则,自顶向下,逐层分解。 • 编译器要完成的转换任务相当复杂,实现编译器 时必须分步骤分阶段实现。分阶段实现的好处是 能够简化程序的设计,当然也可以不分阶段实现。
《编译原理实践及应用》 第20页
2019年1月12日星期
什么是编译原理
编译原理是讨论编译程序设计的基本理论、 基本概念、基本方法
2019年1月12日星期
《编译原理实践及应用》
第21页
1.2 编译过程概述
• 1、逻辑上分五个阶段:词法分析、语法分析、
语义分析与中间代码生成、代码优化、目标代码生成 每个阶段把源程序从一种表示变换成另一种表示
• 翻译程序:能够将某种语言写的程序转换成另一 种语言的程序,而且后者与前者在逻辑上是等价 的。 • 编译程序:是一种将高级语言程序(源程序)翻译 成低级语言(目标程序)的程序 • 解释程序:接受某高级语言的一个语句输入,进 行解释并控制计算机执行,马上得到这句的执行 结果,然后再接受下一句。
2019年1月12日星期
2019年1月12日星期 《编译原理实践及应用》 第8页
学习方法
• (1) 尽可能地掌握编译原理的思想,要站得高一点,尽可能理 解算法的思想,而不是背固定的算法。应该尽力理解为什么 要这样做,逐渐在头脑中建立起编译器的整体概念,而不是 零零散散的一些算法。 • (2) 很多题目的解法比较固定,要熟练掌握相应的具体方法。 • (3) 多做习题, 对于编译这样的学科,题目的规模很大,步骤 繁多,而且前面的步骤一旦出错,后面都错。 • (4) 要扎扎实实地牢记重要算法,配合大量的习题进行练习, 达到拿到题目就可以动手做的地步。 • (5) 一边学习,一边总结,关键是找差异:同一问题可以用多 种方法来求解,不同方法适用于不同的文法,对文法的限制 和要求,相应的表格的构造、使用等,各个方面的差异都要 关注。 • (6) 亲自动手实现书上的一些算法,完成实验指导书上给出的 一个简单的编译程序,或者编译程序的一部分,这样能更灵 活地掌握编译程序构造的精髓。 《编译原理实践及应用》
2019年1月12日星期 《编译原理实践及应用》 第18页
编译程序的分类
• • • •
诊断编译程序 优化编译程序 可变目标编译程序 交叉编译程序
2019年1月12日星期
《编译原理实践及应用》
第19页
与编译程序相关的程序
• • • • • • • 解释程序(Interpreter) 汇编程序(assembler) 连接程序(linker) – 连接系统函数与系统资源 装入程序(loader) – 重定位(relocation) 预处理器(Preprocessor) 编辑器(editor) Debugger,Profiler,Project Manager
2019年1月12日星期 第9页
第一章
引 论
《编译原理实践及应用》
本章要求
• 主要内容:各种翻译程序的概念,编译 过程和阶段划分,编译程序的组成和结 构,编译程序的构造方法 • 重点掌握:编译程序工作的基本过程及 其各阶段的基本任务,编译程序总框。
2019年1月12日星期
《编译原理实践及应用》
第11页
为什么要使用编译器?
• 机器语言 (machine language)
C7 06 0000 0002
• 汇编语言 (assembler language)
MOV X , 2
• 高级语言 (high-level language)
X=2
2019年1月12日星期
《编译原理实践及应用》
第12页
计算机中的语言层次和转换关系
第7页
本课程的特点
• (1) 本课程理论性很强,学习时需要很强的逻辑思维能力 • (2) 涉及的算法复杂,要深入地理解这些算法很困难 • (3) 整个编译程序的构造方法非常精妙,就像一部走时精 确的时钟,很多齿轮、部件协调地运转,以驱动指针准确 地旋转;编译程序也是如此,一边扫描源程序,一边经过 各个部件的运算,准确地输出为目标语言。 • (4) 编译原理课程各个部分之间的独立性很强,包括词法 分析、语法分析、存储的组织与分配、中间语言、语法制 导翻译、代码生成与优化这几大部分。词法分析和语法分 析是其中的重点,语言分析也是难点,需要掌握比较复杂 的算法逻辑;其他部分相对来说知识性更强一些。各部分 之间的方法也互相独立,在学习时,便于逐个击破。 • (5) 考试考查的内容相对来说是很稳定的,绝大多数题目 的解法都非常机械。
2019年1月12日星期

《编译原理实践及应用》
第23页
第一阶段:词法分析
任务:从左到右扫描源程序,识别出每个单词 o 附加任务:a、滤掉空格 b、识别单词 o 单词符号是语言的基本组成成分 o 词法分析的工作主要依据语言的词法规则,描述词 法规则的有效工具是正规式和有限自动机。 o 单词的种类: (1) 标识符 (2) 关键字(char、int、if、else、switch、while、 for等) (3) 运算符(即运算符号 +、-、*、/、&等) (4) 界符(常见的有 ; , : ( )等) ( 5) 常数 2019年1月12日星期
源程序 编译器 目标程序
词 法 分 析
2019年1月12日星期
语 法 分 析
语义分 析与中 间代码 生成
代 码 优 化
目标 代码 生成
《编译原理实践及应用》
第22页
• 按照词法分析、语法分析、语义分析等这种方式 来划分阶段的原因是:每个阶段的复杂程度不同, 所依据的理论基础不同,实现时采用的方法也不 同。主要是方便理解和实现。 • 划分阶段的依据是什么?每个阶段所实现的功能 相对独立。
《编译原理实践及应用》
第15页
1.1 什么叫编译程序
编译程序(Compiler)——将高级程序设计语言程序
翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序 的翻译程序。
功能
源程序
编译程序
目标程序
结果
输入数据
计算机运行
2019年1月12日星期
《编译原理实践及应用》
第16页
解释程序

解释程序(Interpreter)——将高级程序设计语言
电出版社
2019年1月12日星期 《编译原理实践及应用》 第2页
C语言程序
void main( ) { int x,y,z; x=3; y=2; z=x+y; } 内存地址 内存内容
…… 200H 201H 202H ……
2019年1月12日星期
汇编语言程序
序言
…… 3 2 5 ……
…… 300 mov ax,3 302 mov x,ax 304 mov ax,2 306 mov y,ax 308 mov ax,x 单元名字…… mov bx,y add ax,bx …… mov z,ax x:局部变量 ...... y:局部变量
z:局部变量
第3页
《编译原理实践及应用》
为什么要学习编译原理?
• 1、有助于深刻理解和正确使用程序设计语
言,加深对高级语言程序执行过程的理解 • 2、有助于加深对整个计算机系统的理解。 • 3、设计开发编译程序的软件技术同样可以 用于其他软件的设计开发。 • 4、随着微处理器技术的飞速发展,处理器 性能在很大程度上取决于编译器的质量、 编译技术成为计算机的核心技术,地位变 得越来越重要。
2019年1月12日星期 《编译原理实践及应用》 第5页
《编译原理》课程在计算机科学中 的地位
汇编语言 高级语言 程序设计 计算机组成原理 离散数学 数据结构 编译原理 系统软件 操作系统
信息系统
电子商务
应用软件
软件工程
2019年1月12日星期 《编译原理实践及应用》 第6页
学习本课程的目的和任务
• 加深对编程语言设计和实现的理解,对和编程语言 有关的理论有所了解,对宏观上把握编程语言来说, 起一个奠基的作用,提升自身的编程能力 • 掌握编译程序的基本结构,掌握常用的编译技术和 方法,将编译原理的理论和方法应用于一般的软件 设计中 • 培养团队协作能力
2019年1月12日星期
《编译原理实践及应用》
*
表达式 标识符 id3(C)
语法分析所依据的是语言的语法规则, 表示语法规则的工具是上下文无关文法,用下推 《编译原理实践及应用》 自动机实现。 第27页 2019 年1月12日星期
第13页
编译程序所处的层次
语言处 理程序
Fortran语言
Fortran编译程序
高 级 语 言
C 语 言
操作系统
C 编译 程序
计算机硬件 汇编语言
Basic解释程序
《编译原理实践及应用》
. . . . . .
. . . . . .
Basic语言
2019年1月12日星期
第14页
1.1 什么叫编译程序
2019年1月12日星期 《编译原理实践及应用》 第26页
赋值语句 标识符 := 表达式 表达式
id1:=int1 + id2 * id3 + id2 * id3
id1(result)
+
表达式
常数
相关主题