编译原理(第四版)第1章 绪论

合集下载

编译原理复习材料

编译原理复习材料
a+b=5 a=7 x=5 y=3 b=3 z=7
(4) 所谓传名是在进入调用段之前不对实在参数预先进行计值,而 是过程中每当使用到相应的形参时才对它实行计值。因序),每当过程体中使用到相应 形参时就调用这个子程序。 因此,过程体执行y:=y+1;语句,实现时处理成为: a=a+1; 过程体执行z:=z+x;语句,实现时处理成为: a=a+(a+b); 执行上述两语句后,a的值是 9。因此,程序执行后输出 a的值是 9。 综上所述程序执行时a的输出: (1)传值:2 (2)传地址:8 (3)得结果:7 (4)传名:9 5、几个基本概念 考虑一个有穷字母表∑字符集,其中每一个元素称为一个符号,∑上的
程序是由函数或过程构成的,程序的任务是通过函数或过程之间的 协作(相互调用)l来完成的,函数或过程的调用有以下4种方式:传地 址(call-by-reference)、得结果(call by result)、传值(call-byvalue)和传名(call by name)。 定义函数Swap,其中M、N是形式参数,简称形参。 Void Swap(int M,int N) { int t; t=N; N=M; M=t; } 函数调用: Swap(I,J);其中I和J是实在参数,简称实参。下面我们以下面的 程序为例分别讨论4种参数传递的方式。
(2)这种类型的数据对象可以具有的值; (3)可以作用于这种类型的数据对象的操作。 一个程序语言必须提供一定的初等数据类型,包括这些数据类型上能 进行的运算的定义。不同的语言含有不同的初等数据成分。常见的初等 数据类型有: (1)数值类型:整型、实型、复数、双精度, 运算:+,-,*,/等 (2)逻辑类型:布尔运算:∨,∧,┑ (3)字符类型:符号处理 (4)指针类型:指针式把内存地址作为其值的数据类型,通过指针可 以操作内存空间。 程序语言中的各种名字都是用标识符表示的。标识符是指由字母、 下划线和数字组成的,以字母或下划线为开头的一个字符串。名字和标 识符在形式上难于区别,标识符是一个没有意义的的字符序列,而名字 则有明确的意义和属性。用计算机术语来说,每个名字可看成是代表一 个抽象的存储单元,这个单元可含有一位、一字节或相继的多个字节。 该单元的内容则被认为是名字的值。仅把名字看成代表一定的存储单元 还是不够的,我们还必须同时指出它的属性(数据类型)。只有指定了 属性的存储单元,其值才是可以理解的。 一个名字的属性包括类型和作用域。名字的类型决定了它能具有什 么样的值, 值在计算机内部的表示方式,以及对它能施加什么运算。 名字的作用域规定了它的值的存在范围。 除了初等数据类型外,有些语言还提供了由初等数据构造复杂数据 的手段。常见的复杂数据类型有: (1)数组。一个数组是由同一类型数据所组成的某种n维矩形结 构。数组在内存中占有一块连续的空间,系统采用基地址加偏移量的方 式来访问数组元素。 (2)记录。从逻辑上讲,记录是由已知的数据组合起来的一种结 构。一个记录通常含有若干个分量,每个分量称为记录的一个栏(或域 field)。每个分量都是一个确定类型的数据,不同的分量的数据类型可 以不同。 (3)字符串、表格、栈和队列。 (4)抽象数据类型。抽象数据类型封装了数据和操作,在面向对象 程序设计语言中,Ada通过程序包(package)提供了数据封装的支持, Smalltalk、C++和Java语言则通过类(class)对抽象数据类型提供支 持。 4、函数调用的方式

编译原理第1章绪论

编译原理第1章绪论

