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

合集下载

北京航空航天大学《编译原理》第1章 概论

北京航空航天大学《编译原理》第1章 概论
(1) + (2) * (3) := 2.0 0.8 T1 T1 C1 T2 X1 T2
(1) * T1 (2) := X1
北京航空航天大学计算机学院
五、生成目标程序
由中间代码很容易生成目标程序(地址指令序列)。这 部分工作与机器关系密切 ,所以要根据机器进行。在做这 部分工作时(要注意充分利用累加器),也可以进行优化 处理。 X1:= ( 2.0 + 0.8 ) * C1
北京航空航天大学计算机学院
教学要求
• 掌握编译程序总体结构 • 在系统级上认识算法、系统的设计
– 具有把握系统的能力
• 学习有关的原理、实现方法和技术,了解计算学 科的基本方法、思想
– 掌握典型方法。 “在每一个计算机科技工作者的职业 生涯中,这些原理和技术都被反复用到。”
• 兼顾语言的描述方法、设计、应用——形式化
北京航空航天大学计算机学院
X1:= ( 2.0 + 0.8 ) * C1;
赋值语句 X1
:= 表达式 ;
表达式
* )
C1

2.0
表达式
也称为层次分析。 + 0.8
北京航空航天大学计算机学院
三、语义分析、生成中间代码
任务:对识别出的各种语法成分进行语义分析, 并产生相应的中间代码。 • 中间代码:一种介于源语言和目标语言之间的中间语言形式 • 生成中间代码的目的: <1> 便于做优化处理; <2> 便于编译程序的移植。 • 中间代码的形式:编译程序设计者可以自己设计,常用的有 四元式、三元式、逆波兰表示等。
北京航空航天大学计算机学院
源程序、翻译程序、目标程序 三者关系: 源程序
SOURCE PROGRAM

C语言程序设计(1-6章)

C语言程序设计(1-6章)

C语言程序设计第1章概论1.1 C语言有哪些主要特点?其主要用途是什么?1.2 程序设计语言的主要构成要素有哪些?1.3 程序设计语言的实现都有哪些方法?1.4 程序设计语言按照实现方法可分为哪几种类型?1.5 为什么要学习程序设计语言?1.6 将C语言和你所掌握的高级语言做一比较。

1.7 C程序的主要构成单位是什么?1.8 C语言的保留字和特定字有何区别?1.9 下面哪些是合法的C语言一般标识符?std-sex, Std-num, 2.13, _2.13, name, int, Int, var-num, yes_or_no, select, File_name, _DATA, define, a+c, new, ok?1.10 C程序从编辑到执行要经过哪些步骤?1.11 C函数主要由哪几部分构成?复合语句在C语言中是用什么标界的?又称为什么?1.12 填空。

1 . 一个C程序是由若干个函数构成的,其中必须有一个函数。

2 . 一个C语句最少应包含一个。

1.13 单项选择。

1. C语言程序的基本单位是( )。

(1) 子程序 (2) 程序 (3) 过程 (4) 函数2. 合法的C语言标识符是( )。

(1) _a1 (2) a+b (3) 3abc (4) AB,CD答案:1.1C语言主要用于编写系统软件,其主要特点如下:①语言简洁,紧凑,使用灵活②运算符丰富③具有数据类型构造和流控结构能力④语言生成的代码质量高⑤可移植性好⑥语言语法限制不严格,程序设计自由度大1.2程序设计语言的主要构成要素有:①数据。

②运算(操作)③控制结构④存储答理⑤固运算环境。

1.3 程序设计语言的实现方法主要有:1. 翻译或编译。

2. 软件模拟(软件解释)。

1.4 程序设计语言的按照实现方法有编译型和解释型两种。

1.5略 1.6 略1.7 C程序的主要构成单位是函数。

1.8 C程序的保留字和特定字的区别是,保留字不能用来表示用户自定义的对象,而特定字却不受此限(尽管不提倡这样做)。

第1章 概述-编译原理及实践教程(第3版)-黄贤英-清华大学出版社

