编译原理第一章

合集下载

编译原理第一章 介绍

编译原理第一章 介绍

All are tokens
1.2.2 语法分析
层次分析,分析(parsing),语法分析
将词法分析产生的单词组合为语法短语 assignment statement
identifier position
:=
expression
expression +
identifier
initial
expression * expression expression identifier number
检查不合语义的错误
为代码生成收集信息
最重要的工作:类型检查,2
+ „a‟
例1.1 类型转换
intreal
:= position
+ * rate inttoreal
initial
Conversion Action 60
1.2.4 排版软件中的分析
LATEX
\begin{proof}
软件工具
解释器
不产生目标程序,边分析边执行 Shell语言,早期BASIC、Java、Python
其它应用

排版软件

普通文本,命令格式、图表、公式 LATEX,TROFF
源程序电路设计,变量——逻辑信号 文本/图形模式 数据查询语言 输入—数据查询语句底层数据库访问操作 压缩:初始数据上下文无关文法压缩文法 解压:解压文法文法推导出唯一串初始数据 滑铁卢大学杨恩辉教授,已应用于黑莓手机

1、2——基本规则,3——递归定义
文法(grammar)

语句(statement)定义
1.
2.
若identifier1是一个标识符,expression2是一个表达 式,则 identifier1 := expression2是一个语句 若expression1是一个表达式,statement2是一个语 句,则 while ( expression1 ) do statement2和 if ( expression1 ) then statement2 也是语句

编译原理第一章

编译原理第一章

常见的中间代码形式
探讨了常见的中间代码形式,包括三地址代码和抽 象语法树等,并讨论了它们的优缺点。
优化和目标代码生成
1 代码优化
讨论了编译器中的代码优化技术,以提高目 标代码的效率和执行速度。
2 目标代码生成
介绍了编译器如何生成目标代码,以便计算 机能够执行程序。
总结
编译原理是一门重要而有趣的课程,它为计算机科学学习者提供了深入了解计算机程序执行过程的机会。
编译原理第一章
编译原理是计算机科学中非常重要的一门课程,它涉及到如何将高级程序设 计语言转换为计算机能够执行的机器语言。
课程介绍
定义和重要性
介绍了编译原理的定义,并 阐述了编译器在计算机科学 中的作用和重要性。
概述
解释了编译过程的基本步骤, 并介绍了前端和后端之间的 区别。
词法分析
讨论了词法分析的概念,包 括词法单元的定义、正则表 达式和有限自动机的应用。
语法分析

语法制导翻译
2
了自顶向下和自底向上的语法分析方法。
解释了语法制导翻译的概念和使用,并
讨论了与语义动作相关的内容。
3
语义错误的处理
讨论了如何检测和处理语义错误,并介 绍了常见的错误处理机制。
中间代码生成
中间代码和中间表示
详细介绍了编译器生成的中间代码及其表示形式, 以及其在编译过程中的重要性。

编译原理--第一章.讲义

编译原理--第一章.讲义

2018/11/14
2
编译原理
第一章 引论
2.编译理论与其他课程关系
操作系统
控制对象
数据结构
编译理论
基础
素材
离散数学
自动机和形式语言
2018/11/14 3
编译原理
第一章 引论
3.编译理论的应用
编译理论 的许多想法和技术可用于一般软件的设计:
文本编辑程序 有穷状态技术 上下文无关文法 语法制导翻译 代码优化技术
2018/11/14
目标程序代码
6
编译原理
第一章 引论
6.翻这种变换程序称为翻译程序
高级语言源程序
编译为
面向机器代码
这种变换程序称为编译程序 编译程序 有一些限制 (针对输入、输出)
2018/11/14 7
编译原理
第一章 引论
1.编译过程的组成 源程序
编译原理
第一章 引论
5.代码优化
任务
对于代码(主要是中间代码)进行加工变换, 以期能够产生更为高效(省时间和空间)的 目标代码 。
所做转换
中间代码
中间代码(优化后)
依据
程序等价变换规则
2018/11/14
主要理论基础
数据流方程
15
编译原理
第一章 引论
5.代码优化
示例
(1) M := I (2) N := J (3) K := 1 (4) if 100<K goto (9) (5) (6) (7) (8) (9)
源程序
词法分析 语法分析
单词符号 语法单位 中间代码
编译过程
中间代码生成 代码优化
中间代码(优化后)
目标代码

编译原理-第一章 概述