第1部分 绪论
第1部分 绪论
4.优化 . 优化的任务是对前阶段产生的中间代码进 行等价变换或改造,以期获得更为高效( 行等价变换或改造,以期获得更为高效(节省 时间和空间)的目标代码。 时间和空间)的目标代码。 常用的优化措施有删除冗余运算、 常用的优化措施有删除冗余运算、删除无 用赋值、合并已知量、循环优化等。 用赋值、合并已知量、循环优化等。 例如, 例如,其值并不随循环而发生变化的运算 可提到进入循环前计算一次, 可提到进入循环前计算一次,而不必在循环中 每次循环都进行计算。 每次循环都进行计算。 优化所遵循的原则是程序的等价变换规则。 优化所遵循的原则是程序的等价变换规则。
第1部分 绪论
如果编译生成的目标程序是汇编语言形式, 如果编译生成的目标程序是汇编语言形式,那么在 编译与运行阶段之间还要添加一个汇编阶段, 编译与运行阶段之间还要添加一个汇编阶段,它将编 译生成的汇编语言目标程序再经过汇编程序变换成机 器语言目标程序,如图1–3所示。 所示。 器语言目标程序,如图 所示
第1部分 绪论
汇编语言代码程序
MAIN: CLR P1.0 MOV TMOD , #00H MOV TH0 , #0DDH MOV TL0 , #18H SETB TR0 LOOP: JNB TF0 , $ CLR TF0 SETB P1.0 CLR P1.0 MOV TH0 , #0DDH ;重装载TH0和TL0 重装载TH0和 ;产生2µs正脉冲 产生2µs正脉冲 ;启动T0工作 启动T0工作 ;$为当前指令指针地址 ;设定T0的工作方式 设定 的工作方式 ;给定时器T0送初值 给定时器 送初值
return (id,指向 的符号表入口指针 的符号表入口指针); ,指向id的符号表入口指针

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

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

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)
源程序
词法分析 语法分析
单词符号 语法单位 中间代码
编译过程
中间代码生成 代码优化
中间代码(优化后)
目标代码

编译原理(第四版)第1章 绪论

编译原理(第四版)第1章 绪论

2.语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法 规则(文法规则)把单词符号流分解成各类语法单位(语法范畴), 如“短语”、“子句”、“句子(语句)”、“程序段”和“程 序”。通过语法分析可以确定整个输入串是否构成一个语法上 正确的“程序”。语法分析所遵循的是语言的语法规则,语法 规则通常用上下文无关文法描述。
5.目标代码生成
这一阶段的任务是把中间代码(或经优化处理之后)变换成特 定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。 最后阶段的工作因为目标语言的关系而十分依赖硬件系统,即如 何充分利用机器现有的寄存器,合理地选择指令,生成尽可能短 且有效的目标代码,这些都与目标机器的硬件结构有关。
(6)现代编译技术已转向并行编译的研究。
1.3 编译程序的工作过程与结构
1.词法分析
词法分析的任务是输入源程序,对构成源程序的字符串 进行扫描和分解,识别出一个个单词符号,如基本字(if、for、 begin等)、标识符、常数、运算符和界符(如“(”、“)”、“=”、 “;”)等,将所识别出的单词用统一长度的标准形式(也称内 部码)来表示,以便于后继语法工作的进行。因此,词法分析 工作是将源程序中的字符串变换成单词符号流的过程,词法 分析所遵循的是语言的构词规则。
出错处理与编译的各个阶段都有联系,与前三个阶段的联 系尤为密切。出错处理程序应在发现错误后,将错误的有关信 息如错误类型、出错地点等向用户报告。此外,为了尽可能多 地发现错误,应在发现错误后还能继续编译下去,以便发现更 多的错误。
1.4 编译程序的开发
编译程序的开发常常采用自编译、交叉编译、自展和移植等 技术实现。
第1章 绪论
1.1 程序设计语言和编译程序 1.2 编译程序的历史及发展 1.3 编译程序的工作过程与结构 1.4 编译程序的开发 1.5 构造编译程序所应掌握的内容 习题一

编译原理第一章 编译引论