第1章 概述-编译原理及实践教程(第3版)-黄贤英-清华大学出版社
• 重点掌握:编译程序工作的基本过程及其各阶 段的基本任务,编译程序总框。
《编译原理实践及应用》
1.1 程序设计语言及翻译程序
为什么要使用编译程序?
• 机器语言 (machine language)
C7 06 0000 0002
• 汇编语言 (assembler language)
MOV X , 2
为该语言编译程序能够识别的形式加入到标准源程序中。 在VC++6.0中,通过预处理后,将.c的源程序变为了.i的文 本文件。
《编译原理实践及应用》
编译
标准的C语言程序由编译程序翻译为对应于某个计算机 上的汇编语言程序。汇编语言是和机器语言一一对应的易于 阅读的文本形式的语言。编译的结果是某种机器上汇编语言 书写的程序。如在VC++6.0中,编译这一步将.i的文本文件 生成了.cod的文本文件,这就是汇编代码。有的编译器生成 .s或.asm后缀的文件。
• 解释程序:将高级程序设计语言写的源程序作为输入,
边解释边执行源程序本身,而不产生目标程序的翻译程序。
• 其他概念:
– 诊断编译程序 – 优化编译程序 – 交叉编译程序 – 可变目标编译程序
宿主机 目标机
《编译原理实践及应用》
对编译程序的一些说明
• 编译程序实质上是一个翻译程序,要注意等价变 换
• 高级语言 (high-level language)
X=2
《编译原理实践及应用》
语言层次和翻译程序大家族
翻译程序:能够将某种语言写的程序转换成另一
种语言的程序,而且后者与前者在逻辑上是等价的。
转换
高级语言层 高级语言1
程序
高级语言2
高级语言3 高级语言4

信息学院06版《编译原理》课程教学大纲

信息学院06版《编译原理》课程教学大纲

《编译原理》课程教学大纲课程编号:(先不填)英文名称:Compiler Construction Principles课程类型:专业基础课学时/学分:40+16/3.5授课对象:本科生先修课程:高等数学,数据结构,C程序设计课程简介:本课程是计算机专业学生的一门重要专业基础课,本课程属于计算机科学与技术专业的一门重要的专业必修课。

通过本课程学习,使学生掌握编译程序的一般构造原理,包括语言基础知识、词法分析程序设计原理和构造方法。

各种语法分析技术和中间代码生成符号表的构造、代码优化、并行编译技术常识及运行时存储空间的组织等基本方法和主要实现技术。

它有一定的理论性,又有一定的实践性, 尤其是本课程的知识与计算机应用中很多领域有紧密联系与广泛应用。

了解与掌握本课程的基本内容将有利于学生提高专业素质和适应社会多方面需要的能力。

教学目的和要求:教学目的:培养学生掌握构造编译程序的基本原理与设计方法,为培养计算机语言与大型应用程序的开发人才打下良好的基础。

本课程坚持理论与实践教学并重的原则,理论上主要叙述语言和文法的形式定义、自动机理论、词法分析、语法和语义分析、优化和代码生成等环节的基本理论和方法,与此同时,通过上机实习构造简单语言的编译程序等编辑器使学生掌握开发应用程序的基本方法。

教学要求:通过本课程的学习, 学生应掌握形式语言理论与编译实现相关的基础概念, 了解与掌握编译程序构造的基本原理与技术, 从形式语言理论的角度, 进一步认识与理解程序设计语言及其与编译程序的联系。

做习题是理解课程中基本概念、培养思考能力和解题能力的重要方面, 要求学生认真做好习题, 并注意解题规范化。

学生也应重视配合教学, 做好上机实习。

教学内容:第1章编译程序概述(2学时)1、教学内容:1)什么是编译程序2)编译过程概述3)编译程序的结构4)编译阶段的组合5)编译技术和软件工具2、教学重点:编译程序的结构3、教学难点:编译程序的结构,以及每一阶段任务第3章文法与语言(6学时)1)文法的直观概念2)符号和符号串3)文法与语言的形式定义4)文法的分类5)上下文无关文法及其语法树6)句型的分析7)有关文法实用中的一些说明2、教学重点:与编译技术密切相关的一些术语和概念。

C语言完整资料