编译原理-第一章 概述
南京邮电大学计算机学院
蒋凌云
My E-mail: jianglingyun@
教材:《编译技术原理及其实现方法》王汝传 编著
第一章 概 述
§1.1 程序设计语言 一、语言的概念和分类 二、程序设计语言简述 §1.2 翻译程序 一、汇编程序 二、解释程序 三、编译程序 §1.3 编译程序简史 一、汇编语言阶段 二、高级程序语言出现 三、编译程序理论开始确定 四、编译程序技术方法进一步发展 §1.4 编译过程简述 一、编译步骤 二、编译过程简述 三、趟程(遍) §1.5 编译程序的生成 一、编写编译程序的一般方法 二、编译程序开发技术 三、编译程序的自动生成
第一章 概 述
§1.1 程序设计语言
一、语言的概念和分类
1.语言的分类
自然 语言
以数理逻辑、集合论 和统计数学来描述的 一种语言。例如,用 计算机进行几何定理 的证明就得以数理语 言形式进行描述 程序 设计语言
人与人之间交流 信息的一种语言 动物之间通过动 物语言交流信息
数理 语言
是人和计算机进行信息交流的一种 语言,它遵循一定的语法和语义的 规则,而编译程序的功能正是 1)讨论语法,检查程序正确性 2)讨论语义,生成目标代码
计算机的两个基本能力:一是能够存储程序,二是能够自 动地执行程序。 计算机是利用“存储器”(内存)来存放所要执行的程序 的,而称之为CPU的部件可以依次从存储器中取出程序中 的每一条指令,并加以分析和执行,直至完成全部指令任 务为止。
John von Neumann 冯· 诺依曼
1949 EDSAC
多范型程序设计语言时期(2/4)
① 函数式语言 也称作用式语言,纯函数式语言中不使用赋值 语句,其语法形式类似于数学上的函数,典型 函数式语言,如LISP、APL、ML等。 ② 逻辑式语言 也称说明式语言,基于规则式语言,它以逻辑 程序设计思想为理论基础,主要核心是事实规 则与推理机制,其代表语言是 PROLOG(PROgramming in LOGic),PROLOG语 言主要用于人工智能,于1972年由法国马塞大 学人工智能研究中心开发。

编译原理 第1章课件

编译原理 第1章课件

第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。