编译原理第一章 编译引论
静态存储分配
动态存储分配
1> 静态存储分配
若在编译时能完全确定程序所需空间大小,并能确定每个数 据项的地址,就可在编译时分配所需空间,这种分配方法称为静态 存储分配.
内情向量表组织如下:
L1
u1
d1
L2
u2
d2
Ln
un
dn
a
c
n
elemlength
17
整理课件
3)结构类型------- 记录
是由多种类型的数据组合起来的一种数据结构。Pascal 语 言中,可如下定义一种记录类型
type < 记录类型名> = record <域名 1>:<类型1>; <域名 2>:<类型2>;
26
整理课件
1>传值 调用程序把实际参数的值传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
x1 1 y1 1 x2 4 y2 5
主程序空间
子程序空间
这种方式,子程序一般不改变实际参数的值.
27
整理课件
2>传地址 调用程序把实际参数的地址传递到形式参数的空间中.
a1 1 b1 1 a2 4 b2 5
type <类型名> = set of <基类型>; <类型名> = array of <基类型>; <类型名> = record
end;
21
整理课件
2> 变量说明段 var <变量名表<类型2>;
<变量名表n>:<类型n>; 3> 函数及过程定义
function <函数名> (参数说明):<函数类型>; <函数体>; procedure <过程名> (参数说明) ; <过程体>; 4> 赋值句

《编译原理教程》习题解析与上机指导(第四版) 胡元义章 (12)

《编译原理教程》习题解析与上机指导(第四版) 胡元义章 (12)

第一章 绪论
1.2 计算机执行用高级语言编写的程序有哪些途径?它 们之间的主要区别是什么?
【解答】 计算机执行用高级语言编写的程序主要有两种 途径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全 部翻译成机器代码程序,然后执行这个机器代码程序的方法, 而是每读入一条源程序的语句,就将其解释(翻译)成对应其功 能的机器代码语句串并执行,然后再读入下一条源程序语句并 解释执行,而所翻译的机器代码语句串在该语句执行后并不保 留。这种方法是按源程序中语句的动态执行顺序逐句解释(翻 译)执行的,如果一语句处于一循环体中,则每次循环执行到 该语句时,都要将其翻译成机器代码后再执行。
特性是无法改变的
第一章 绪论
(2) 将编译过程分成若干“遍”是为了

A.提高编译程序的执行效率
B.使编译程序的结构更加清晰
C.利用有限的机器内存并提高机器的执行效率
D.利用有限的机器内存但降低了机器的执行效率
(3) 构造编译程序应掌握

A.源程序
B.目标语言
C.编译方法

D.A~C项
第一章 绪论
(4) 编译程序绝大多数时间花在
第一章 绪论 图1-1 编译程序总框图
第一章 绪论 感谢
第一章 绪论
谢谢,精品课件 资料搜集
第一章 绪论
感谢
第一章 绪论
谢谢,精品课件
资料搜集
第一章 绪论
在编译方式下,高级语言程序的执行是分两步进行的: 第一步首先将高级语言程序全部翻译成机器代码程序,第二步 才是执行这个机器代码程序。因此,编译对源程序的处理是先 翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级语言 要快,但解释方式下的人机界面比编译型好,便于程序调试。

编译原理复习

编译原理复习

编译原理复习《编译原理》第⼀章:绪论1.翻译器:把⼀种语⾔变换到另外⼀种语⾔的软件。

这两种语⾔分别称为源语⾔和⽬标语⾔。

2.编译器:⼀种翻译器,它的⽬标语⾔⽐源语⾔低级。

3.典型的编译器可以划分成6个逻辑阶段:词法分析,语法分析,语义分析,中间代码⽣成,代码优化,代码⽣成。

4.按照对⽬标机器的依赖性,把编译过程分成前端(依赖于源语⾔,独⽴于⽬标机器)和后端(依赖于⽬标机器,独⽴于源语⾔,只与中间语⾔有关(从中间代码⽣成⽬标代码))。

5.前端包括:词法分析,语法分析,语义分析,中间代码⽣成。