C语言完整资料
2.2.2 常量
2.2.2.1 字面常量(直接常量)
字面常量是直接表示的常量。
2.2.2.2 符号常量
符号常量是用一个标识符代表一个常量,使用编译预处理命令#define定 义,定义格式为:
#define 常量名 字面常量
精选版ppt
2-311
2.2.3 变量
在程序运行过程中,其值可以改变的量称为变量。 C语言规定,变量要先定义后使用。变量的定义一般在函数的声明部分,格式为:
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
1.2.2.3 C语言程序的执行
C语言程序总是从main()函数的第一条执行语句开始执行,执行完main()函数的最后一 条语句,则整个程序执行结束,而其他函精数选则版通pp过t 嵌套调用得以执行。
1-34
1.2.3 C语言程序书写格式 1. 行的书写格式自由,可从一行的任何位置开始书写。 2. 一行可书写多条语句,一条语句也可分写在几行上。 3. 所有语句都必须以分号“;”结束。 4. 允许使用注释。 C语言的注释格式有两种://,/* …… */。 5. 在书写程序时,通常采用缩格形式书写分层结构的程序。
本章主要介绍C语言的特点,C语言程序的结构与书写规则,C程序上机步骤,编译预 处理,算法的概念及表示。
精选返版回pp目t 录
1-12
1.1 语言的特点
1.语言简洁、紧凑,使用方便、灵活 2.运算符丰富 3.数据类型丰富 4.程序设计结构化、模块化 5.语法限制不太严格,程序设计自由度大 6.C语言允许直接访问物理地址,能进行位(bit)操作 7.生成的目标代码质量高,程序执行效率高 8.可移植性好

编译原理第1章 概述

编译原理第1章 概述
七 . 信息表管理程序: 合理的组织编译程序 中的各种表格,并恰 当的选用相应的造表 算法,是提高编译程 序工作效率的有效途 径
1.3 编译程序的生成
一、基本方法 1. 对源程序文本进行
认真分析(语法语 义理解) 2. 设计编译算法(前后 端、遍、算法等) 3. 选择语言,编制程序 4. 调试编译程序(测试) 5. 整理资料、形成文本
二.移植:将别的语言的编译移植过来 三. 自展:L0→L1+L0 →L2+L1+L0 → … →L 四. 编译程序的自动生成 1. 词法分析程序生成器----LEX 2. 语法分析程序生成器----YACC 3. 自动产生编译程序的工具 编译程序-编译程序 编译程序产生器 翻译程序脚本系统
随着并行技术和并行语言的发展,处理并行语言的并行 编译技术和将串行程序转换成并行程序的自动并行编译技术 正在深入研究之中。


程序


代 码


生 成

信息表管理程序
国防科技大学出版社 [3]杜淑敏著,编译程序设计原理、北京航空
航天大学出版社 [4]Aho ,编译原理技术工具(英文),1986 [5]形式语言与自动机理论(研究生教材)
第一章引论
1.1 什么是编译程序
编译程序是一种翻译程序,它将高级 语言所写的程序翻译成等价的机器语言 或汇编语言的目标程序。


其中的道理。 3、不得缺席:难学,自学花时间多 4、适当做笔记 5、意见反馈 6、作业:一定要独立完成
四、学时安排及评分标准
讲课42学时 12学时上机(词法、语法) 要交实验报告 考试占70% 平时占30%,{ 作业,考勤,实验} 只讲授部分章节

编译第1章

编译第1章

1.2.1编译过程概述 1.词法分析

词法分析程序又称扫描程序。 任务
– 输入源程序,对构成源程序的字符串进行扫 描和分解,识别出一个个的单词。

单词
– 是高级语言中有实在意义的最小单位,它由 字符构成。
1.2.1编译过程概述 1.词法分析

举例说明
– 有一个C语言程序,对它进行编译 Void jisuan() 保留字: { 标识符: int y,c,d; 常数: float x,a,b; 运算符: x=a+b*10; y=c+)d*(x+b; 界符: }
第一章 引论
【课前思考】 ◇ 什么是编译程序? ◇ 编译过程和编译程序的结构? 【学习目标】 ◇ 明确编译程序的功能及其在计算机系统中 的作用。 ◇ 了解源语言程序被编译为目标程序的整个 过程,这个过程一般划分为哪些阶段?
1.1什么是编译程序