(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。

编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。

编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。

1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。

典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。

(逻辑上紧密相连的一组字符,这些字符具有集体含义。

)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。

目的:检查各种语法单位在语法结构上的正确性。

例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。

第1章 编译原理

第1章  编译原理

第一章引论知识结构:翻译程序的分类编译程序编译方法与解释方法编译程序的分类编译过程编译过程编译程序的组成编译程序的功能引言编译程序逻辑结构编译程序的结构编译程序组织方式编译程序的划分编译程序的设计表示形式编译程序的生成编译程序的移植第一节什么叫编译程序一、程序设计语言的分类1、程序源程序:用源语言(基本符号,关键字)编写的程序,它是翻译程序加工的对象。

中间程序(中间代码):是一种结构简单,含义明确的记号系统。

目标程序:源语言程序经过翻译程序加工最后得到的目标语言程序。

翻译程序:将一种语言程序(源程序)转换成另一种语言程序(目标程序),后者与前者在逻辑上是等价的。

被翻译的程序翻译后的结果程序2、程序设计语言程序设计语言是用来编写程序的工具,可分为两大类:⑴低级语言机器语言:计算机的指令系统,可以被计算机直接执行的语言。

汇编语言:依赖于计算机抽象出来的一种符号语言,它是机器指令系统的符号化,具有宏指令功能的面向机器语言。

⑵高级语言不依赖计算机,为描述实际问题需要而设计的一个记号系统。

二、翻译程序的分类编译程序:将源程序翻译成等价的目标程序(汇编语言或机器语言)。

解释程序:按源程序中语句动态顺序,边解释,边执行。

汇编程序:将汇编语言编写的程序翻译成机器指令序列。

三、高级语言的翻译方式编译方式(类似笔译):⑴编译阶段把源程序翻译成等价的目标程序(汇编语言,机器语言)。

①汇编语言(输出结果)编译阶段汇编阶段②机器语言(输出结果)⑵运行阶段编译程序与运行系统合称编译系统。

解释方式(类似口译):对源程序的每一个语句边解释,边执行,不产生目标程序。

四、编译程序的特点1、翻译过程是一种功能上等价的翻译。

2、输出结果是(机器语言或汇编语言)低级语言。

3、编译程序与具体的语言和机器有关。

4、被编译的源程序是被加工的对象,目标程序是加工的结果。

五、编译程序与解释程序的区别编译程序与解释程序的区别在于是否生成目标代码。

六、高级语言与翻译的关系七、编译程序的分类1、诊断编译程序用于帮助程序开发和调试的编译程序。

编译原理王生原(第一章)

编译原理王生原(第一章)

目标代码生成
目标代码表示形式
编译器需要将中间代码转换 为目标机器代码,以便在计 算机上运行。
目标代码优化
编译器可以使用各种技术进 行目标代码的优化,如指令 选择、寄存器分配等。
指令生成方法
编译器可以使用模板匹配等 技术生成目标机器指令。
总结
1
词法分析
将程序代码分解成一系列令牌或词法单元
2
语法分析
编译过程概述
编译过程由三个阶段组成:词法分析、语法分析和语义分析。在生成中间代码和目标代码之 前,还需要进行一些优化。
词法分析
目的和原理
将程序代码分解成一系列令牌或词法单元,以便进 行进一步的分析和转换。
识别标识符和关键字
编译器需要识别代码中的标识符和关键字,以便进 行进一步的语法分析。
识别常量
编译器需要将数字和字符串等常量识别并转换为内 部表示形式。
类型检查
编译器需要检查代码中的类型 错误,并将其转换为中间代码 表示形式。
处理语义错误
编译器需要对语义错误进行处 理,如输出错误消息或修复错 误。
中间代码生成
中间代码表示形式
编译器需要将语法树转换为中间代码表示形式,以 便进行后续优化可以使用各种技术进行中间代码的生成和优 化,如常量折叠、复写传播等。
语法分析
1 目的和原理
将词法单元组成的序列转换为语法分析树或语法树,以便进一步分析和转换代码。
2 生成语法规则
编译器需要根据语法规则生成语法分析树,以便进一步处理和转换代码。
3 生成语法树
编译器需要将语法树转换为中间代码表示形式,以便进一步优化和转换代码。
语义分析
目的和原理
检查代码中的语义错误,如类 型不匹配、未定义的变量等, 并生成符号表以便后续处理。

编译原理(1)50页PPT

编译原理(1)50页PPT

编译程序
将一种语言书写的程序翻译成另一种语 言的等价的程序。 编译程序的输入对象称为源程序。 编译程序的输出对象称为目标程序。
高级语言程序的处理过程
常用的翻译工具有3种
根据被翻译语言与执行方式的不同 1.汇编程序
用于特定计算机上的汇编语言的翻译程序。
2.编译程序 3.解释程序
对源程序进行翻译的程序
sum = first+count*10
id1∶=id2+id3*10 四元式(运算符,运算对象1,运算对象2,结果)
5.中间代码优化
任务:通过调整和改变中间代码中某些 操作的次序,最终产生更加高效率的目 标代码 优化所依循的原则是程序的等价变换规 则 其方法有:公共子表达式的提取、循环 优化、删除无用代码等。
任务:扫描源程序,根据语言的词 法规则,分解和识别出每个单词, 并把单词翻译成相应的机内表示。 单词是语言中最小的语义单位 在词法分析阶段工作所依循的是语 言的词法规则。描述词法规则的有 效工具是正规式和有限自动机。
Pascal源程序片断
position := initial + rate * 60
二.编译程序概述
源程序 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
目标程序
英译与编译的比较
1.识别出句子中的一个个单 1.词法分析 字
2.分析句子的语法结构
2.语法分析
3.初步翻译句子的含意
3.语义分析中间代码 生成
4.译文修饰
4.优化
5.写出最后译文
5.目标代码生成
1.词法分析
表格与表格管理
编译过程中源程序的各种信息被保留在 种种不同的表格里,编译各阶段的工作 都涉及到构造、查找或更新有关的表格, 因此需要有表格管理的工作

编译原理第1章

编译原理第1章

编译原理第1章第一章编译概述2.典型的编译程序可划分为几部分?各部分的主要功能是什么?每部分都是必不可少的吗?答:编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

各部分的主要功能如下:词法分析程序又称扫描器。

进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单元,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数;语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类;语义分析的功能是确定源程序的语义是否正确;中间代码生成程序的功能是将源程序生成一种更易于产生、易于翻译成目标程序的中间代码;代码优化程序的功能是将中间代码中重复和冗余部分进行优化,提高目标程序的执行效率;目标代码生成程序的功能是将中间代码生成特定机器上的机器语言代码;符号表管理程序的功能是记录源程序中出现的标识符,并收集每个标识符的各种属性信息;错误处理程序的功能是应对在编译各个阶段中出现的错误做适当的处理,从而使编译能够继续进行。

编译程序的每部分都是必不可少的。

3.解释方式和编译方式的区别是什么?答:解释方式最终并不生成目标程序,这是编译方式与解释方式的根本区别。

解释方式很适合于程序调试,易于查错,在程序执行中可以修改程序,但与编译方式相比,执行效率太低。

4.论述多遍扫描编译程序的优缺点?答:优点:(1)可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个子程序,各遍程序可以相互覆盖;(2)可使各遍的编译程序相互独立,结构清晰;(3)能够进行充分的优化,产生高质量的目标程序;(4)可将编译程序分为“前端”和“后端”,有利于编译程序的移植。

缺点是每遍都要读符号、送符号,增加了许多重复性工作,降低了编译效率。

编译原理-第一章

编译原理-第一章
第一章 引论
本章主要介绍为什么需要编译程序以及编译程序的功 能、体系结构、工作过程、组织方式,编译程序与高级程 序设计语言的关系,以及编译自动化和并行编译程序等方 面的基本知识。
1.1 翻译程序
1.1.1 程序设计语言 介绍了程序设计语言的发展
1.1.2 翻译语言 翻译程序将高级语言编写的程序翻译成机器语言
1. 自动产生编译程序的“编译程序的编译程序” (Compiler-Compiler)。只要给出某一高级程序语 言的语法规则和语义描述,这类程序就能自动地生成 相应语言的编译程序。
2. 面向语法的符号加工程序。这类程序比较通用。 3. 由可扩充语言组成的集合。这类TWS允许程序员利用
已有的数据类型和语句去定义新的数据类型和语句。
编译总控
Comp1



Comp1
覆盖
Comp2


Compn
扫描对象
部分处理结束
加工 结果
输入 对象
编译程序组织方式
1.6 编译程序的其他有关技术
❖ 编译程序的自展技术 ❖ 编译程序的移植 ❖ 编译程序的自动化 ❖ 程序的可再入性
编译程序的自展技术
按照自展技术,需要把源语言L分解成一个核心部分L0 与扩充部分L1,L2,…,Ln。
编译程序的自动化
❖ 在编译程序自动化进程中,开发早且应用广泛的 是词法分析程序生成器和语法分析程序生成器。
❖ 词法分析程序生成器:LEX(详见第13章)。它输入的是
正规表达式,输出的是词法分析程序。LEX的基本思想是由正规表 达式构造有穷自动机。
❖ 语法分析程序生成器:基于LALR(1)文法的YACC(Yet
1.5 编译程序的组织方式

编译原理(第一章)

编译原理(第一章)

语法分析器通常采用自顶向下的分析 方法,从源代码的起始位置开始,逐 步向下解析,直到找到完整的语法结 构或遇到语法错误。
语法分析是编译器的基础,它决定了 源代码的结构和含义,并为编译器提 供了理解和处理源代码的框架。
语法分析的任务
确定词法单元
语法分析器需要将源代码分解 成一个个的词法单元或符号, 如关键字、标识符、运算符等
对优化后的代码进行评估,包括性能测试、空间占用测试 等,以确定优化的效果是否达到预期目标。
THANKS FOR WATCHING
感谢您的观看
优化的分类
根据优化涉及的方面不同,优 化可以分为局部优化和全局优 化。
局部优化是指在单个函数或代 码块范围内进行的优化,通常 关注单个语句或表达式的优化。
全局优化是指在程序的全局范 围内进行的优化,通常关注函 数或模块之间的优化,以提高 整个程序的性能。
优化技术
在此添加您的文本17字
常见的优化技术包括常量折叠、死代码消除、循环展开、 循环优化、函数内联等。
在此添加您的文本16字
常量折叠是指在编译过程中将常量表达式的结果进行计算 并替换掉原来的表达式,以减少程序运行时的计算量。
在此添加您的文本16字
死代码消除是指删除程序中永远不会被执行到的代码,以 减少程序的空间占用和提高程序的运行效率。
在此添加您的文本16字
循环展开是指将循环体中的代码复制到循环外部,以减少 循环次数和减少循环开销。

识别语法结构
语法分析器需要识别出源代码 中的各种语法结构,如表达式 、语句、程序等。
建立语法树
语法分析器需要将识别的语法 结构按照一定的规则组织起来 ,形成一棵语法树。
语义检查
语法分析器在识别语法结构的 同时,还需要进行一些语义检 查,如类型检查、变量声明等

编译原理第1章

编译原理第1章

【学习目标】◇ 明确编译程序的功能及其在计算机系统中的 作用。

◇ 了解源语言程序被编译为目标程序的整个过 程,这个过程一般划分为哪些阶段。

◇ 知道编译技术可用于哪类软件的设计和开发。

编译概述12【学习指南】编译程序是现代计算机系统的基本组成部 分之一。

编译程序一般由词法分析程序、语法 分析程序、语义分析程序、中间代码生成程序、 目标代码生成程序、代码优化程序、表格管理 程序和出错处理程序等成分构成。

通过课程的 学习应掌握各个成分的功能和设计原则,以及 在编译阶段的逻辑关系。

理解他们怎样作为一 个整体完成编译任务的。

知识体系 功能 翻译途径 翻译程序 编译方式 解释方式【难重点】应该说,本章没有难以理解的内容,主要对 编译程序的功能和结构做一综述。

3词法分析程序 语法分析程序 解释程序 语义分析程序 组成 中间代码生成程序 分类 中间代码优化程序 目标代码生成程序 表格管理程序 编译程序 出错处理程序 结构 单遍扫描的编译程序 4 多遍扫描的编译程序本章内容﹣什么是编译 ﹣编译过程概述 ﹣编译阶段的组合:通过描述编译程序的 各个阶段来介绍编译这个课题 ﹣构造编译程序的工具1.1 什么是编译程序一、程序设计语言的基础知识1、程序:一系列指令或语句,用来描述计算机依次要执行的一系列工作。

2、结构:基本符号(字母、数字、符号等)→单词(符号)→量(语法单位)→表达式→语句→分程序→程序3、程序设计语言的定义(指高级程序设计语言)分语法、语义和语用三部分。

§ 语法是描述程序的结构,根据它可以产生正确的程序。

§ (词法规则、语法规则) § 语义是语言成分的含义,由程序执行的效果来说明。

§ 语用:语言的实际应用。

如: x:=a+b*c56二、翻译和编译 § 什么是翻译程序– 翻译程序指的是这样一个程序,它能够把某 一种语言程序(源语言程序)改造成另一种语 言程序(目标语言程序),而两者在逻辑上是 等价的。

编译原理第1章

编译原理第1章

功能:依据源语言的语法规则把源程序的单词序列组成语法短语
(表示成分析树/语法树)。
17
What is a Grammar?

语法分析所依据的是语言的语法规则,文法是规则的集合,它们 支配了tokens 中的相互依赖和结构。

语言的语法规则通常是由递归规则来定义,如上述例子中表达式 和语句可由下述递归规则来定义:
t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1= t3
25
Phase 5. Code Optimizer (代码优化)

代码优化的任务是:对产生的中间代码进行等 价变换,使生成的目标代码更为高效(时间和 空间)。优化的目的主要是提高运行效率,节 省存储空间。优化主要有两类,一是与机器有 关的优化,主要设计如何分配寄存器,如何选 择指令,这类优化是在生成目标代码时进行的; 另一类优化与机器无关,主要是对中间代码的 优化。主要有局部优化、循环优化等。
语义审查---上下文相关性、类型匹配、类型转换
例:
void p(); float: rate; void initial(); … position = initial + rate * 60 /* error */ /* error */ /* warning */; …
21
= position initial rate + * 60 position
19
(initial) <id,3> (rate) 树的结点是利用该语言的文法来建造的
语法树是分析树的一种压缩表示
=
position
+
* rate 60

编译原理_第1章(清华大学)

编译原理_第1章(清华大学)

语义分析
语义审查(静态语义)
上下文相关性 类型匹配 类型转换
例: Program p(); Var rate:real; procedure initial; … position := initial + /* error */ /* error */ …
rate * 60 /* warning */;
编译程序结构(components) 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序 出错处理程序
词法分析程序
语法分析程序
表 格 管 语义分析程序 中间代码生成程序 出 错 处

代码优化程序
功能:层次分析.依据源程序的语法规则把源程序 的单词序列组成语法短语(表示成语法树).
position := initial + rate * 60 ; 规则 <赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
又如: int arr [2],abc; abc = arr * 10;
… Program p(); Var rate:real; Var initial :real; Var position :real ; … position := initial +

编译原理第一章_介绍

编译原理第一章_介绍

(1) (inttoreal 60 -
t1 )
(2) ( *
id3 t1 t2 )
(3) ( +
id2 t2 t3 )
(4) ( :=
t3 -
id1 )
变换
(1) ( * id3 60.0 t1 )
( 2)( + id2 t1 id1 )
31
1.3 编译程序的工作过程
1.3.5 代码生成
如果语义分析时把源程序表示成中间形式 而不是表示成目标指令,则由本部分完成从中 间形式到目标指令的转换。如果语义分析时, 已直接生成目标指令,则无需另外再做代码生 成工作。
)
Andrew W. Appel Modern Compiler Implementation in
Java, CambridgeUniversity Press, 2002. 2nd Ed. (Tiger Book,
虎书)
Michael L. Scott Programming Language Pragmatics, Second Edition,Morgan Kaufmann, 2005. (中译本: 《程序设计语言:实践 之路》裘宗燕,电子工业出版社)
6
第一章 引 论
本节内容: 翻译程序 为什么需要编译程序 编译程序的工作过程 编译程序的结构 编译程序的组织方式 编译程序的其它有关技术 ……
7
编译程序在计算机系统中的位置
分类
– 软件 – 系统软件 – 语言处理系统
编译系 统 操作系统
裸机
8
1.1 程序的翻译
1.1.1 程序设计语言 机器语言 001110010010 汇编语言 add R1 2 高级语言 begin x:=9+2 end

编译原理第一章

编译原理第一章

第一章概述1.1 编译程序的概念计算机硬件的最核心部件是CPU(Computer Processor Unit)即中央处理器,CPU能够执行的指令是二进制形式的指令即机器指令,机器指令的集合称机器语言。

用机器指令书写的程序可以说无法阅读,程序设计的效率极低甚至可以说无法进行程序设计。

机器指令的助记符形式称汇编指令,比如MOV是数据传送指令,助记符形式的汇编指令的集合称汇编语言。

汇编语言的出现使得程序设计的效率有所提高,即使现在,汇编语言仍是编制设备驱动程序的重要工具。

但是,汇编语言书写的程序不能直接在CPU中运行,需要汇编程序(Assembler)把汇编语言书写的源程序(Source Program)汇编成机器语言程序才能在CPU中运行。

汇编的过程可以用下图表示:(源程序)(目标程序)汇编语言与机器语言类似,仍然依赖于计算机,使用起来繁琐、易出错、可读必差、缺乏通用性,因此面向过程的高级语言、面向对象的高级语言相继出现了。

例如面向过程的高级语言:Basic、Pascal、Fortran、C语言等等;面向对象的高级语言Visual Basic、Visual C++、Delphi、PowerBuilder等等。

把高级语言翻译(Translator)成汇编语言程序或机器语言程序的程序称为编译程序(Compiler)。

汇编语言与机器语言亦称低级语言。

对高级语言书写的源程序进行编译的过程可以用下图表示:编译程序翻译目标程序(Object Program)一般指低级语言程序。

综上所述,可以看出编译程序在计算机系统中的重要地位。

不同的高级程序设计语言需要不同的编译程序,同一种高级程序设计语言在不同的计算机上需要不同的编译程序。

有了编译程序,程序设计人员就不需要考虑与计算机硬件有关的绝大部分甚至全部细节,使程序设计独立与计算机,即同一个高级语言源程序可以在不同的计算机上运行。

在计算机上运行一个高级语言源程序一般分为两步:第一步是通过编译程序把源程序翻译成目标程序;第二步是运行或称执行目标程序。

编译原理(第1章)

编译原理(第1章)
int a,b,c; a=1234h; b=5678h; c=a+b; return 0;
翻译程序
机器只能理解和执行机器语言.高级语言需转换成机器 语言才能执行.如何转换?
▪ 翻译 ▪ 解释
翻译程序:是指能够把某种语言的程序(源语言程序) 转换成另一种语言的程序(目标语言程序),而后者 与前者在逻辑上是等价的。
为什么要学习编译原理
编译程序构造是计算机学科中一个非常成功 的分支,也是最早获得成功的分支;
编译原理蕴涵着计算机学科中解决问题的思 路、抽象问题和解决问题的方法;
编译原理课程的学习有利于加深对程序语言 的理解,可以帮助你更加快速的掌握新的语 言工具;
课程中包含了很多软件技术,程序设计语言 编译程序构造的基本原理和实现方法是软 件的核心技术之一,这对于以后从事软件设 计是很有帮助的.
第一种情况:
初始数据

源程序
译 程
高级语言 序
程序
机器语言 目标程序
运行系统
结果
编译阶段
运行阶段
编译原理
18
第二种情况:
初始数据

源程序
译 程
高级语言 序
程序
编译阶段
汇编 汇 语言 编 目标 程 程序 序
机器 语言 目标 程序
结果
运行系统
汇编阶段
运行阶段
编译原理
19
1.2 编译程序的基本结构
例:将英文句子 “I wish you success ” 翻译成中文句子的大致过程是:
例如 float r,h,s;
s = 2*3.1416*r*(h+r);
编译原理
28
单词符号串 s=2*3.1416 * r *(h+r) 中,“s” 是<变量>,单词符号串

编译原理文档第一章

编译原理文档第一章

编译原理第一章编译程序概论使用过计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。

在计算机上执行高级语言程序一般分为两步:第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求得计算结果。

计算机语言由单一的机器语言发展到现今内容迥异的数千种高级语言,就是因为有了编译技术。

因此,对于计算机专业的学生来说,理解编译程序的工作原理显得尤其重要。

本章重点:编译程序概念、编译过程概述、编译程序的结构。

第一节什么是编译程序通常所说的翻译程序是指这样的一个程序,它能够把某一种语言(称为源语言)改造为另一种语言(称为目标语言),而后者与前者在逻辑上是等价的。

如果源语言是诸如FORTRAN、PASCAL、ALGOL或COBOL这样的“高级语言”,而目标语言是诸如汇编语言或机器语言之类的“低级语言”,这样的一个翻译程序就称为编译程序。

第二节编译过程概述编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

从概念上来说,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的,图1-2-1给出了一个编译过程的各个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。

图1-2-1中将编译过程划分成了词法分析、语法分析、中间代码生成,代码优化和目标代码生成六个阶段,我们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。

编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作。

如果编译过程中发现源程序有错误,编译程Array序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可有小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

表达式
* r h
表达式
表达式
*
பைடு நூலகம்
+
r
2
*
3.1416
赋值语句s= 2*3.1416*r*(h+r) 的语法树
教学进度
三、语义分析与中间代码生成:分析语法范畴 计算机科学与工程系 的含义,并进行初步翻译(产生中间代码)
中间代码:一种含义明确、便于处理的记号系 统,通常独立于具体的硬件系统。与机器指令 较接近,易于转换成机器指令。
先编译,后执行 解释程序:边转换边执行,不生成目标代码
教学进度
编译程序(Compiler)的功能
计算机科学与工程系
把高级语言程序翻译成等价的低级 语言 程序。 源 程 序
编译程序 (Compiler)
目 标 程 序
教学进度
1.2 编译过程和编译程序的结构
计算机科学与工程系
编译过程一般可分为五个阶段: 一、词法分析 二、语法分析 三、语义分析与中间代码生成 四、优化 五、目标代码生成
计算机科学与工程系
教学进度
二、语法分析:把单词符号串组合成各类语法 计算机科学与工程系 单位
<标识符, s> < 算符, = > <常数 , 2> < 算符,*> <常数 , 3.1416> < 算符,*><标识符,r> < 算符,*> <分界符,( > <标识符, h> < 算符,+> <标识符,r> <分界符,) >
M=J; t=K-J; for (i=1; i<=100;i++) { M=M+10; } N=t+M;
教学进度
五、生成目标代码:将中间代码变换成特定机 计算机科学与工程系 器上的低级语言代码
t2 = 6.28*r; t3 = h +r; s = t2*t3;
mov mul mov mov add mov mov mul mov
教学进度
计算机科学与工程系
1.3 编译程序的生成
编译程序自动生成工具:LEX、YACC; 自编译技术
移植生成编译器技术
并行编译技术
教学进度
计算机科学与工程系
思考题:
1、含有优化部分的编译程序的执行效率高。 2、C语言的编译程序可以用C语言来编写。
教学进度
计算机科学与工程系
S I
T
C A J A 已有 A 要求 A
h
s
变量
变量
float
float
1
1
d+4
d+8
教学进度
错误的诊查处理
计算机科学与工程系
• 编译程序在各个阶段应诊断和报告源程 序中的错误,包括词法错误,语法错误, 语义错误。 • 编译程序应报告出错地点,并给出简明 准确的提示信息。
教学进度
遍:
计算机科学与工程系
遍(PASS): 对输入文件(源程序或其等价的
计算机
执行 二进制代码 汇编指令
教学进度
计算机科学与工程系
第一章
• • • •
编译概述
编译的概念 编译过程 编译器的逻辑结构 编译器的生成
教学进度
1.1 编译的基本概念
计算机科学与工程系
翻译程序:将一种语言程序(源)转换成另 一种语言程序(目标),两者在逻辑上是等 价的。 如果源语言是高级语言,目标语言是低级语 言,则称为编译程序。
课程知识点前后关联很紧密,一定要紧跟进度。
教学进度
课程介绍:
计算机科学与工程系
编译原理是计算机各专业的重要专业基 础课,是一门涉及设计和构造编译程序的一 般原理、基本方法和主要实现技术的课程。 内容主要包括:高级语言的形式化、词法分 析方法、语法分析方法、语法制导翻译技术、 优化技术等。
学习指导:《少走弯路:学习编译原理的相关建议 》 /pcedu/empolder/life/0504/597581.html
计算机科学与工程系
编译原理 (Compiler Construction)
主讲:方凤美 85280320-505 信息学院505 ffmscau@ bianyiscau@ 09xr2011
教学进度
关于编译原理课程
到底学什么? 为什么要学? 怎么学?
计算机科学与工程系
中间代码可用四元式、三元式、间接三元式、 逆波兰式、树形表示等
教学进度
赋值语句经语义分析生成语义树
计算机科学与工程系
例赋值语句s= 2*3.1416*r*(h+r)经语义分析生成语义树如下
= s * * 2 3.1416
教学进度
* + r h
r
生成中间代码 t1 = 2*3.1416; t2 = t1*r; t3 = h +r; t4 = t2*t3; s = t4;
教学进度
教材与参考资料:
计算机科学与工程系
教材:编译原理(第三版) 刘铭 徐兰芳 骆婷 编 电子工业出版社 ISBN 978-7-121-12938-4 参考教材: 1.程序设计语言编译原理(第三版) 陈火旺 等编著 国防工业出版社 2.编译原理(Alfred V.Aho等 著) 李建中等译 机械工业出版社
J
A C C
A
J
A A
A
教学进度
计算机科学与工程系
S I
2 1
T 已有 C A
A
C
B
要求
B
C B
B C C A A A
C
B B
B
C
C C
教学进度
中间形式)从头到尾扫描一遍,并完成预定处理 工作的过程。 将编译程序组织成若干遍
输入文件 输出文件

教学进度
1.3 编译程序的生成
源 程 序
计算机科学与工程系
编译程序
目 标 程 序
构造一个编译程序必须掌握: 源语言 目标语言 编译方法 编译器实 现语言
用机器语言或汇编语言来构造编译程序;
用高级语言来构造编译程序
计算机科学与工程系
四、优化:产生更高效的代码
t2 = 6.2832*r; t3 = h +r; s = t2*t3;
教学进度
四、优化:产生更高效的代码
计算机科学与工程系
for (i=1; i<=100;i++) { M=J+10*i; N=K+10*i; }
M=J; N=K; for (i=1; i<=100;i++) { M=M+10; N=N+10; }
除了五个功能模块,一个完整的编译程序还 包括:表格管理和出错处理。
表格与表格管理 表格,记录源程序的各类信息和编译各 阶段的进展状况。 符号表:记录名字及其属性。 编译各阶段都涉及到构造、查找或更 新有关的表格。
计算机科学与工程系
教学进度
计算机科学与工程系
符号表 名字 r 种类 变量 类型 float 层次 1 偏移量 d
表 格 管 理
优化器
语法范畴
出 错
语义分析与中间 代码产生器
中间代码
源 代 码 识 别 阶 段
中间代码 目标代码生成器
处 生目 成标 理 阶代 段码
目标代码
教学进度
计算机科学与工程系
编译前端与编译后端 把编译程序划分为编译前端和编译后端
源程序
前 端
中间代码
后 端
目标代码
仅依赖源语言
仅依赖目标语言
教学进度
(即s= 2*3.1416*r*(h+r) ) 识别2*3.1416*r*(h+r)为表达式
识别s= 2*3.1416*r*(h+r)为赋值语句
词法分析是线性分析, 语法分析是一种层次结构分析
赋值语句经语法分析生成语法分析树
教学进度
赋值语句经语法分析生成语法分析树
赋值语句
计算机科学与工程系
s
=
表达式
AX , r ; t2 , AX , AX , t3 , AX , t3 ; s , AX;
6.28 ; AX ; h ; r ; AX ; t2 ;
教学进度
编译程序的逻辑结构
计算机科学与工程系
编译程序总框 按编译过程五阶段的任务划分模块得出 编译程序总框如下图:
教学进度
源程序
词法分析器 单词符号 语法分析器 计算机科学与工程系
教学进度
计算机科学与工程系
例如,有源程序段如下:
float r,h,s; s= 2*3.1416*r*(h+r);
教学进度
一、词法分析:识别出源程序中的一个个单词符号 <保留字,float> <标识符,r> <分界符, , > <标识符, h> <分界符,, > <标识符, s> <分界符,; > <标识符, s> float r,h,s; < 算符, = > <常数 , 2> s= 2*3.1416*r*(h+r); < 算符,*> <常数 , 3.1416> < 算符,*> <标识符,r> < 算符,*> <分界符,( > <标识符, h> < 算符,+> <标识符,r> <分界符,) > <分界符,; >
图片
教学进度
计算机科学与工程系
教学进度
相关文档
最新文档