编译原理复习提纲.docx
- 文档编号:8289741
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:12
- 大小:96.27KB
编译原理复习提纲.docx
《编译原理复习提纲.docx》由会员分享,可在线阅读,更多相关《编译原理复习提纲.docx(12页珍藏版)》请在冰豆网上搜索。
编译原理复习提纲
第一章
程序设计语言的发展:
机器语言—>汇编语言(汇编程序)—>高级语言(编译程序)
翻译汇编语言的程序称为汇编程序(汇编器)
翻译高级语言的程序称为编译程序(编译器)
高级语言的特点:
1、直观、自然、易于理解
2、易读、易写、易于交流、出版和存档
3、一般都是独立于机器的,易于移植
三种程序:
源程序——>编译程序——>目标程序
三种语言:
源语言——>编译语言——>目标语言
语言分类(按照语言设计的基础理论):
命令式语言(强制式语言)-其基础为冯诺依曼模型、
函数式语言-数学函数、
逻辑式语言-数量逻辑谓词演算、
对象式语言-抽象数据类型
(按照语言的发展历程):
第一代语言—机器语言,依赖于机器的指令系统
第二代语言—汇编语言,机器语言的符号化
第三代语言—高级语言(命令式语言,过程式语言)
第四代语言—说明性语言,告诉机器做什么(SQL)
新一代语言—如函数式和逻辑式语言
冯.诺依曼体系结构的特点:
1、数据或指令以二进制形式存储
2、“存储程序”的工作方式
3、程序顺序执行
4、存储器的内容可以修改
冯.诺依曼体系结构在命令式语言上的表现:
1、变量:
存储单元及它的名称由变量的概念来代替,可以代表一个或一组单元,可以修改。
2、赋值:
计算结果必须存储。
3、重复:
因语句顺序执行,指令存储在有限的存储器中,完成复杂计算时必须重复执行某些指令序列。
实体:
变量,子程序,语句等均为实体
实体属性:
实体具有的特性
绑定:
一个对象(或事物)与其各种属性建立起某种联系的过程称为绑定。
绑定时间:
把对象(实体)与他的某种属性联系起来的时刻,叫绑定时间
静态绑定:
凡是在编译时能确定的特性,称为静态特性;若绑定在编译时完成,运行时不改变,称为静态绑定。
动态绑定:
凡是在运行时才能确定的属性称为动态特性;若绑定在运行时完成,称为动态绑定。
描述符:
用以描述实体的属性的符号、语句或表格等。
亦即实体到属性的映象。
(内情向量?
)
变量的属性:
1、名字、
2、作用域(指可以访该变量的程序范围):
静态作用域绑定:
按照程序的语法结构定义变量的作用域。
动态作用域绑定:
按照程序的执行动态地定义变量的作用域。
3、生存期(一个存储区绑定于一个变量的时间区间):
数据对象—存储区和他保存的值
分配—变量获得存储区的活动
4、值(变量对应于存储区单元的内容):
关于变量的值的主要问题:
●匿名变量的访问通过指针实现
●变量与它的值的绑定是动态的
●符号常数的值不能修改(冻结)
●变量的初始化,几种处理方法:
不初始化则出错
随机
缺省值0
5、类型(变量的类型是与变量相关联的值的类,以及对这些值进行的操作的说明):
变量类型的绑定:
静态绑定:
通过说明语句完成(pascal,fortran,c)
动态绑定:
执行时隐式说明,且动态变化(apl)
(变量是对一个(或若干个)存储单元的抽象,赋值语句则是修改存储单元内容的抽象。
)
虚拟机:
由实际机器加软件实现的机器。
实际机器——执行二进制机器语言
实际机器+汇编程序——执行汇编语言的虚拟机
实际机器+汇编程序+高级语言编译程序——执行高级语言的虚拟机
程序单元:
程序执行过程中的独立调用单元(如子程序、分程序、过程等)。
单元的表示:
在编译时,单元表示是该单元的源程序。
运行时,单元表示由一个代码段和一个活动记录组成,称为单元实例
活动记录:
执行单元所需要的信息,以及该单元的局部变量所绑定的数据对象的存储区。
非局部变量:
一个程序单元可以引用未被本单元说明而被其它单元说明的变量
引用环境:
局部变量+非局部变量
别名:
同一单元的引用环境中有两个变量绑定于同一数据对象,称这些变量具有别名(Pascal的变参使得形参和实参共享同一数据对象)
副作用:
对绑定于一个非局部变量的对象进行修改时,将产生副作用
程序单元可以递归激活,从而一个单元可以有很多个实例,但代码段相同。
不同的仅仅是活动记录。
在递归激活的情况下,活动记录和他的代码段之间的绑定必须是动态的!
第二章
数据类型:
实质上是对存储器中所存储的数据进行的抽象。
它包含了一组值的集合和一组操作。
数据类型的作用:
1、实现了数据抽象数据类型分类:
内部类型(语言定义的)
2.使程序员从机器的具体特征中解脱出来自定义类型(用户定义的)
3.提高了编程效率
内部类型的优越性:
1、基本表示的不可见性(基本位串对程序员是不可见得,优点:
不同的程序设计风格;可写性;可读性;可修改性)。
2、编译时能检查变量使用的正确性
(进行静态类型检查,如非法运算,形实参类型匹配)
3、编译时可以确定无二意的操作
(超载(多态)的概念:
运算符的意义依赖于操作数的类型。
如“+”可以表示整数加或实数加;
编译时,可拒绝混合运算,或提供类型转换指令;
合理地使用超载,可以提高语言的可读性和可用性。
)
4、精度控制(可以通过数据类型显式定义数据的精度)
特点:
内部类型反应基本硬件特性;
在语言级,内部类型是公用某些操作的数据对象的抽象表示。
用户自定义类型:
1、笛卡尔积(定义:
N个集合A1,A2,…,An的笛卡尔积表示为A1A2…An,它是一个集合,其元素为(a1,a2,…,an),其中aiAi)
【注意:
语言把笛卡尔积数据对象看成由若干个域组成,每个域有一个唯一的名字;通常用域名来选取域,对它进行修改;】
2、有限映射:
(定义:
从定义域类型DT(domaintype)的值的有限集合,到值域类型RT(rangetype)的值的有限集合的函数称为有限映像(射))
【在高级语言中通常体现为数组构造,值域对象通过下标选取】
3、序列:
(定义:
序列由任意多个数据项组成,这些数据项称为该序列的成
分,且类型相同(记为CT))
【如:
串,顺序文件】
4、递归:
(定义:
若数据类型T包含属于同一类型T的成份,那么类型T称为递归类型。
)
【特点:
允许在类型定义中使用被定义类型的名字;指针是建立递归数据对象的重要手段。
如:
二叉树】
5、判定或:
(定义:
判定或是一个选择对象结构的构造机制,规定在两个不同选择对象之间作出适当的选择;每一选择对象结构称为变体。
)
【如:
PASCAL和ADA中的变体记录;C和ALGOL68中的联合。
】
6、幂集:
(定义:
类型T的元素所有子集的集合,称为幂集,记为Powerset(T),T称为基类型。
)
在语言中对应的构造:
小结:
1.程序语言允许程序员以上六种机制来定义复杂的数据对象(新的类型);
2.新的类型可以通过非显式的方式说明,也可通过显式的方式说明;
3.显示定义有如下优点:
可读性(选择名字)
可修改性(不修改变量说明)
可分性(重复使用)
一致性检查
PASCAL语言数据类型结构:
1、非结构类型(内部类型integer,real,boolean,char,用户自定义类型)
有序类型——每一个元素都有唯一的前驱和后继(整型,布尔型,字符型)
2、聚合类型(数组构造,记录构造,集合构造,文件构造)
变体记录的特点:
改变一个变体记录的标识符,在概念上建立了一个新记录;
变体记录在同一块存储区上重叠存放所有变体;
变体记录允许程序员根据每个变体的类型,以不同的观点来解释存储在该区域中的位串;
Pascal变体记录的缺点:
使用变体记录不安全
同一存贮区对应不同的名字和类型
编制程序依赖于实现
标识符域的标识符可省缺
3、指针(PASCAL指针只能指向匿名数据对象,不能指向在栈上分配的的单元)
C语言数据类型结构:
1、非结构类型(内部类型—整型、实型、字符型,用户自定义类型)
2、聚合构造(数组,结构,联合,文件)
3、指针(注意:
C语言中没有空指针,对指针赋0值来表示空)
4、空类型(用于表示一个无返回值的函数,表示一个不确定类型的指针)
Pascal语言的数据类型结构C语言数据类型结构
用户定义类型与内部类型的异同:
1、都建立某种基本表示的抽象,内部类型是对(硬件)二进制位串的抽象,用户自定义类型是对内部类型和已定义的用户自定义类型作为基本表示的抽象
2、每一类型都关联一组操作
3、内部类型隐蔽了基本表示,不能对它的成分进行操作;用户定义类型具有更高级别的抽象,可以对其基本表示的成分进行操作
抽象数据类型:
定义1、在实现该类型的程序单元中,建立与表示有关的基本操作
2、对使用该类型的程序单元来说,该类型的表示是隐蔽的
C++——类(类得实例称为对象)
类型检查:
对数据对象的类型和使用的操作是否一致的检查。
静态检查——在编译时进行的检查
动态检查——在运行时进行的检查
无类型语言——语言没有类型定义
弱类型语言——语言的类型检查不能全部在编译时完成,有些要在运行时才能完成
强类型语言——语言的类型检查全部在编译时完成
(Pascal是非强类型语言)
类型转换:
将一个类型的值转换成另一个类型的值
拓展——转换之后的类型值的集合包含转换之前的类型值的集合
收缩——转换之前的类型值的集合包含转换之后的类型值的集合(截断,舍入法)
类型等价:
若T1和T2是两个类型,且T1的任何值都可以赋予T2类型的变量,T1类型的实参可以对应类型T2的形参,反之亦然,则称T1和T2是相容的,或等价的。
、
(名字等价,结构等价)
实现模型:
在实现模型中,数据用描述符和数据对象来表示;描述符用来描述数据对象的所有属性。
第三章
控制结构:
程序员用来规定程序各个成分的执行流程的控制部分
语句级控制结构——是语言用来构造各种语句执行顺序的机制。
(顺序,选择,重复)
不同语言case语句的差异:
☐ALGOL68中,case语句基于整表达式的值,表达式的值为i,则选择第i个分支执行。
☐PASCAL显式列出可能的值,表达式的值与分支的值相同时,选择该分支。
每个分支在case中出现的次序是无关紧要的。
☐表达式的值不在显式列出的值中时的处理:
out和otherwise;
语句级控制结构——语言用来构造各种语句执行顺序的机制
单元级控制结构——规定程序单元之间控制流程的机制
1、显示调用:
①显示调用—由调用语句使用被调用单元的名字来进行调用(位置绑定,关键字绑定)
2、异常处理:
②隐式调用(异常处理)
异常——指导致程序正常执行中止的事件,要靠发信号来引发,用异常条件来表示,并发出相应的信号,引发相应的程序。
3、协同程序——两个或两个以上程序单元之间交错的执行,这样的程序成为协同程序
4、并发单元:
诸程序单元并行活动
副作用:
1.副作用降低了程序的可读性
2.副作用限制了数学运算律的使用
3.副作用影响目标代码的优化
进程与程序的区别:
1、进程是动态的,程序是静态的:
程序是有序代码的集合
进程是程序的执行
2、进程是暂时的,程序的永久的:
进程是一个状态变化的过程
程序可长久保存
3、进程与程序的组成不同:
进程的组成包括程序、数据和进程控制块(即进程状态信息)
4、进程与程序的对应关系:
通过多次执行,一个程序可对应多个进程;
通过调用关系,一个进程可包括多个程序。
第四章
语言=语法+语义(所有句子的集合;语法图能识别的所有终结符序列的集合)
语法:
用以构造程序及其成分的一组规则的集合(定义语言是否合法的一组规则)
语义:
用以规定语法正确的程序或其成分的含义的一组规则的集合
(语义——定义语言合法句子的含义,即句子的作用和意义)
GAM语义的描述——指令指针+代码存储器C+数据存储器D)
文法:
定义语言语法的形式化规则
字母表——语言允许使用字符的集合,其元素称为字符
符号——由字符组成的有限串(字符串)
字汇表——由符号组成的集合,其元素称为字
词法规则——规定什么样的字符串可以构成语言的有效符号
语法规则——确定一个符号序列是否为一个句子,并提供句子的结构(什么样的符号序列是合法的)
语法描述的基本用途:
1、表达语言设计者的意图和设计目标
2、指导语言的使用者如何写一个正确的程序
3、指导语言实现者如何编写一个语法检查程序来识别所有合法的程序
文法:
文法是描述语言的语法结构的形式规则,必须准确,易于理解,且描述能力强。
G=(VT,VN,S,P)
VT是非终结符的集合;
VN是终结符的集合;
SVN是开始符号;
P是产生式的非空有限集
文法分类:
0型文法——产生式形如→
1型文法——│α│<=│β│(S→例外)或产生式形如αAβ→αβ,V+(上下文有关文法)
2型文法——产生式形如A→α(上下文无关文法)
3型文法:
产生式形如A→α或A→αB(正则文法,右线性文法)VT
文法的重要特性——用有限规则描述无穷语言
文法的等价——两个文法G和G’L(G)=L(G’),则称G和G’等价
句型——设文法G=(VT,VN,S,P),若Sα,αV*,则称α为文法G的一个句型。
句子——若上述αVT,则称α是一个句子,即只含终结符的句型是一个句子。
文法G=(VT,VN,S,P)的句子的全体,称为由文法G产生的语言,记为L(G),即L(G)={α│Sα其中αVT}
短语——设αβ是上下文无关文法G的一个句型,如果有SαA,并且Aβ,则称β是句型αβ关于非终结符A的一个短语,或称β是句型αβ的一个短语。
直接短语——Aβ
句柄——一个句型的最左直接短语
素短语——含有终结符的短语,并且它的真子传不具有这个特性。
标识符
<标识符>→<字母>
<标识符>→<标识符><字母>
<标识符>→<标识符><数字>
<字母>→A|…|Z|a|…|z
<数字>→0|…|9
表达式
<表达式>→<标识符>
<表达式>→(<表达式>)
<表达式>→<表达式><运算符><表达式>
<运算符>→+|-|*|/
推导与规约:
①直接推导:
αβα,即由产生式右边替换产生式左边
②推导:
α1αn、α1αn
③归约:
推导的逆过程
逻辑表达式:
关系表达式:
算术表达式:
说明语句——不生成目标代码,用来告诉编译程序一些实体的属性(变量说明,类型说明)
执行语句——生成目标代码(赋值语句,控制语句,复合语句)
第七章
翻译:
将一种语言编写的程序转换成完全等效的另一种语言编写的程序的过程称为翻译。
在计算机中,翻译由一个程序来实现,称为翻译程序
解释:
不将源程序翻译成目标程序,而是一边分析,一边执行,这种翻译方法称为解释。
实现解释的程序,称为解释程序(优缺点:
1.特别适合于动态语言和交互式环境,便于人机对话;2.解释器边解释边执行,重复执行的程序需要重复翻译,比编译执行花费更多时间,执行效率低)
宿主语言——编写编译程序的语言称为宿主语言;源语言、目标语言、宿主语言通常是不同的语言;
宿主机——运行翻译程序的机器
自驻留——编译程序能生成可供其宿主机执行的机器代码
自编译:
——编译程序是用源语言写的
交叉编译:
——编译程序生成的不是宿主机的机器代码,而是别的机器代码
词法分析:
输入字符串,根据词法规则识别出单词符号。
语法分析:
根据语法规则,将单词符号构成各类语法单位,并进行语法检查。
语义分析:
根据语义规则,进行初步编译。
优化:
对中间代码进行等价变换,以使代码更有效。
目标代码生成:
生成机器语言程序或汇编语言程序。
符号表管理:
完成符号表的建立,查找,更新。
出错处理:
发现、指出、限制
第八章
词法分析功能:
扫描源程序的字符串,按照词法规则,识别出单词符号作为输出;对识别过程中发现的词法错误,则输出有关的错误信息。
二元式(单词类别,单词的属性)
单词类别——区分单词所属的类(证书编码):
标识符、基本字、常数、运算符、界符
单词的属性——单词的值
词法分析器和语法分析器的关系:
1.词法分析器作为单独的一遍
2.词法分析器作为子程序
超前搜索——为了判定一个单词符号的类别,必须扫描到某一个地方,而该单词符号并没有这么长,这种扫描方式叫“超前搜索”
状态转换图!
!
!
第九章
FIRST集:
对α(VTVN)*,有FIRST(α)={a|αa...,aVT}.若αε,则εFIRST(α)
FOLLOW集:
对AVN,有FOLLOW(A)={a│S...Aa...,aVT}。
若S...A,则#FOLLOW(A),其中S为开始符号.
LL
(1)文法:
①FIRST(i)FIRST(j)=Φ,ij,i,j=1,2,...,n。
②若i,则FIRST(j)FOLLOW(A)=Φ,ji,j=1,2,...,n
预测分析表:
对每个产生式A→α
①对aFIRST(α),将A→α记入M[A,a]中;
②若εFIRST(α),对bFOLLOW(A),将A→α记入M[A,b]中;
③凡未被定义的M[A,a]项中标以出错标志。
第十章
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 复习 提纲