程序设计语言
– 高级语言 – 汇编语言 – 机器语言
id1:=id2+id3*10 的语法树
id1:=id2+id3*10的语法树的另一种 形式
1.2.1编译过程概述 3.语义分代码生成阶 段收集类型信息。 – 语义分析进行类型审查,审查每个算符是否 具有语言规范允许的运算对象,如有的编译 程序对实数用作数组下标的情况报告错误, 二目运算施于一整型和一实型时,强制转换, 并不认为是源程序的错误。
高级语言程序的执行方式


高级语言程序通常采用两种方式执行:编译方 式和解释方式 解释方式:逐个语句地分析和执行,如Basic, Prolog
– 优点:直观易懂,结构简单,易于查错 – 缺点:效率低,运行速度慢

编译方式:对整个程序进行分析,编译成等价 机器语言程序后执行,如Pascal,Fortran,C

《C语言程序设计》 第1章 概论

《C语言程序设计》 第1章 概论

Chapter 1
Introduction
1.2.2 C 程序的基本结构
实例:输入两个数及其算术运算关系,输出运算结果。 int fun(int x,char op,int y) /* This is my first C program { filename:first.c int z; */ switch(op) #include <stdio.h> { void main(void) case ‗+‘: z=x+y; break; { case ‗-‗ : z=x-y; break; char ch; case ‗*‘: z=x*y; break; int iA, iB, c; case ‗/‘ : z=x/y; scanf(―%d%c%d‖, 子 } &iA,&ch,&iB); 函 return z; /*返回运算结果*/ c=fun(iA,ch,iB); 数 } 主printf(―%d%c%d=%d‖,iA, 函 ch,iB,c); chp1ex1 数 }
Chapter 1
Introduction
C 语言程序设计
C Language Programming
但愿她是你知识大厦的又一块基石。 但愿她是开启你智慧的又一把钥匙!
Chapter 1
Introduction
学习目的
通过学习掌握C语言的语法结构,理解程序设计的一般 方法和基本技术。 学习算法的概念以及结构化程序设计的一般方法,提 高分析能力和综合能力。 能够用C语言编程解决一定的实际问题,提高计算能力。
0111000011 0101000010
Chapter 1
Introduction
学习的层次

编译原理第二版课后习答案

编译原理第二版课后习答案

《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2题一个典型的编译程序通常由哪些部分组成各部分的主要功能是什么并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

编译原理课件(刘铭)第1章

编译原理课件(刘铭)第1章

语法分析程序
语义分析和中间代码生成程序


1.3 编译程序的生成方法
编译程序是一个复杂的系统程序,要 生成一个编译程序一般要考虑以下几方面: 对源语言和目标语言认真分析 设计编译算法 选择语言编制程序 调试编译程序 提交相关文档资料
编译程序的自动生成
随着编译技术和自动机理论的发展, 近 年来已研制出了一些编译程序的自动生成 系统。 如目前已广为使用词法分析程序的自 动生成系统LEX和语法分析程序自动生成 系统YACC等,此外, 还有可用来自动产 生整个编译程序的软件工具:编译程序产 生器, 它的功能是将任一语言的词法规则、 语法规则和语义解释的描述作为输入,自 动生成该语言的编译程序。
表格管理和错误处理
一个好的编译程序在编译过程中, 应具有广泛的程序查错能力,并能准确 地报告错误的种类及出错位置,以便用 户查找和纠正,因此,在编译程序中还 必须有一个出错处理程序。
编译程序的结构
源程序 ( 字符串) 表 格 管 词法分析程序 出 错 处 理 代码优化程序 程 目标代码生成程序 程 序 目标程序
翻译程序是指这样一个程序,它把 一种语言(称作源语言)所写的程序(源 程序)翻译成等价的另一种语言(称作 目标语言)的程序(目标程序)。
1.1 翻译程序与编译程序
源程序 高级语言程序 编译程序 目标程序 汇编语言或者 机器语言程序
编译程序是一种翻译程序,它将 高级语言所写的源程序翻译成等价的 机器语言或汇编语言的目标程序。
编译程序的自动生成
生成编译程序的方法还常采用自编译 方式和移植方式。
随着并行技术和并行语言的发展,处 理并行语言的并行编译技术和将串行程序 转换成并行程序的自动并行编译技术正在 深入研究之中。