6.后端包括:代码优化,代码⽣成。

7.解释器:不同于编译器的另⼀类语⾔处理器,直接执⾏源程序所指定的运算。

解释器的执⾏效率⽐编译器低,因为解释器⽆法解开循环。

8.遍:编译的⼏个阶段常⽤⼀遍(pass)扫描实现,⼀遍扫描包括读⼀个输⼊⽂件和写⼀个输出⽂件。

《编译原理》第⼆章:词法分析⼀些概念:1.词法单元:⼜称单词,是编程语⾔中合法的字符串。

2.词法记号:满⾜某种规则的词法单元,采⽤同⼀种记法——词法记号。

该规则称为模式。

3.模式:描述词法单元与词法记号对应关系的规则。

是描述源程序中某个记号的词法单元集合的规则。

4.字母表:符号的有限集合,例:∑={0,1}串:符号的有穷序列,例:0110,ε语⾔:字母表上的⼀个串集{ε,0,00,000,…},{ε},?正规式(运算符的优先级:*>连接运算>|)N F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?(∑?{ε})→P(S)4)唯⼀的初态s∈S5)终态集合F?SD F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?∑→S4)唯⼀的初态s∈S5)终态集合F?S第三章语法分析3.1 上下⽂⽆关⽂法上下⽂⽆关⽂法是四元组(V T , V N, S , P )1) V T: 终结符集合(⾮空有限集合,记号名是其同义词)2) V N: ⾮终结符集合(⾮空有限集合)3) S : 开始符号4) P : 产⽣式集合,产⽣式形式 : A →α上下⽂⽆关⽂法没有强制的顺序关系。

编译原理练习题及答案

编译原理练习题及答案

第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。

A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。

A) 一定B) 不一定3.编译程序的大多数时间是花在上。

A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。

A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。

5.编译程序各个阶段都涉及到的工作有。

A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。

A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。

A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。

A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。

A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。

10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。

A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。

A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。

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

