编译原理复习提纲整理.docx
《编译原理复习提纲整理.docx》由会员分享,可在线阅读,更多相关《编译原理复习提纲整理.docx(38页珍藏版)》请在冰豆网上搜索。
编译原理复习提纲整理
说明
1.这份资料的最初来源是王金伟老师给大家发的复习提纲,我在下面会给大家附一份原版,后面的21面资料是在那个的基础上整理和细化得到的。
最初做这份资料的目的是我本人作为班长为了帮助我们班的同学顺利通过考试而整理的。
听王老师说有想法留给学弟学妹们用,我放假后又对一些内容进行了修正和改进,得到了大家看到的这个版本
2.这份资料加入了很多我个人的理解。
与原提纲相比,我增删了一些内容,并对某些内容进行了调序与合并。
3.这份资料融入了老师平时上课的以及最后复习课给的,更重要的是我个人的理解和猜测。
大家或许都有感受,觉得编译原理书上或者上说的句子根本看不懂。
针对这个问题,我把很多晦涩难懂的形式化的算法通过我的理解后用比较形象易懂的话表述了出来,表述得可能并不科学严谨,但我的目的是为了能帮助大家做题和考试
4.里面的每一个考点我都在最后用括号加了注释,方便不同起点不同准备时间的同学进行选择,这里简单说明
“了解”:
代表这一部分的内容被老师列在提纲内,但其实并不太影响大家对大题的计算;并且据我的分析也并不太可能出小题所以时间很紧的同学可以略看就好,当然看看还是有好处的。
“小题”一类的字样代表这一块的知识点值得出填空选择,大家1/47
有时间应该理解性的记忆下来(在2012年的期末考试上,选择为1分*10题;填空为1分*10题,判断改错为2分*5题,小题总计30分)
“简答”:
老师在最后复习课上说过编译原理是有简答题的,简答不同于计算,很可能是让你默写一些步骤。
所以这一块内容大家需要背诵,即使不理解也要背下来(在2012年的期末考试上,简答题的分值为5分*4题=20分
“铺垫”“大题步骤”等代表这一块的内容对于综合大题的做题是必须了解的,或者其实就是做大题的分解步骤,这些块的内容是所有人必须看懂并且记下来的
“实际大题”:
总共列出的有4道,应该每年考察的都会是这4中题型,每一道的分值都在12~15分左右,是所有人想通过考试所必须攻克的。
这里通常我会标出他需要用到之前的哪些哪些知识点(2012年期末考试4道题的总分值为50分)
5.如果大家想去打印,最好在装有2007及以上的机器上打印,否则有些符号可能会显示不出来。
建议大家去生活广场找机器打,不要去景元鸿
6.由于时间仓促,这份资料做的并不完善和严谨,难免有错漏之处,希望大家谅解。
大家可以一边看我的这份资料,一边看老师最后给的两套,课本来不及就别看了。
真心希望这份资料能对大家有用,祝大家都考得好。
2/47
最后说一句,我们去年编译原理考得好的人挺多的,其实也不是很难,没有人挂!
本人惭愧,只有89,考得比我好的多太多了。
总结原因是把时间花在了研究大题上面,小题的很多知识点都没有背熟,随便错了几个小题就基本和90无缘了。
10计1王成正
2012/7/9
(老师给的提纲原版)
概述一、1.编译方式与解释方式区别:
是否生成目标代码
2.编译程序总框架
词法分析二、
状态转换图的功能:
识别(接受)一定的符号串(单词)1.状态转换图的程序实现的思路:
为每个状态结点都编写一2.个子程序
字母表的概念:
一般用∑表示3.闭包的概念:
闭包V*中的每个字都是由V中的字经过若干4.3/47
次连接而成的
上所有符号串的集合正则闭包的概念:
是V5.定义:
表示∑上所有字的全体,空字ε也包括在其中∑*6.ε∑+空字ε不包含,非7.之间的区别ε,{},{}ε8.
}ε所对应的正规集为{ε9.
正规式与正规集的定义:
知道如何用正规式表示一个正规10.集
简述和的定义与区别11.
的某些结点既是初态结点又是终态结点,或者存在一若M12.εε通路,那么空字条从某初态结点到某个终态结点的所识别可为M
正规式与优先自动机的等价性13.,MV2.对于∑上的每一个正规式,存在一个∑上的定理14.L(M)(V)使得
的化简的概念和方法:
终态和非终态是可区别的,因M15.ε为终态可以读出空字ε,而非终态不能读出空字
课后作业一个例题16.
yy}上所有倒数第二个字符为,构造一个,它接受∑={x17.的字符串
语法分析三、
(1)基本定义
4/47
上下文无关文法的定义1.句型、句子的概念2.文法和语言的对应关系,给出文法构造语言,文法G产生3.的句子的全体是该文法的语言
语法分析树与二义性:
判断文法的二义性方法:
如果一个4.文法含有二义性的句子(对应两棵不同的语法树),则称该文法是二义性文法
3型文法是正规文法、正则文法、线性文法5.2型文法也称为称为上下文无关文法6.若一个文法是递归的,则由它产生的语言的句子个数是无7.限的
(2)自上而下
8.文法左递归的定义
9.消除文法的左递归的方法:
直接左递归
10.消除回溯的方法:
提取公共左因子
11.递归下降分析法的概念,应满足什么条件?
12.递归下降法对文法的每个非终结符构造一个相应的子程序
13.预测分析法:
给文法构造预测分析表:
消除左递归、消除回溯、集、集。
举例子时,便成S→(T)
(3)自下而上
14.短语、直接短语的概念
5/47
15.句柄的概念(一个句型的最左直接短语)
16.规范归约(最左)、规范推导(最右)、规范句型
17.规范归约的关键问题是寻找句柄
18.在规范归约中,可归约串必出现在栈顶
19.算符文法、算符优先文法的概念,如何判断
20.构造算符优先关系表、、集合,可不考虑#号
21.素短语:
算符优先归约的关键问题是寻找最左素短语
22.算符优先法尤其适用于表达式的分析
23.给出文法G(P)
X→
Y→
Z→
24.该文法是否为算符优先文法?
请根据、集合构造算符优先关系表说明之(12分)
25.优先函数的优点:
便于比较,节省空间
26.优先函数的构造方法
27.欲构造行之有效的自上而下分析器,则必须消除文法中含有的左递归
28.分析法属于自底向上分析方法
29.从文法出发构造(0)分析表的步骤
四、语义分析
1.综合属性和继承属性概念
6/47
五、中间代码生成
1.中间代码是一种面向语法,易于翻译成目标代码的代码
2.后缀式(逆波兰式)的概念
3.逆波兰式中各运算法出现的顺序与实际运算顺序一致
4.后缀式与抽象语法树(表达式树)的关系
5.的含义
6.四元式表示方法,联系时通过临时变量,可以翻译各种语句
7.将赋值语句表示成后缀式和四元式
六、代码优化
1.简述代码优化的原则与优化的级别,并列举三种常用的优化技术
2.基本块、流图的概念,如何画、节点对应基本块
3.局部优化的方法,是对基本块进行优化的有效工具
4.P285中间注意
5.不变运算的代码外提的条件
6.循环优化中的强度削弱的含义
七、目标代码生成
1.编译程序生成的目标程序种类
一:
概述编译方式与解释方式区别(小题)1.
7/47
在于是否生成目标代码,编译方式生成了目标代码。
)2.编译程序总框架(简答题,背!
二:
词法分析1.状态转换图的功能:
(较重要铺垫)
识别(接受)一定的符号串(单词)
上图是一个很简单的状态转换图。
上图代表:
状态0通过X弧可以转换到状态1,通过Y弧可以转换到状态2
(较重要铺垫)2.字母表的概念:
一个由有限元素组成的集合,每个元素称为一个符号或一个字,一般用∑表示一个字母表
例:
∑={a,b,c}
元素:
a,b,c
字母表中的字可拼接在一起构成一个序列,如等,符号的顺序不同所代表的序列也不同。
8/47
不包含任何字符的序列称为空字,用ε来表示
另外有几个概念必须先了解:
字(符号串)的连接
设x和y是两个字(符号串),则定义为他们的连接
例:
和连接是
注:
(1)ε(空字)是连结运算的恒等元素εx=xε=
x
(2)字(符号串)的n次连接
=…x
0
=ε规定x
321=xx=x,x,
集合的(连接)积,(符号串)的集合”设U和V是两个“字
积)(连接则定义为他们的
V}y∈{∈U且
{a,},{b,},例:
设
{,,,}则
积记为:
次)(连接V集合的n
=VVV…V
n个
0={ε}V规定
,那么{a,b}例:
设
9/47
0={ε}V
1={}V
2{}V
32{,V
}
(较重要铺垫)闭包的概念:
3.
是一个字(符号串)的集合,V设
*,的闭包定义为V则V
21*0∪…V=V∪V∪V
*中的字经过有限次连接中的每个字都是由VV注:
闭包
而成的
正则闭包的定义为
*
=
因为闭的,ε闭包与正则闭包的差别在于,闭包里是含有0
而正则闭包由于在闭包的基础上又连接了包里有集合V,的。
,所以正则闭包里是没有空字εV一个
*定义:
表示∑上所有字的全体,空字ε也包括在其中∑表示∑上所有字的全体,但不包括ε+∑
之间的区别(小题)},{ε{}4.ε,
空字:
表不包含任示何字符的序列称ε
:
表示一个空集{}
的集合ε}{ε:
表示含有空字
10/47
(较重要铺垫)正规式与正规集的定义:
5.
我们可以把具有相同特征的字放在一起组成一个集合,即所谓的正规集
然后使用一种形式化的方法来表示正规集,即所谓的正规
式
正规式是描述单词结构的一种形式;
正规集是该类单词的全集。
举例
个的含义,4对于下面的例子,大家应该好好思考一下后面对做大题是很有帮助的。
做大题时,题目通常会给你一个你需要先把他要实现的功能抽象成一个正规集,实际问题,再用正规式表达出来,才能继续做后面的步骤。
ε所对应的正规集为{ε}
6.简述有限自动机和的定义与区别(重要铺垫)
代表非确定的有限自动机;代表确定的有限自动机
11/47
所谓的有限自动机,大家一定觉得这个概念坑爹死了。
其实他并不代表任何实体的机器,只是一种数学模型而已。
就像函数、数列是一种数学模型一样。
函数通过函数表达式实现他的功能:
你给他一个自变量,他能根据表达式求出因变量的值。
而有限自动机是通过状态转换图来实现功能,你给他一个初始状态和一个输入符号,他能根据你输入的这个符号将原状态转换到另一个状态,用他来模拟计算机的识别功能。
下面简单介绍一下(确定的有限自动机)的五元式表示法:
(重要)
定义:
一个确定有限自动机()M是一个五元式:
M=(S,∑,f,s,F),其中0S是一个有限的状态集合,它的每个元1)素我们称为一个状态
∑是一个有穷的输入符号的字母表,2)它的每个元素我们称为一个输入字符
f是从S×∑→S的单值部分映射3)s是S的一个元素,为初始状态,它是4)0唯一的
状态集合F是终止状态的集合,它是S5)的子集(可空)
一个非确定有限自动机()M是一个五元式
12/47
,其中M=(S,∑,f,S0,F)
它的每个元素我们称为一个状⑴S是一个有限的状态集合,态
⑵∑是一个有限的输入符号的字母表,它的每个元素我们称为一个输入字符
的幂表示S*→2S的部分映射,其中,2S是从⑶fS×∑是非M是非单值的的子集组成的集合)(fà集合(所有S确定)
的子集S⑷状态集合S0是初始状态集合,它是
的子集S⑸状态集合F是终止状态的集合,它是
这是4),其他几点都差不多,注:
和的区别在于(3)和(,大家要记住他们的区别和联系有可能出简答题的
的识别功能(小题)7
如果存在一条从初态结点到某个终态中任何字α,对于∑*则,结点的道路,这条路上所有的标识符连成的字等于α
)所识别(接受,读出α可被M
的某些结点既是初态结点又是终态结点,或者存在一M若ε通路,那么空字条从某初态结点到某个终态结点的ε可为M所识别
8.状态转换图的分裂规则(大题步骤)
13/47
这里Y有两个圈圈代表他是最终状态的点)例子:
(
14/47
划到最后要求每条弧上都只有一个字母或者数字
=ε(J)的构造方法(大题步骤)9.ε(I)和
这里先需要了解几个定义
,这个集合中含有不同的I我们假设有某个状态集状态。
(I,a)弧转换:
状态集定义1I的a
一是一个状态集,是从I中的状态出发经过?
弧到达的状态的全体。
条a
闭包:
ε(I)ε(空字的定义2状态集I)
是一个状态集,由两部分组成:
状态集I中的所有原状态。
?
15/47
弧,所ε中的状态出发经过任意条从I?
能到达的状态的全体。
3=ε((I,a))定义
是一个状态集。
?
下面给出一个实例:
?
求2}例:
有如下一个状态转换图假定{1,=,
()={5,4,3}
{5,4,3,6,2,7,8}ε(J)=
弧转换,将求得的状态再求空字闭包)(即先做a
这个状态集合后,I本知识点旨在让大家掌握在知道了怎样求
如何用子集法将非确定的有限自动机确定化(大题步骤)10.
方法:
先画一张表
I…16/47
ε(S0)BCA
…EDB
GFC
I这张表的首行上首列上固定是大写字母1.
表格后面有几列,取决于这个有限自动机的输入符号数2.代b的下标a量,有几个输入符号就有几列,这里假设
表这个有限自动机的输入符号
代表的是这个有限自动S03.第二行的第一列也是固定的,的空字闭包,我们假设求出来的状即求S0机的初始状态,A态集合是
C和B所对应的分别求出来,我们假设是4.将A
作为新的状态CB,C和都分别于A不同,需要将5.如果B集合加入到第一列中
,再检验:
对于这四个状态所对应的B和C继续求出6.
加入到第一列的下面,如果有,集合,有没有与是不同的,再继续计算,如果与前面的相同就不再需要加入了。
按照这样的方法一直进行下去,知道第一列不再有新的7.状态集合加入了,这个表就构造好了。
再画一张表,与上面的表相对应8.
Sab17/47
201143432
123
4……对于上面这种表的构造方法很简单,大家也可以不另外9.画表,而直接标在原来的表中
,···这种表来源是,在原来表的第一列上分别表上s01234不变,然后按照第一列中数字所对应的状态集,依ba和对应次对应在后面的列上标上相应数字。
例如第一列中B,第三也标上1对应2,那么将第二列第二行中的B1,C,等等。
2标上列第二行中的C
就可以按照这个画出下面的这个表或在原表中标好后,10.状1a弧转换成0表画出状态转换图了,例如,状态通过状弧转换成3状态;1状态通过a弧转换成态,通过b2状态,等等。
画出这个状态转换图4态,通过b弧转换成后,就完成了一个非确定有限自动机的确定化。
有限自动机的化简(大题步骤)11.
分析:
这是一块用文字很难表述清楚的内容,并且在实际的化简中如果题目难度大是很容易出错的,但是期末考试通常不会太复杂,整体的思路如下:
步中得到的已经确定的中的所有状态分为将第1.10两组,一组为终态节点,一组为非终态节点。
需要补那一列的节点哪充的是,在上一步构造的表格中,s18/47
些是终态哪些是非终态呢?
这需要看你最初构造的正规式中的哪个是终态节点了。
例如在下面的12中,Y为终态节点,那么在以上的表格中只要是含有Y元素的状态集合都将成为终态集。
2.将每个分组检验,看他们是否还能分割,检验的方法实在难以用文字描述清楚,请大家看下面的实际例题,自己领会。
3.每个分组都不能再分割后,若还含有大于2个元素的分组,则这个分组中的所有状态都是等价的,可以用其中的一个代替他们,代替的方法是:
假设用状态1代替状态2,则把状态2及其引出去的弧全部删去,并把原来指向状态2的弧指向状态1
下面是老师复习上的一个例子,这是一个较为复杂的例子,可能会看不懂,大家多问一问周围会的同学,期末考试时,肯定不会出这么复杂,通常在将终态节点和非终态节点区分开后,剩下的就已经快分好了,所以大家不用太担心,化简也是有可能不考察的,大家看清题目要求。
例:
19/47
20/47
实际大题12.
yy}上所有倒数第二个字符为例题:
构造一个,它接受∑={x,的字符串
希望大家能在这里还是想先说明一下这道题的解题思路和步骤,让大家真正明白这样的一道大题是应真正明白整个解题的过程,2012该怎么做的(具体的完整解答过程这里不贴出来了,这是但是本以为会考原题,年考试之前老师复习课上给的一道题目,*
的题,0|10)最后考的是一个(
也大家也可以看老师复习上给出的例题,都是非常经典的例题!
是有可能出原题的)
上面这道题的分析思路是
根据他所描述的功能,构造出一个正规式,正规式先给1.*y()()大家:
(其实对于这样的大题最关键就是构造对正规式,大家一定把老师最后的上所有的例题是如何构造正规式的都记下)来!
这一步做不出来后面的都没分了!
,将正规式写在他Y和和最终状态2.构造一个初始状态X们的转换弧上。
点中的分裂规则对他进行分裂,分裂直到每一8按照第3.条转换弧上都只含有一个字符
21/47
4.分裂结束得到的一个状态转换图实际上就是一个(非确定的有限自动机)
5.在掌握了第9点知识的前提下,就可以按照第10点说的步骤,将求得的确定化
6.得到确定化之后的状态转换图,剩下的事情就是化简了。
也就是第11点当中的只是
看到这里强烈建议大家先动笔试一试上面这道例题,相信只要你认真学习了前面的知识,做出来是没有问题的,祝大家成功!
三:
语法分析)基本定义1(1.上下文无关文法的定义(重要铺垫)
文法:
是描述语言的语法结构的形式规则(或称语法规则)
上下文无关文法概念:
它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的(与它所在的上下文无关)
(重要!
以下的概念一定要理解熟知!
)
上下文无关文法G可定义为一个四元式(,,S,P)
是终结符号集合,它的每个元素称为终结符号,用小写字母表示。
是非终结符号集合,它的每个元素称为非终结符号,用大写字母表示。
S是一个开始符号,是一个非终结符,至少在一个产生式作为左22/47
部出现
P是一个产生式的集合,它的每个元素称为一条产生式,可以表示为:
P→α|b,其中P是非终结符,叫做产生式的左部,α
和b分别叫做这个产生式的一个侯选式,他们既可以是终结符,
也可以是非终结符,也可以是他们的组合。
2.句型、句子的概念(小题)
S是它的开始符号,如果α,G设是一个文法,S*α,G的一个句型;如果S
(α∈∪)则称α是且*且α∈,则称α是G的一个句子;句子实际上是仅含有终结符号的句型
3.文法和语言的对应关系:
(了解)
一个文法G所产生的句子的全体就是一个语言。
给定一个文法,就能从结构上唯一确定其语言;给定一种语言,能找到其文法,但该文法不是唯一的
4.语法分析树与二义性:
(了解)
用一棵树来表示句型的推导,简称语法树。
若一个文法的一个句子对应两棵不同的语法树,则称该句子是二义性句子如果一个文法含有二义性的句子,则称该文法是二义性文法。
(5,6,7均可能出填空判断选择等小题)
5.3型文法是正规文法、正则文法、线性文法(用于词法分析)
23/47
6.2型文法也称为上下文无关文法(用于语法分析)
7.1型文法也称为上下文有关文法
若一个文法是递归的,则由它产生的语言的句子个数是无限的。
(2)自上而下(以下8~12均为13的大题铺垫)
8.文法左递归的定义
一个文法中如果存在某个产生式P→Pα(即有某个侯选式的最左边的符号是这个产生式左部非终结符本身),则此文法是有左递归的。
9.消除文法的左递归的方法:
只要求消除直接左递归,方法见下面的例子。
设有产生式P→Pα|β
其中β不以P开头,α不为ε,那么,我们可以把P的规则改为如下的非直接左递归形式:
P→βP'
P'→αP'|ε
这样就消除了P→Pα|β这个式子的左递归。
(提示:
在做题时,要把整个文法的每个产生式都逐一检验,有时含有左递归的产生式是不只一个的,需要逐个消除。
)
10集合集的构造方法(较抽象)
集的构造方法:
对于任意一个符号X,构造他的集的方法是:
24/47
(1)若X∈(终结符),则(X)={X}.
(2)若X∈(非终结符),且有产生式X→a…(小写a代表任意一个终结符号,他是侯选式左边的第一个字符),则把a加
入到(X)中;若X→ε也是一条产生式,则把ε也加到(X)中。
若有产生式X→Y…(大写Y代表任意一个非终结符号,他
是侯选式左边的第一个字符),则把(Y)中所有非ε元素都加到(X)
中;
集的构造方法:
(书上的表述很难懂,这里我用自己的水话表述)
(1)对于文法中给定的开始符号S,置#与(S)中;
(2)将所有产生式侯选式中的非终结符都标出来,并从前往后挨个检查
为方便讨论,我们假设A→α是一个产生式,(这里B和C代表非终结符,α代表终结符)
1.先检验这个非终结符的右边还有没有别的符号(不管这个符号是终结符还是非终结符),在这是我们检查的第一个非终结符,它右边是有符号C的,
如果检验到的某个非终结符右边有别的符号,例如这里的B,那么检验他右边符号的集合,这里是(C)。
先将(C)中非空字ε的元素加入到(B)中;注意,如果(C)中含有空字ε,还要把(A)中的元素也加入到(B)中(如果不含空字就不这么做)
2.如果检验到的终结符右边没有别的符号了,例如这里的C,25/47
那么,直接将(A)中的元素加入到(C)中。
在这里,α的存在是无关痛痒的。
也就是说,我们在检验某个非终结符时只要看他的右边就好了,左边有没有有什么都是无所谓的。
大家按照上面的方法,将每一个侯选式中的非终结符都这样检查一遍,最后就能求得所有非终结符的集了
递归下降分析法的概念,应满足什么条件?
11.
大家不必知道概念,只须知道能够用递归下降分析法分析的文法是
(1)文法,要成为这种文法,必须满足以下条件:
(1)文法不含左递归(在这里提一句:
欲构造行之有效的自上而下分析器,则必须消除文法中含有的左递归,请大家记住这句话,有可能考小题)
(2)对于文法中每一个非终结符A的各个产生式的候选式的集两两不相交。
即,若
A→α|α|…|αn12Φ(i≠j)αα)∩()=则(ji(3)对于文法中的每个非终结符A,若它的某个候选式的集中包