语言和翻译:语言是人类交流思想和信息工具。如自然语言,世界上存

语言和翻译:语言是人类交流思想和信息工具。如自然语言,世界上存
4
译程序就是一个 语言翻译程序。它把一种语言(称作源语言)书写的 程序翻译成另一种语言(称作目标语言)的等价的程 序。
源语言通常是一个高级语言,如FORTRAN, C 或Pascal。目标语言通常是一个低级语言,如汇编 或机器语言。编译程序的功能下图所示。
高级语言程序 (源程序)
var sum begin
15
编译原理
3. 逗号 4. 标识符 5. 逗号 6. 标识符 7. 冒号 8. 保留字 9. 分号 10. 标识符 11. 赋值号 12. 标识符 13. 加号 14. 标识符 15. 乘号 16. 整数 17. 保留字 18. 界符
, first , count : real ; sum := first + count * 10 end .
编译原理
2.语法分析
语法分析的任务是在词法分析的基础上,根据语 言的语法规则(文法规则)把单词符号流分解成 各类语法单位(语法范畴),如“短语”、“子 句”、“句子(语句)”、“程序段”和“程 序”。
6
编译原理
7
需预处理的源程序 预处理程序 源程序 编译程序 目标汇编程序 汇编程序
可再装配的机器代码 装配/连接编辑程序
绝对机器代码
8
编译原理
高级语言程序的 处理过程
可再装配目标文件
编译原理
一个高级语言程序的执行通常分为两个阶段,即 编译阶段和运行阶段,如图所示。编译阶段将源 程序变换成目标程序;运行阶段则由所生成的目 标程序连同运行系统(数据空间分配子程序、标 准函数程序等)接受程序的初始数据作为输入, 运行后输出计算结果。
9
输入数据
源程序
编译原理
编译程序
目标程序

第一章 编译程序基本概念

第一章  编译程序基本概念

