第1章 编译概论

合集下载

第1章 编译程序概论

第1章 编译程序概论

5
基本概念
机器语言:能够被计算机的硬件系统直 机器语言: 接执行的指令程序。 接执行的指令程序。 汇编语言:将硬件指令用一些助记符表 汇编语言: ADD表示加法操作 SUB表示减 表示加法操作, 示。如ADD表示加法操作,SUB表示减 法操作等等 高级语言:使用便于理解的自然语言。 高级语言:使用便于理解的自然语言。
编译原理
1
本课程学习任务
编译原理课程以介绍程序设计语言编译程序构造 的基本原理和设计方法为教学目标。 的基本原理和设计方法为教学目标。通过本课程 的学习, 的学习,一方面使学生掌握和理解编译系统的结 构、工作流程以及编译程序各组成部分的设计原 理和实现技术,获得分析、设计、实现和维护编 理和实现技术,获得分析、设计、 译系统的初步能力;另一方面, 译系统的初步能力;另一方面,通过学习编译的 理论和方法,提高学生对程序设计语言、 理论和方法,提高学生对程序设计语言、操作系 统、计算机原理和体系结构等课程知识的综合理 解。
6
语言处理程序
解释程序( 解释程序(器):接受某种语言源程序,然后 接受某种语言源程序, 直接解释执行源程序。 直接解释执行源程序。 编译程序(器):接受某种语言的源语 言程序后, 言程序后,将它改造成另一种逻辑上等价的目 标语言程序。 标语言程序。
7
需预处理的源程序 预处理程序 源程序 编译程序 目标汇编程序 汇编程序 可再装配的机器代码 装配/连接编辑程序 装配/ 绝对机器代码
3
教材
教材: 教材: 编译原理》, 》,张素琴 等编著, 《编译原理》,张素琴 等编著,清华大学出版社 参考书目: 参考书目: 编译程序设计原理》 等编著, 《编译程序设计原理》, 杜淑敏 等编著, 北京大学 出版社 编译原理教程》, 》,胡元义 等编著, 《编译原理教程》,胡元义 等编著,西安电子科技 大学出版社 相关知识:程序设计语言、计算机组成原理、数 相关知识:程序设计语言、计算机组成原理、 据结构、汇编语言、离散数学、操作系统等。 据结构、汇编语言、离散数学、操作系统等。

01第01章 编译概述

01第01章 编译概述

add $x, $a, $b Loop: slt $_t1, $y, $z beq $_t1, 1, where_true j where_false where_true: add $y, $x, $y j Loop where_false: …
School of Information and Software Engineering Zhou, Erqiang
6
引言
程序设计语言
编写一个高级语言的编译或解释程序
对该语言的实现
编译还是解释?
Pascal、C/C++、Object-C、Java、C#、Go
编译的:Fortran、Vala 解释的:Python、JavaScript、PHP等
School of Information and Software Engineering
中间代码生成
Loop: if y < z goto where_true; goto where_false; where_true: t1 = a + b; x = t1 t2 = x + y; y = t2 goto Loop; where_false: …
School of Information and Software Engineering Zhou, Erqiang
词法分析 语法分析 语义分析
中间代码生成
中间代码优化 目标代码生成
目标代码优化
18
目标代码生成
while (y < z) { int x = a + b; y += x; }
add $x, $a, $b Loop: slt $_t1, $y, $z beq $_t1, 1, where_true j where_false where_true: add $y, $x, $y j Loop where_false: …

CH01--编译概述

CH01--编译概述
插入转换符的语法树
total:=total+rate*4 的各分析步骤及其中间结果
total:=total+rate*4
词法分析
id1:=id1+id2* 4
语法分析
:=
id 1
+
id 1
*
id 2
4
语义分析
:=
id 1
+
id 1
*
id 2
inttoreal
4
二、综合阶段
任务:根据所制定的源语言到目标语言的对应关系, 对分析阶段所产生的中间形式进行综合加工,从而 得到与源程序等价的目标程序。
二、翻译程序
翻译程序扫描所输入的源程序,并将其转换为目标 程序,或将源程序直接翻译成结果。
源程序
翻译程序
目标程序或执行结果
编译器(即编译程序):把源程序翻译成目标程序的 翻译器
解释器(即解释程序):直接执行源程序的翻译器
编译程序
源程序是用高级语言或汇编语言编写的,目标程序 是用目标语言表示的。
编译程序的设计涉及到的知识:
–程序设计语言 –形式语言与自动机理论 –计算机体系结构 –数据结构 –算法分析与设计 –操作系统 –软件工程等
1.1 翻译和解释
一、程序设计语言 二、翻译程序
一、程序设计语言
低级语言
–机器语言 –符号语言 汇编语言
高级语言
–过程性语言—面向用户的语言 如:C、Pascal –专用语言—面向问题的语言 如:SQL –面向对象的语言 如:Java、C++
一、分析阶段
任务:根据源语言的定义,对源程序进行结构分析 和语义分析,从而把源程序正文转换为某种内部表 示。

编译原理chapter1 编译概述

编译原理chapter1 编译概述


首先研究源程序的语法和语义及运行模
型,源是设计编译程序的出发点。
研究目标计算机,设计目标代码的指令 系统,它是由目标计算机扩充而成,扩 充后的计算机称作抽象计算机。目前的
通用计算机往往和源语言执行模型不一致。。
16
教和学的几个问题
重要性:处理字符串的一般方法;构造 大程序的方法;实用;研究课题:新的 语言及实现技术;并行编译技术。 学习方法 :(1)源程序是源泉;(2) 把每个阶段放到整个编译程序背景中学 习;(3)认真做作业。 每周有一次答疑。 参与网上教材的修改与创新。
仅依赖目标计算机
遍(PASS): 对输入文件(源程序或其等价
的中间形式)从头到尾扫视,完成预定的处
理。
输入文件
输出文件

14
把前端组织成一遍扫描
错误的诊查处理
语法分析
源 程 序
词法 分析
语义分析和
中间代码生成
中 间 代

符号表管理 15
设计编译程序应首先研究的问题


程 序
编译程序
标 程
抽 目标 象
1d
b 变 量 real
1 d+4
c 变 量 real
1 d+8
12
错误的诊查处理
编译程序在各个阶段应诊断和报告源程 序中的错误,包括词法错误,语法错误, 语义错误。 编译程序应报告出错地点,并给出简明 准确的提示信息。
13
编译程序(器)的组织
前端和后端
源程序 前 中间代码 后


目标代码
仅依赖源程序
Techniques, and Tools, AddisonWesly,1986 。

第1章编译程序概论

第1章编译程序概论
第1章编译程序概论
第1页,共35页。
第一章 编译程序概论
第2页,共35页。
本章学习目标
❖ 编译程序是高级语言的支撑基础,是计算机 系统中重要的系统软件之一,本章主要内容:
❖ 编译程序的功能 ❖ 编译程序的体系结构 ❖ 编译程序的工作过程 ❖ 编译程序的设计
第3页,共35页。
1.1 程序设计语言
第13页,共35页。
❖ 例如,用C 语言编写的程序段如下:
❖ main( )
❖{
❖ float x=2,y=3,s;

s=x+y*5;
❖}
❖ 识别出的单词序列为表1-1所示
第14页,共35页。
表1-1词法分析程序
类型名 保留字 右括号 保留字 等号 逗号 等号 逗号 分号 等号 运算符 运算符 分号
第31页,共35页。
❖ 编译程序一般包括词法分析程序、语法分析程序、语义分析程序、中 间代码生成程序、代码优化程序、目标代码生成程序和出错处理程序 等。
❖ 编译过程可以分遍编译。编译程序的构造有多种技术。主要有自编译、 移植、交叉编译、自展和自动化技术。
❖ LEX是一个具有代表性的词法分析程序生成器。YACC是一个基 于LALR(1)分析法的语法分析程序生成器。
第25页,共35页。
❖ 3.编译程序的自展技术 ❖ L=Ln…L1L0图1-4编译系统的自展过程 ❖ 自展的方法是:首先确定一个非常简单的核
心语言L0,然后用机器语言或汇编语言书写 它的编译程序T0;再把语言L0扩充到L1,此时 有然L后0属再于把L语1,言并L1用扩L充0编为写L2出,L此1的时编,译L1程属序于TL12,, 并用L1编写L2的编译程序T2,……这样不断的 扩展下去,直到完成所要求的编译程序为止。 自展技术的使用如图1-4所示。

编译(第1章:编译程序概论)

编译(第1章:编译程序概论)

§1.1 什么是编译程序
可再装配的obj文件: --------------------…… 调用sin子程序 …… 调用printf子程序 …… ----------装 配 / 连 接 程 序
函数子程序库
连 接
Sin 字程序
Printf 子程序 生成exe文件
装配 连 接
Sin() Cos() … Scanf() Printf() …
9
§1.2 编译过程和编译程序的结构概述--编译过程概述
3.词法检查:检查词法错误(主要是检查单词中使用了 非法字符错误) 例如:beg#n @nd ~ ^ 10$ 等等 4.删除空白符、注释等 ☉语法分析 任务:1.对单词(机内符)序列进行分析,组合分解出各 类语法单位(语法短语) 例如:用id代表标识符,则有:
11
§1.2 编译过程和编译程序的结构概述--编译过程概述 ☉语义分析 任务:检查(静态)语义错误,提取语义信息。 其中:语义错误分为静态和动态两种. 静态语义错误:在编译期间可以检查的语义错误 例如:int *px,*py,i; … px+py …; //两个运算对象类型不相容 … a[i] …; //a没有声明 goto loop; //loop没有定义 等等(即独立的观察一条语句看不出的错误) 动态语义错误:在目标程序运行时才可以检查的语 义错误。 例如:sqrt(x) //当x为负数时 1/x //当x为0时 fopen(pf,”r”) //文件如果不存在 语义信息包括:标识符的“种类”、“类型”等信息 12
11.标识符 12.赋值号 13.标识符 14.加号 15.标识符 16.乘号 17.整数 sum := first + count * 10 表达式 id1:=id2+id3*10

第1章-编译概述

第1章-编译概述

解释器
程序规模 规模较大
中小规模
内部形式 机器代码(低级) 数据结构(高级)
运行机构 硬件CPU
软件系统
运行速度 相对较快
相对较慢
2. 编译器的功能分解和组织结构
表处理





































错误处理
2. 编译器的功能分解和组织结构
编译器的前端:一般包括词法分析、语法分析、 符号表构造、语义分析、中间代码生成、代码 优化和错误处理等。此部分工作的特点是不依 赖于具体机器。
编译原理
第一章 编译概述
编译器和解释器 编译器的功能分解和组织结构 编译器的伙伴程序 编译器的实现途径 编译技术的作用
1. 编译器和解释器
程序设计语言的历史 机器语言:能够被计算机的硬件系统直
接执行的指令程序。 汇编语言:将硬件指令用一些助记符表
示。如ADD表示加法操作, SUB表示减法操作等等 高级语言:使用便于理解的自然语言。
移植法
同一语言的编译器在不同机器间的移植。方法:
a 目标代码的转换 b 修改中间代码到目标代码的转换
自展法 工具法 理论法
自我扩展,自己编写自己的编译器。
利用编译阶段各个部分的自动生成工具自动生成。 利用形式化描述理论,实现自动化。
5. 编译技术的作用
理解语言,编写出高效的代码 灵活设计实现自定义语言 提高软件设计技术 应用于涉及元级操作的实现 其它领域

编译原理第一章编译概述

编译原理第一章编译概述
符号表、常数表、标号表、分程序入口表、中 间代码表、过程引用表、循环特征表、等价名 表、公用链表、格式表 • 表格的结构大体如下:

name(名字)
information(信息)
25

8、出错处理
• 错误可发生在编译的各个阶段,错误处理也是
贯穿编译全过程。
• 词法:拼写…… • 语法:语句结构、表达式结构…… • 语义:类型不匹配…… • 在编译时查出的,叫Comple-time error,在运 行时表现才表现出来的错误叫Run-time error。
要在某机器上为某种语言构造一个编译程 序,必须掌握下面的内容: 1、源语言:构词规则、语法、语义。 2、目标语言:对于机器指令,搞清硬件的 系统结构和OS的功能。 3、编译方法:必须掌握1-2种。 4、语言选择:编制程序。
34
一个好的编译程序应该: 全 准 局部化 最大限度发现错误 准确指出错误的性质和发生地点 将错误的影响限制在尽可能小的范围内
【难重点】
应该说,本章没有难以理解的内容,主要对编 译程序的功能和结构做一综述。
3
知识体系
功能
编译方式 翻译途径 解释方式
翻译程序
词法分析程序 语法分析程序 解释程序 语义分析程序 组成 中间代码生成程序 分类 中间代码优化程序 目标代码生成程序 编译程序 表格管理程序 出错处理程序 单遍扫描的编译程序 结构 多遍扫描的编译程序
中 间 代 码 生 成
优 化
目 标 代 码 生 成 器 综合
目 标 代 码
11
二、编译程序的各个部分

1、词法分析
• 输入源程序,对构成源程序的字符串从左到右一 个字符一个字符地进行扫描和分解,依据词法规 则(或构词规则)识别出一个个的单词(单词符号或 符号),转换成机器容易识别的内码形式。 • 内码用二元式(种别码,属性值)表示。 • 输入:字符串 • 输出:(种别码,属性值)——序对 属性值——单词的机内表示

编译原理chapter1 编译概述

编译原理chapter1 编译概述

精品文档
7
赋值语句经语法分析生成分析树
赋值语句
变量 a
:= 表达式
表达式
+



* 因子
因子 因子
60
b
c
精品文档
8
赋值语句经语义分析生成语法树
:=
a
+
b
*
c
inttoreal
精品文档
60 9
生成中间代码
temp1:=inttoreal(60); temp2:=c * temp1; temp3:=b +temp2; a :=temp3;
仅依赖源程序 仅依赖目标计算机
遍(PASS): 对输入文件(源程序或其
等价的中间形式)从头到尾扫视,完成
预定输的入处文理件。

输出文件
精品文档
14
把前端组织成一遍扫描
错误的诊查处理
语法分析
源 程 序
词法 分析
语义分析和 中间代码生 成
中 间 代 码
符号表管理
精品文档
15
设计编译程序应首先研究的问题


程 序
编译程序
标 程
抽 象目标

首先研究源程序的语法和语义及运行模
型,源是设计编译程序的出发点。
研究目标计算机,设计目标代码的指令
系统,它是由目标计算机扩充而成,扩
充后的计算机称作抽象计算机。目前的
通用计算机往往和源语言执行模型不一
致。。
精品文档
16
教和学的几个问题
重要性:处理字符串的一般方法;构造 大程序的方法;实用;研究课题:新的 语言及实现技术;并行编译技术。

第1章编译程序概论

第1章编译程序概论

第1章编译程序概论编译程序是一种将高级语言转化为机器语言的工具。

它是理解和操作计算机的重要组成部分,对于程序员来说至关重要。

本章将介绍编译程序的基本概念和功能,以及编译过程的各个阶段。

编译程序是将高级语言代码转化为低级机器语言代码的工具。

高级语言是以人类易于理解和编写的方式编写的,而机器语言则是计算机理解和执行的方式。

编译程序的作用是将高级语言代码转化为机器语言代码,以便计算机能够理解和执行。

编译程序的主要功能可以分为三个阶段:词法分析、语法分析和代码生成。

词法分析的目标是将源代码分解为一个个的词法单元,如关键字、标识符、常量和运算符等。

语法分析的目标是根据词法单元构建出语法树,以检查源代码的语法正确性。

代码生成的目标是将语法树转化为机器指令或者字节码,以便计算机执行。

编译过程可以进一步细分为以下几个阶段:预处理、编译、汇编和链接。

预处理的目标是对源代码进行处理,如展开宏定义、处理条件指令等。

编译的目标是将预处理后的代码转化为汇编语言代码。

汇编的目标是将汇编语言代码转化为机器语言代码。

链接的目标是将各个编译单元之间的引用解析,并生成可执行文件。

在编译过程中,还会遇到一些常见的错误和警告。

错误是指源代码中的语法错误或语义错误,如拼写错误、语法结构错误等。

警告是指在编译过程中出现的一些潜在的问题,如未使用的变量、未定义的函数等。

程序员需要根据编译器的输出信息对源代码进行修正,以保证代码的正确性和可靠性。

除了编译程序外,还有一种常见的方式将高级语言转化为机器语言,即解释执行。

解释执行是一种逐行解析和执行源代码的方式。

与编译程序不同,解释执行不需要将源代码转化为机器语言,而是在运行时逐行解析和执行。

解释执行的优点是方便调试和修改,但其执行效率相对较低。

总结起来,编译程序是将高级语言转化为机器语言的工具。

它包括词法分析、语法分析和代码生成等功能,并经过预处理、编译、汇编和链接等阶段。

编译过程中会出现一些错误和警告,程序员需要根据输出信息对源代码进行修正。

编译原理(清华)第一章编译程序概论

编译原理(清华)第一章编译程序概论

综合阶段:中间代码的生成,代码优化,目标代 码生成,对源程序进行翻译,生成目标代码
2. 前端与后端 前端(依赖于源语言而与目标机无关): 词法分析、语法分析、语义分析和中间 代码的生成,中间代码优化; 后端(依赖于目标机而一般不依赖源语 言):目标代码生成;
编译过程的实现: 一个编译过程可以由一遍、两遍或多遍完成 遍(pass) :对源程序或中间语言程序从头 到尾扫描并完成规定任务的过程。 一遍的编译器是通过一遍扫描直接从源程 序生成出目标代码,而多遍的编译器则通 过多遍扫描产生目标代码。比如第一遍进 行词法分析、语法分析、中间代码生成和 中间代码优化,而第二遍扫描则从中间代 码产生目标代码 影响分遍的因素:源语言结构,目标机资 源
3.语义分析
(semantic analysis)
任务:审查源程序是否有语义错误,为代 码生成阶段收集类型信息
类型审查(静态语义): 上下文相关性 类型匹配:每个算符是否具有语言规 范允许的运算对象 类型转换
例: program p() var rate:real; procedure initial; … position := initial /*error*/ + rate*60
4. 编译程序的发展
第一个编译程序的出现:20世纪50年代 早期,主要将算术公式翻译成机器代码 20世纪50年代中期,一批编译系统程序 开发成功 20世纪50年代末,开始研究编译程序的 自动生成工具 20世纪60年代,研究使用自展技术 并行编译技术
1.2 编译程序概述
一个编译程序的整个工作过程是划分成 阶段进行的,每个阶段将源程序从一种 表示形式转换成另一种表示形式。 典型的划分方法:
3. 语言程序的测试工具 静态分析器:检查变量的定值与引用关系 动态测试器:用测试用例记录程序运行时的 实际路径

【第1章编译概述】1.2编译程序的发展

【第1章编译概述】1.2编译程序的发展

【第1章编译概述】1.2编译程序的发展1.3 编译程序的发展1.编译程序历史编译程序是系统软件中资格最⽼的成员之⼀。

译理论和技术近30年来发展⼗分迅速、成熟现已形成⼀套较为系统化的编译理论和技术2.编译理论与其他课程关系3.编译理论的应⽤编译理论的许多想法和技术可⽤于⼀般软件的设计。

4.翻译程序翻译程序(Translator) 是⼀种程序,其输⼊是某种语⾔的⼀系列语句,⽽其输出则是另⼀语⾔的语句序列。

5.编译程序编译程序(Compiler)是⼀种程序。

它把⽤⾼级语⾔写的源程序作为数据输⼊,经过翻译转换,产⽣⾯向机器的代码作为输出。

这当中代码还可能要由汇编程序或装配程序作进⼀步加⼯,得出⽬标程序,交给计算机执⾏。

6.翻译与编译这种变换程序称为翻译程序编译程序有⼀些限制(针对输⼊、输出)编译过程概述1.编译过程的组成编译过程概述2.词法分析3.语法分析此时可以看出,上述结果符合F 0 R循环语句的语法定义,故语法分析成功完成4.中间代码⽣成5.代码优化6.⽬标代码⽣成三.编译程序的结构1.编译程序总框2.表格与表格管理编译各阶段均须维持表格并进⾏表格管理建表的技术⽀持是数据结构表格的分类、结构、处理⽅法决定于语⾔及机器,还有优化措施编译程序涉及的表格有:符号名表循环表常数表等价名表标号表公⽤链表⼊⼝名表格式表过程引⽤表中间代码表3.出错处理⼀个好的编译程序应该:全⼤限度发现错误准确指出错误的性质和发⽣地点局部化错误的影响限制在尽可能⼩的范围内若能⾃动校正错误则更好,但其代价⾮常⾼源程序中的错误通常分为:语法错误 不符合语法( 或词法)规则的错误【单词拼写错误、括号不匹配】语义错误 不符合语义规则的错误【说明错误、作⽤域错误、类型不匹配】遍 是对源程序或源程序的中间结果从头到尾扫描⼀次,并作有关的加⼯处理,⽣成新的中间结果或⽬标程序。

5.编译前端与后端 编译前端要由与源语⾔有关但与⽬标机⽆关的那些部分组成 编译后端括编译程序中与⽬标机有关的那些部分四、编译程序⽣成1.编译程序的构造⼯具 以往编译程序的构造⼤多采⽤机器语⾔或汇编语⾔ 现在编译程序的构造越来越多采⽤⾼级语⾔有时为了充分发挥效率或满⾜不同需求,仍然采⽤机器语⾔或汇编语⾔构造编译程序(或其核⼼部分)2.构造⼯具 构造编译程序的⼯具称为编译程序产⽣器或翻译程序书写系统⾃动产⽣扫描器 LEX FLEX⾃动产⽣语法分析器 YACC BISON。

01第1章-编译概述 --

01第1章-编译概述 --

比较 硬件识别 是否可直 接执行
机器语言
汇编语言
高级语言 不可识别 不可,需编译/解 释、连接 面向问题/对象 占用内存大 执行速度相对慢 标准化程度高 便于程序交换, 使用方便 高级语言,种类多, 常用
特点
是唯一可以识 不可识别 别的语言 可直接执行 不可,需汇 编、连接 面向机器 面向机器 占用内存少 占用内存少 执行速度快 执行速度快 使用不方便 较为直观 与机器语言 一一对应 低级语言,极 低级语言, 少使用 很少使用
1 + 3 表示为 10000001 00000001 00000011
是最底层的计算机语言,不需要翻译就可以直接 被计算机硬件识别。对应不同的计算机硬件有不 同的机器语言。 特点:执行速度快,但编写程序的难度大,修改、 调试不方便,直观性差,不易移植。
程序设计语言
汇编语言:又称为符号语言。与机器语言一一对 应,采用能帮助记忆的英文缩写符号(指令助记 符)来代替机器语言指令中的操作码,用地址符 号来代替地址码。用指令助记符及地址符号书写 的指令称为汇编指令,用汇编指令编写的程序称 为汇编语言源程序。
比较机器语言汇编语言高级语言硬件识别是唯一可以识别的语言不可识别不可识别是否可直接执行可直接执行不可需汇编连接不可需编译解释连接特点面向机器占用内存少执行速度快使用不方便面向机器占用内存少执行速度快较为直观与机器语言一一对应面向问题对象占用内存大执行速度相对慢标准化程度高便于程序交换使用方便定位低级语言极少使用低级语言很少使用高级语言种类多常用12翻译程序为什么需要翻译程序
编 译 程 序
汇 编 程 序
目标程序 + 运行子程序
运 行 结 果
编译阶段
汇编阶段
运行阶段

编译原理课件-编译概述

编译原理课件-编译概述
1.詞法分析 2.語法分析 3.語義分析
14/60
Wensheng Li BUPT @ 2008
1. 詞法分析
掃描,線性分析 詞法分析器:
– 依次讀入根源程式中的每個字元,對構成根源程式的字 串進行分解,識別出每個具有獨立意義的字串作為記號 (token)並組織成記號流。
– 把需要存放的單詞放到符號表中,如變數名,標號,常 量等。
簡介
什麼是編譯?
–把根源程式轉換成等價的目標程式的過程即是編譯。
編譯程序的設計涉及到的知識:
–程式設計語言 –形式語言與自動機理論 –電腦體系結構 –數據結構 –演算法分析與設計 –操作系統 –軟體工程等
3/60
Wensheng Li BUPT @ 2008
1.1 翻譯和解釋
一、程式設計語言 二、翻譯程式
中間代碼生成
temp1:=inttoreal(4) temp2:=id2*temp1 temp3:=id1+temp2 id1:=temp3
代碼優化
temp1:=id2*4.0 id1:= id1+trmp1
Wensheng Li BUPT @ 2008
目標代碼生成
MOVF id2, R2 MULF #4.0, R2 MOVF id1, R1 ADDF R2, R1 MOVF R1, id1
結果。 –有些“三地址”指令少於三個運算元
25/60
Wensheng Li BUPT @ 2008
total:=total+rate*4 的三地址代碼
temp1:=inttoreal(4) temp2:=id2*temp1 temp3:=id1+temp2 id1:=temp3
26/60
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单词值
y = x + r * 6
y=x+r*6
单词类别
标识符 分界符(赋值) 标识符 分界符(加号) 标识符 分界符(乘号) 常数
二、语法分析(编译程序的核心)
任务:根据语法规则(即语言的文法),分析并识 别出各种语法成分(如表达式、语句、函数等), 并进行语法正确性检查。
上下文无关文法
<赋值语句>::=<标识符>“=”<表达式>
<表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式>
<表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
<赋值语句>::=<标识符>“=”<表达式>
<表达式>::=<表达式>“+”<表达式> | <表达式>“*”<表达式>
<表达式>::=“(”<表达式>“)” | <标识符> | <整数> | <实数>
R1 R1 R2 R2 y
编译过程小结
词法分析 程序 语法分析 程序 语义分析 生成中间 代码 代码优化 程序 目标代码 生成程序
S.P
O.P
1.3 编译程序构造
按逻辑功能不同,可将编译过程划分为五个基本阶 段,与此相对应,我们将实现整个编译过程的编译程序划 分为五个逻辑阶段(即五个逻辑子过程)。
第1章
编译概论
教学目标
1. 掌握编译程序中所涉及的有关名词术语
2.理解编译程序总的框架,明确编译程序工 作的基本过程及各阶段的基本任务
教学内容
1.1.基本概念 1.2. 编译过程 1.3. 编译程序构造 1.4. 编译技术的应用及发展
1.1 基本概念
• 低级语言(Low level Language)
典型的编译程序具有7个逻辑部分 S.P
词法分析程序
符 号 表 管 理
语法分析程序
语义分析、生成中间代码 代码优化 生成目标程序 O.P
出 错 处 理
1.3.2 遍(PASS)
遍:对源程序(包括源程序中间形式)从头到尾 扫描一次,并做有关的加工处理,生成新的源程 序中间形式或目标程序,通常称之为一遍。
目标代码生成
一、词法分析 任务:根据词法规则分析和识别单词 字符序列
编码形式
单词:是语言的基本语法单位
<1>保留字(如:if、else、while) <2>标识符(如:max、min、str) <3>常数 (如:12、6.8、’a’) <4>分界符(如:+、-、*、/、;、(、) )
词法分析程序的结果-----二元式
运算符 * 左运算对象 r 右运算对象 6.0 结果 t1
(1)
(2)
+
x
t1
y
五、目标代码生成
任务:把中间代码变换成特定机器上的低级语言代码
运算符 * + 左运算对象 r t1 右运算对象 6.0 x 结果 t1 y
(1) (2)
movf mulf movf addf movf
r, #6.0, x, R1, R2,
1.2 编译过程
• 翻译和编译工作的比较
翻译外文 编译程序 识别单词 词法分析 分析句子 语法分析 根据语义进 语义分析、生成中间代码 行初步翻译 修辞加工 写出译文 代码优化 目标代码生成
分析
综合
1.2 编译过程
所谓编译过程是指将高级语言程序翻译为等价的目标程 序的过程。 习惯上是将编译过程划分为5个基本阶段: 词法分析 语法分析 语义分析、生成中间代码 代码优化
小结
• 内容
–1 什么是编译程序 –2 编译过程和编译程序的结构 –3 为什么要学习编译程序
• 重点
–对编译程序的功能和结构做一综述
• 难点
–了解编译程序各个成分在编译阶段的逻辑关系以及 他们怎样作为一个整体完成编译任务的。
思考题
1. 解释下列名词: 源程序、目标程序、翻译程序、汇编程 序、编译程序、遍。
•汇编程序
若源程序用汇编语言书写,经过翻译程序得到用机器语言 表示的程序,这时的翻译程序就称之为汇编程序,这种翻译过 程称为“汇编”(Assemble)
•编译程序
若源程序是用高级语言书写,经加工后得到目标程序,上述 翻译过程称“编译”(Compile)
汇编程序与编译程序都是翻译程序,主要区别是加工对象的 不同。由于汇编语言格式简单,常与机器语言之间有一一对 应的关系。汇编程序所要做的翻译工作比编译程序简单的多。
---综合部分
同一前端+不同后端 不同机器构成同一语言的编译程序
例如Java语言
.java java源程序文件
编译
.class 二进制字节码文件
Java虚拟机(JVM) 本地计算机系统
不同前端+同一后端 同一机器生成几个语言的编译程序
例如GCC
1.4 编译技术的应用及发展
•应用:大部分软件工具的开发,都要使用 编译技术和方法
编译原理
王新蕾
为什么要学习编译原理
• 程序设计语言是计算机软件专业的重要核心 • 学习编程的历程: –C语言--汇编语言--数据结构
高级语言
SOURCE PROGRAM
?翻译程序?
TRANSLATER
汇编语言 Assemble
PROGRAM
参考书
• 吕映芝,张素琴等,《编译原理》,清华大学 出版社。 • 陈火旺 刘春林等, 《程序设计语言编译原理 》,国防工业出版社。 • 高仲仪、金茂忠,《编译原理及编译程序构造 》,北航出版社。 • Alfred V A,Ravi S,Ullman J D, 《 Compilers:Principles, Techniques and Tools》 ,机械工业出版社 。
“编译-解释执行”系统
源程序
编译程序 源程序的中间形式
输入数据
解释程序
输出数据
1.2 编译过程
所谓编译过程是指将高级语言程序翻译为等价的目标 程序的过程。 翻译外文资料: 1、能识别出句子中的一个单词; 2、分析句子的语法结构; 3、根据句子的含义进行初步翻译; 4、对译文进行修饰; 5、写出最后的译文。
t1
运算符
(1) Inttoreal 6
(2) *
(3) + (4) =
r
x t3
t1
t2
t2
t3 y
其中t1、t2、t3为编译程序引入的临时工作单元
四、代码优化
例:y = x + r * 6
任务:对中间代码进行加工变换,以得到高质量的目 标代码
(1) (2) (3) (4) 运算符 左运算对象 右运算对象 结果 Inttoreal 6 t1 * r t1 t2 + x t2 t3 = t3 y
语法制导的结构化编辑器 程序格式化工具 软件测试工具
静态分析器:不可能执行的代码、定义后未引用的变量 动态测试工具:运行后与期望结果比较
程序理解工具:确定调用关系,画出流程图 排版打印程序等等。
•发展
并行编译技术
– 目的:提高并行计算机体系结构的性能,超 大规模计算的日益增长的需求 – 两种实现方法 • 利用重构技术将串行程序并行化 • 直接编写并行程序
•静态:
分析语法成份的含义,进行语义上的正确性检查 •动态: 根据相应语义,生成中间代码(介于源语言和目 标语言之间的中间语言形式)
生成中间代码的目的:
•1、利于代码优化 •2、利于目标代码的移植
中间代码的形式:
•四元式、三元式、逆波兰表示
四元式
例:y = x + r பைடு நூலகம் 6 左运算对象 右运算对象 结果
– 字位码、机器语言、汇编语言 –特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错
• 高级语言 -- Fortran、Pascal、C 语言等
–特点:不依赖具体机器,移植性好、对用户要求低、 易使用、易维护等。
•源程序
用汇编语言或高级语言编写的程序称为源程序
•目标程序
用目标语言所表示的程序 目标语言:可以是介于源语言和机器语言之间的“中间 语言”,可以是某种机器的机器语言,也可以是某机器的汇 编语言。
每个阶段中都要有:
符号表管理和出错处理
1.3.1 编译程序的逻辑结构 符号表管理
填表:把源程序中的信息和编译过程中所产生的 信息登记在表格中
查表:在随后的编译过程中同时又要不断的查找 这些表格中的信息;
出错处理
诊察错误,并能报告用户错误性质和位置 出错处理能力的优劣是衡量编译程序质量好坏的 一个重要指标。
•翻译程序
将源程序转换为目标程序的程序称为翻译程序。它是 指各种语言的翻译器,包括汇编程序和编译程序,是汇编 程序、编译程序以及各种变换程序的总称。
S
O I
源程序、翻译程序、目标程序 三者关系:
源程序
SOURCE PROGRAM
翻译程序
TRANSLATER
目标程序
OBJECT PROGRAM
即源程序是翻译程序的输入,目标程序是翻译程序的输出
交叉编译技术
交叉编译器
由于目标机指令系统与宿主机的指令系统不同,编译 时将应用程序的源程序在宿主机上生成目标机代码, 称为交叉编译。
S
O
A
I
O
B
语言开发环境中的伙伴程序 编辑器(editor) 预处理器(preprocessor) 连接程序(linker) 装配程序(loader) 调试程序(debugger)
相关文档
最新文档