3.语义分析和中间代码生成
这一阶段的任务是对各类不同语法范畴按语言的语义进行初 步翻译,包含两个方面的工作:一是对每种语法范畴进行静态语 义检查,如变量是否定义、类型是否正确等;二是在语义检查正 确的情况下进行中间代码的翻译。注意,中间代码是介于高级语 言的语句和低级语言的指令之间的一种独立于具体硬件的记号系 统,它既有一定程度的抽象,又与低级语言的指令十分接近,因 此转换为目标代码比较容易。把语法范畴翻译成中间代码所遵循 的是语言的语义规则,常见的中间代码有四元式、三元式、间接 三元式和逆波兰记号等。
(3) 1954~1957年,IBM John Backus带领的一个研究小组对 FORTRAN语言及其编译器进行了开发。但是,由于对编译程 序的理论及技术研究刚刚开始,这个语言的开发付出了巨大 的辛劳。与此同时, 波兰语言学家Noam Chomsky开始了他的 自然语言结构研究。Noam Chomsky根据文法(Grammar,产 生语言的规则)的难易程度及识别它们所需的算法对语言进 行了分类,定义了0型、1型、2型和3型这四类文法及其相应 的形式语言,并分别与相应的识别系统相联系。
图1–3 源程序的编译、汇编和运行阶段
用高级语言编写的程序也可通过解释程序来执行。解释程 序也是一种翻译程序,它将源程序作为输入,一条语句一条语 句地读入并解释执行,如图1–4所示。解释程序与编译程序的主 要区别是:编译程序将源程序翻译成目标程序后再执行该目标 程序;而解释程序则逐条读出源程序中的语句并解释执行,即 在解释程序的执行过程中并不产生目标程序。典型的解释型高 级语言是BASIC语言。
第1章 绪论
1.1 程序设计语言和编译程序 1.2 编译程序的历史及发展 1.3 编译程序的工作过程与结构 1.4 编译程序的开发 1.5 构造编译程序所应掌握的内容 习题一
1.1 程序设计语言和编译程序
计算机的诞生是科学发展史上的一个里程碑。经过半个 多世纪的发展,计算机已经改变了人类生活、工作的各个方 面,成为人类不可缺少的工具。计算机之所以能够如此广泛 地被应用,应当归功于高级程序设计语言。计算机语言之所 以能由最初单一的机器语言发展到现今数千种高级语言,就 是因为有了编译程序。没有高级语言,计算机的推广应用是 难以实现的;而没有编译程序,高级语言就无法使用。编译 理论与技术也是计算机科学中发展得最迅速、最成熟的一个 分支,它集中体现了计算机发展的成果与精华。
(6)现代编译技术已转向并行编译的研究。
1.3 编译程序的工作过程与结构
1.词法分析
词法分析的任务是输入源程序,对构成源程序的字符串 进行扫描和分解,识别出一个个单词符号,如基本字(if、for、 begin等)、标识符、常数、运算符和界符(如“(”、“)”、“=”、 “;”)等,将所识别出的单词用统一长度的标准形式(也称内 部码)来表示,以便于后继语法工作的进行。因此,词法分析 工作是将源程序中的字符串变换成单词符号流的过程,词法 分析所遵循的是语言的构词规则。
一个高级语言程序的执行通常分为两个阶段,即编译阶段 和运行阶段,如图1–2所示。编译阶段将源程序变换成目标程序; 运行阶段则由所生成的目标程序连同运行系统(数据空间分配子 程序、标准函数程序等)接受程序的初始数据作为阶段
如果编译生成的目标程序是汇编语言形式的,那么在编译 与运行阶段之间还要添加一个汇编阶段,它将编译生成的汇编 语言目标程序再经过汇编程序变换成机器语言目标程序,如图 1–3所示。
(4)20世纪70年代后期和80年代初,大量的研究都关注于编 译器其他部分的自动生成,其中包括代码生成。
(5)现今编译器的发展包括了更为复杂的算法应用程序, 它用于简化或推断程序中的信息,这又与具有此类功能的更 为复杂的程序设计语言发展结合在一起。其中典型的有用于 函数语言编译Hindley-Milner类型检查的统一算法。目前,编 译器已经越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,这个开发环境包 括了编辑器、链接程序、调试程序以及项目管理程序。尽管 近年来对IDE进行了大量的研究,但是基本的编译器设计在近 20年中都没有多大的改变。
4.优化
优化的任务是对前阶段产生的中间代码进行等价变换或改 造,以期获得更为高效(节省时间和空间)的目标代码。常用的优 化措施有删除冗余运算、删除无用赋值、合并已知量、循环优 化等。例如,其值并不随循环而发生变化的运算可提到进入循 环前计算一次,而不必在循环中每次循环都进行计算。优化所 遵循的原则是程序的等价变换规则。
图1–4 解释程序解释执行过程示意
1.2 编译程序的历史及发展
(1) 20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面 的开创性工作,计算机可以执行编写的一串代码或程序,这 些程序最初都是用机器语言(Machine Language)编写的。
(2)用机器语言编写程序很不方便且容易出错,因此这种 代码形式很快就被汇编语言(Assembly Language)取代。在 汇编语言中,指令和存储地址都以符号形式给出。
5.目标代码生成
这一阶段的任务是把中间代码(或经优化处理之后)变换成特 定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。 最后阶段的工作因为目标语言的关系而十分依赖硬件系统,即如 何充分利用机器现有的寄存器,合理地选择指令,生成尽可能短 且有效的目标代码,这些都与目标机器的硬件结构有关。
2.语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法 规则(文法规则)把单词符号流分解成各类语法单位(语法范畴), 如“短语”、“子句”、“句子(语句)”、“程序段”和“程 序”。通过语法分析可以确定整个输入串是否构成一个语法上 正确的“程序”。语法分析所遵循的是语言的语法规则,语法 规则通常用上下文无关文法描述。
相关文档
最新文档