4. 优化 :提高目标程序质量的工作 ;
例: b := a+2*5 := b a 2 := b a + 10 + * 5 ⑴( * 2 5 t1 _ t1 ) t2 ) b)
经 常数合并,可分别获得优化后的中间代码如下图所示: 常数合并,可分别获得优化后的中间代码如下图所示:
⑵( + a ⑶ ( := t2
编译程序与解释程序的主要区别: 编译程序与解释程序的主要区别: 的主要区别 前者有目标程序而后者 目标程序; 而后者无 ⑴ 前者有目标程序而后者无目标程序; ⑵ 前者运行效率高而后者便于人机对话。 前者运行效率高而后者便于人机对话 运行效率高而后者便于人机对话。
1.2
编译程序结构
编译程序总体结构如图1.4所示。 编译程序总体结构如图1.4所示。 1.4所示
错 误 处 理 错 误 处 理 源 语 言 词法 分析 语法 分析 语义 分析 优化 优化 处理 处理
编译程序的 五个阶段: 五个阶段:
代码 生成
目 标 语 言
单词串 TOKEN
语法树
符 号 表 管 理
语义树
优化 语义树
图 1.4
编 译 程 序 总 体 结 构 框 图
※ 编译程序与机器翻译的类比 : 编译程序与机器翻译的类比
它特指把某种高级程序设计语言翻译成具 体计算机上的低级程序设计语言。 体计算机上的低级程序设计语言。
高级语言的执行过程 --两个阶段: 两个阶段:
源语言 编译程序 编译阶段 图 1.2 目标语言 数据 运 行 程 序 运行阶段 结果
高级语言的执行过程
※ 什么是 解释程序? 解释程序?
解释程序(interpreter)也是一种翻译程序, 解释程序(interpreter)也是一种翻译程序,将某高 级语翻译成具体计算机上的低级程序设计语言; 级语翻译成具体计算机上的低级程序设计语言;解释程序 的执行过成如图1.3 所示。 的执行过成如图1.3 所示。 数据 一条源语句 图 1.3 解释程序 解释程序的执行过程 结果

计算机组成原理名词解释

计算机组成原理名词解释

2.ROM:只读存储器,一种只能读取数据不能写入数据的存储器。
3.SRAM:静态随机访问存储器,采用双稳态电路存储信息。
4.DRAM:动态随机访问存储器,利用电容电荷存储信息。
5.EDO DRAM:增强数据输出动态随机访问存储,采用快速页面访问模式并增加了一个数据锁存器以提高数据传输速率。
1.原码:带符号数据表示方法之一,一个符号位表示数据的正负,0代表正号,1代表负号,其余的代表数据的绝对值。
2.补码:带符号数据表示方法之一,正数的补码与原码相同,负数的补码是将二进制位按位取反后在最低位上加1.
3.反码:带符号数据的表示方法之一,正数的反码与原码相同,负数的反码是将二进制位按位取反
12.操作数寻址方式:指令中地址码的内容及编码方式。
13.系统指令:改变计算机系统的工作状态的指令。
14.特权指令:改变执行特权的指令,用于操作系统对系统资源的控制。
15.自陷指令:特殊的处理程序,又叫中断指令。
16.寻址方式:对指令的地址码进行编码,以得到操作数在存储器中的地址的方式。
10.快闪存储器:一种非挥发性存储器,与EEPROM类似,能够用电子的方法擦除其中的内容。
11.相联存储器:一种按内容访问的存储器,每个存储单元有匹配电路,可用于是cache中查找数据。
12.多体交叉存储器:由多个相互独立、容量相同的存储体构成的存储器,每个存储体独立工作,读写操作重叠进行。
5.外围设备:计算机的输入输出设备,包括输入设备,输出设备和外存储设备。
6.数据:编码形式的各种信息,在计算机中作为程序的操作对象。
7.指令:是一种经过编码的操作命令,它指定需要进行的操作,支配计算机中的信息传递以及主机与输入输出设备之间的信息传递,是构成计算机软件的基本元素。

第1章 编译系统概述

第1章 编译系统概述

1.3 编译过程概述
典型的编译程序工作过程是:输入源程序,对它进行加工处 理,最后输出目标程序(机器语言或汇编语言形式)。整个过 程相当复杂,从数据加工的角度来看,可将其分成4个逻辑阶 段,它们是: 词法分析 语法分析 语义分析(中间代码产生) 目标代码生成 图示如下: 源 程 序 目 标 程 序
㈡汇编语言
用记忆符取代二进制位,存储地址和汇编语句的序号可用符号 名表示。 ①优点 用符号取代二进制数,提高了程序的可理解性。 性能较好的汇编语言,可用符号名来表示存储地址和汇编 语句序号,这样避免了在汇编语句中绝对地址的出现。 可充分利用硬件特性 所以,汇编语言在一定程度上降低了程序编制和维护的难度。 ②缺点 汇编语句和机器指令基本上是一对一的,所以汇编语言的编 程效率并没有质的提高。 和机器语言一样,汇编语言依附于目标计算机。 需汇编程序,将汇编语言译成机器语言。
00000000-00000011(3) 00000000-01000000(128)
……
㈣目标代码生成(Code Generation)
执行目标代码生成的程序称为目标代码生成器。 任务:中间代码 目标代码(机器指令或汇编语言) 依据:目标机器的系统结构 假设模型机器的指令格式为: op Ri , M (Ri)op(M)→ Ri op Ri , Rj (Ri)op(Rj)→ Ri op Ri , C (Ri)op C → Ri 其中Ri表示寄存器,M表示内存地址(可用符号表示),C表 示常数。 表达式3+abc*128最终形成的汇编语言程序示意如下: Load R0,abc Mul R0,128 Store R0,T1 Load R0,3 Add R0,T1 Store R0,T2
㈡语法分析(Parsing)

1hhh第1章-概述PPT课件

1hhh第1章-概述PPT课件
Pascal 语法规则(CFG): <赋值语句>::=<标识符> “:=” <表达式>; <表达式>::=<表达式> “ + ” <表达式> <表达式>::=<表达式> “ * ” <表达式> <表达式>::= “(” <表达式> “) ” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
2021/3/12
2
学习编译程序,需要先理解程序设计语 言。每个程序设计语言都有一定的规则 用于规定程序的语法结构,也有一定的 规则用于描述程序的语义。
上下文无关文法给出程序设计语言的精 确的语法说明。
尚无公认的形式系统用于描述程序的语 义。通常,用属性文法描述语义规则。
2021/3/12
3
第1章 概述
(source language, source program)
编译程序的目标语言(目标程序)
(object / target language) (object / target program)
编译程序的实现语言
(implementation language)
语言处理程序(language processor) 语言转换(language transformation)
[3] 陈意云等. 编译原理和技术. 合肥: 中国科学技术大学出版社, 2002 [4] 陈火旺等. 程序设计语言编译原理. 北京: 国防工业出版社, 2000
2021/3/12
1
编译程序是现代计算机系统的基本组 成部分,主要由以下部分构成:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

§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
赋值语句
10
§1.2 编译过程和编译程序的结构概述--编译过程概述 2.检查形式语法错误 例如:Y=A+B; //PASCAL赋值语句其赋值号应为 := Y:=IF*Y;//PASCAL中用保留字作为标识符来使用 a=b++c; //C中两个子表达式之间没有运算符 if=x+y; //C中条件语句出错 (x+y))*z;//C中括号不配对 等等 说明:关于书中在这里引进的有关语言的“递归规则定义 ” 和“语法树”相关知识,我们暂不讨论。
第1章 编译程序概论
§1.1 什么是编译程序 机器语言 低级 汇编语言 语言
高级: FORTRAN, PASCAL,C,C++等 汇编程序
Assembler
Translator
汇编语言程序
高级语言程序 源程序
Source Program
翻译
编译程序
Compiler
机器语言程序
目标程序
Object Program
(典型)高级语言程序的处理过程:
需预处理的源程序 预处理程序
源程序
编译程序 目标汇编语言程序 汇编程序
obj
函数子程序 可再装配目标文件
可再装配的机器代码 编辑(装配/连接)程序 绝对机器代码
exe
3
§1.1 什么是编译程序 例:C语言需预处理的源程序 /*文件名:example.c*/ #include "stdio.h" #define CHARACTER char main() { CHARACTER ch; ch=getchar(); putcha和编译程序的结构概述 一、编译过程概述 典型编译程序工作过程:
源程序 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 目标程序
7
代码生成
§1.2 编译过程和编译程序的结构概述--编译过程概述 ☉词法分析 主要任务:扫描源程序的ASCII码序列,识别出一个个 单词(也称单词符号或(语法)符号)。 具体任务: 1.拼单词:组合分解源程序中的字符,得到符合语言词法 规则的单词。 例如某源程序片断如下: begin var sum,first,count:real;sum:= first+count*10 end. 词法分析将其视为字符(ASCII码)序列:
1
§1.1 什么是编译程序 编译程序: 把源程序翻译(转换)成等价的目标程序的程序
其转换过程可图示如下:
黑盒子 高级语言程序 (源程序) 编译程序 低级语言程序 (目标程序)
说明:除编译程序自身外,多数编译系统还需要一些其他 的辅助程序来帮助完成其最终的翻译(转换)工作。
2
§1.1 什么是编译程序
4
§1.1 什么是编译程序 经预处理程序“CPP.EXE”处理后得如下源程序 DOS命令为:cpp example.c 结果文件名:example.I example.c 1: main() example.c 2: { example.c 3: char ch; example.c 4: ch=((--(((&_streams[0]))->level) >= 0) ? (unsigned char)(++((&_streams[0]))->curp) [-1] : _fgetc ((&_streams[0]))) ; example.c 5: ((++(((&_streams[1]))->level) < 0) ? (unsigned char)((++((&_streams[1])) ->curp)[-1]=((ch))) : _fputc (((ch)),(&_streams[1]))) ; example.c 6: } 5
b e g i n v a r s um, t * 1 0 e n d •
组合分解成单词符号序列:
begin var sum , first count * 10 end •
8
§1.2 编译过程和编译程序的结构概述--编译过程概述 2.翻译单词:将单词加工成含有特征/属性的机内表示 (机内符) 例如:上述源程序片断的词法分析的结果为如下二元组序列: 1.保留字 begin 2.保留字 var 3.标识符 sum 4.逗号 , 5.标识符 first 6.逗号 , 7.标识符 count 8.冒号 : 9.保留字 real 10.分号 ; 11.标识符 sum 12.赋值号 := 13.标识符 first 14.加号 + 15.标识符 count 16.乘号 * 17.整数 10 18.保留字 end 19.界符 ·
相关文档
最新文档