《编译原理》总复习07级.docx
《《编译原理》总复习07级.docx》由会员分享,可在线阅读,更多相关《《编译原理》总复习07级.docx(18页珍藏版)》请在冰豆网上搜索。
《编译原理》总复习07级
《编译原理》总复习-07级
第一章编译程序的概述
(一)内容
本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。
(二)本章重点
编译(程序),解释(程序),编译程序的逻辑结构。
(三)本章难点
编译程序的生成。
(四)本章考点
全部基本概念。
编译程序的逻辑结构。
(五)学习指导
引论部分主要是解释什么是编译程序以及编译的总体过程。
因此学习时要对以下几个点进行重点学习:
翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:
词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。
第三章文法和语言课外训练
(一)内容
本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。
(二)本章重点
上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。
(三)本章难点
上下文无关文法,语法分析树,文法的分类。
(四)本章考点
上下文无关文法的定义。
符号串的推导。
语法分析树的构造。
(五)学习指导
要构造编译程序,就要把源语言用某种方式进行定义和描述。
学习高级语言的语法描述是学习编译原理的基础。
上下文无关文法及语法树是本章学习的重点。
语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:
终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。
附训练试题:
1:
试构造生成语言L={anbnci|n≥1,i≥0}的文法解:
2:
已知语言L={anbbn|n≥1},写出产生L的文法。
3:
已知文法G=({A,B,C},{a,b,c},A,P)
其中产生式P由以下组成:
A→abcA→aBbc
Bb→bBBc→Cbcc
bC→CbaC→aaB
aC→aa
问:
此文法表式的语言是什么?
4
请给出描述语言={a2m+1bm+1|m>=0}∪{a2mbm+2|m>=0}的文法
5已知文法G[S]为:
S→dAB
A→aA|a
B→Bb|ε
G[S]产生的语言是什么?
G[S]能否改写为等价的正则文法?
6:
试写一文法,使其描述的语言L(G)是能被5整除的整数集合。
7:
已知语言L={x|x∈{a,b,c}*,且x重复排列是对称的(aabcbaa,aabbaa,等)写出该语言的文法。
第四章词法分析课外训练
(一)内容
本章介绍编译程序的第一个阶段词法分析的设计原理和设计方法,包括源程序输入与词法分析程序输出、正则文法及其状态转换图、确定的有限自动机(DFA)、不确定的有限自动机(NFA)、正则表达式与正规集。
(二)本章重点
词法分析器的逻辑结构与功能,状态转换图,正规表达式与正规集、DFA、NFA及其等价转换,NFA的确定化,DFA的最小化。
(三)本章难点
正则式与自动机的应用,NFA的确定化,DFA的最小化。
(四)本章考点
正规式到NFA的转换。
NFA的确定化。
DFA的最小化。
(五)学习指导
掌握正规文法、状态转换图、DFA、NFA、正规表达式和正规集的基本概念和词法分析器的设计与程序编写。
词法分析的任务是对源语言所编写的代码进行从左到右的扫描,产生一个个的单词符号(token),由这些单词符号形成的中间程序是后续语法分析输入。
在理论上词法分析器的构造是根据一种语言的正规文法描述形成相应的状态转换图(DFA),若输入字符串能够被该DFA接受,则认为当前输入是语言中的一个单词符号。
因此,DFA的构造是本章学习的重点。
附训练试题:
1写出能被5整除的十进制整数的文法及正规表达式。
2:
已知有限自动机如图
(1)以上状态转换图表示的语言有什么特征?
(2)写出其正规式与正规文法.
(3)构造识别该语言的确定有限自动机DFA.
3请构造与正规式R=(a*b)*ba(a|b)*等价的状态最少的DFA(确定有限自动机)
4设字符集∑={a,b},请写出不以a开头的但以aa结尾的字符串集合的正规表达式,并构造与之等价的状态最少的DFA。
第五章自顶而下语法分析方法课外训练
(一)内容
本章介绍编译程序的第二个阶段语法分析的第一种设计方法和实现原理即自上而下分析的原理及无回朔的递归下降分析、LL
(1)分析法和相应程序构造。
(二)本章重点
自上而下分析的思想,LL
(1)文法,LL
(1)预测分析,递归下降分析程序的构造。
(三)本章难点
消除左递归,预测分析表的构造,求First集和Follow集,预测分析中的出错处理。
(四)本章考点
LL
(1)文法的判定。
递归下降分析程序的构造。
预测分析程序的构造与分析方法。
(五)学习指导
理解自上而下分析面临的问题,理解递归下降分析、LL
(1)文法,掌握无回朔的递归下降分析方法的设计和程序实现、LL
(1)分析表的构造与分析方法。
语法分析是在词法分析的基础上判定程序的语法结构是否符合语法规则的过程。
词法分析器的构造技术是编译器的主要技术。
词法分析分为自上而下的分析(LL(K))和自下而上的分析(算符优先、LR(K))。
本章先学习在逻辑概念上易于接受的自上而下的分析,即从文法开始符号出发,自上而下地为输入串建立一棵语法树,或者说为输入串寻找一个最左推导。
LL
(1)分析法是本章的学习重点。
附训练试题:
1试构造与下列文法G[S]等价的无左递归文法。
G[S]:
S→Sa|Nb|c
(1)
N→Sd|Ne|f
2:
文法G的规则集为;
P→begind:
Xend
X→d:
X|sY
Y→:
sY|
做出该文法LL
(1)分析表。
3设有以下文法:
G[S]:
S→eEfGh|g
E→FSG|h
F→SEc|cG|ε
G→Sh|ε
(1)求出该文法每一个非终结符的FOLLOW集。
(2)它是LL
(1)文法吗?
为什么?
4:
给出语言L={1na0n1ma0m|n>0,m>=0}的LL
(1)文法G[S]并说明其理由。
5设有文法:
G[S]:
S→aBc|bAB
A→aAb|b
B→b|ε构造其LL
(1)分析表,并分析符号串baabbb是否是该文发的句子。
6将G[V]改造为LL
(1)文法
G[V]:
V→N|N[E]
E→V|V+E
N→i
7有文法G[S]:
S→BA
A→BS|d
B→aA|bS|c
(1)证明文法为LL
(1)文法。
(2)构造LL
(1)分析表。
(3)写出句子adccd的分析过程
8考虑下面文法G1:
S→a|∧|(T)
T→T,S|S
(1)消去G1的左递归。
然后对每一个非终结符,写出不带回溯的递归子程序。
(2)经改写后的文法是否是LL
(1)文法?
给出它的预测分析表。
9下面文法中那些是LL
(1)文法,说明理由。
(1)1、S→Abc
2、A→a|ε
3、B→b|ε
(2)S→Ab
A→a|B|ε
B→b|ε
(3)S→ABBA
A→a|ε
B→b|ε
(4)S→aSe|B
B→bBe|C
C→cCe|d
第六章自底而上优先分析法课外训练
(一)内容
本章介绍编译程序的第二个阶段语法分析的第二种设计方法和实现原理即自下而上分析的原理,包括一些基本概念、简单优先分析法、算符优先分析法。
(二)本章重点
自下而上分析的思想,算符优先文法及其分析。
(三)本章难点
句柄的定义,优先关系的定义,求FIRSTVT集和LASTVT集,优先分析表的构造
(四)本章考点
基本概念的定义(短语、直接短语、句柄、最左素短语、规范归约等)。
算符优先分析法。
(五)学习指导
理解最左素短语的基本概念;掌握算符优先分析方法。
自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号,从输入串的语法树上直观地看就是沿着语法树的底部向上分析归约,最终能到达根结点的就认为当前的输入串能被接受。
算符优先分析(OPG)是自下而上分析中针对运算表达式较为常用的易于理解的分析算法。
附训练试题:
1已知文法G[S]为算符优先文法,其规则为:
S→SaF|F
F→FbP|P
P→c|d求优先关系表
2对下列文法G:
S’→#S#P→S|i
S→D(R)D→i
R→R;P|P
求:
出每个非终结符的FIRSTVT集和LASTVT集,并构造算符优先关系矩阵。
3考虑下面文法G2:
S→a|∧|(T)
T→T,S|S
(1)给出(a,(a,a))和(((a,a),∧,(a)),a)的最左和最右推导。
(2)给出串(a,(a,a))的算符优先分析过程。
第七章LR分析法课外训练
(一)内容
本章介绍编译程序的第二个阶段语法分析的第二种设计方法和实现原理即自下而上分析的原理,包括一些基本概念、LR分析法。
(二)本章重点
自下而上分析的思想,LR分析器逻辑结构和功能,LR(0)文法及其分析、SLR
(1)文法及其分析、LR
(1)、LALR
(1)文法及其分析。
(三)本章难点
句柄的定义,LR项目及活前缀识别自动机,四种LR文法的差别。
(四)本章考点
基本概念的定义(短语、直接短语、句柄、规范归约等)。
LR(0)、SLR
(1)分析。
(五)学习指导
理解有效项目的基本概念;掌握LR(0)、SLR
(1)文法的判断及LR(0)、SLR
(1)分析表的构造与分析方法。
自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号,从输入串的语法树上直观地看就是沿着语法树的底部向上分析归约,最终能到达根结点的就认为当前的输入串能被接受。
大部分现代的编译器都采用LR分析作为语法分析的方式。
因此本章的学习重点是学习如何构造LR分析表。
OPG分析可以作为自下而上分析算法的切入点要求重点掌握。
附训练试题:
1、1对于文法G[S]
S→(L)|aS|a
L→L,S|S
(1)画出句型(S,(a))的语法树
(2)写出上述句型的所有短语,直接短语,句柄.
2、222设有文法G[S]:
S→L=R
S→R
L→*R
L→i
R→L
为构造拓广文法,增加新的非终结符S’,得到规则S’→S,则:
closure({[S’→.S,#]})=________
3、43、设文法G(S’)
S’→AA→aA|b
构造识别文法G(S’)的所有活前缀的DFA.
4、4、求文法
(1)S’→A
(2)A→aA
(3)A→b
LR(0)分析表:
5、5、55设文法G,试构造G的LR(0)分析表
G:
1)S→CC
2)C→cC
3)C→d
6、6、66对于文法A→aA|a构造SLR
(1)分析表
7、7、77、设有文法G(S’)为
1)S’→S
2)S→L=R
3)S→R
4)L→*R
5)L→i
6)R→L
构造文法G(S’)的LR
(1)分析表:
8、8、8888设有文法G(A)
1)A’→A
2)A→BB
3)B→aB
4)B→b
构造LALR
(1)分析表
第八章语法制导翻译和中间代码的生成课外训练
(一)自学内容
本章内容围绕语义分析展开,主要介绍属性文法,语法制导翻译与翻译模式的计算,抽象语法树、带注释的语法树。
语义分析及中间代码生成的设计原理和实现方法,包括语法制导翻译的具体实现、中间代码的形式,可执行语句和说明语句的语法制导翻译方法。
(二)本章重点
属性文法、后缀式和四元式中间代码表示,简单算术表达式和赋值语句的翻译,布尔表达式及控制语句的翻译,数组元素的处理,过程语句的翻译。
(三)本章难点
抽象语法树,属性的作用及计算,语法制导翻译。
布尔表达式的翻译,数组元素的处理。
(四)本章考点
语法制导翻译定义。
中间语言表示(后缀式和三地址代码)。
赋值语句的翻译。
布尔表达式及控制语句的翻译。
(五)学习指导
要求理解属性的引入、两种属性的计算原则,掌握S属性的计算方法,掌握L属性翻译模式的计算(递归下降分析),继承属性计算的四种方法。
本章介绍属性文法的基本概念和基于属性文法的处理方法,讨论如何在自上而下分析和自下而上分析中实现属性的计算。
本章的学习重点以掌握属性文法及语法制导翻译的概念为主,分析中属性的计算作为了解。
理解语法制导翻译、语义动作的基本概念;掌握算术表达式和赋值语句到中间代码的翻译、布尔表达式和几种控制语句的目标代码结构分析和到四元式的语法制导翻译;说明语句的语法制导翻译。
本章是将上一章介绍的属性文法和语法制导翻译的方法和技术应用于语义分析和中间代码的产生。
本章的学习重点为:
掌握各种中间代码的形式,包括后缀式、三元式、四元式等;了解常用语法结构单元的语义表达形式,包括说明语句,赋值语句,布尔表达式,控制语句,过程调用。
附训练试题:
111、在一个移入——归约的分析中采用以下的语法制导的翻译模式,在某产生式归约时,立即执行括号中的动作。
A→aB{print“0”}
A→c{print“1”}
B→Ab{print“2”}当分析器输入为aacbb时,打印的字符串是什么?
2、下列文法由开始符S产生一个二进制数,令综合属性val给出该数的值:
S→L.L|L
L→LB|B
B→0|1
试设计求S.val的属性文法,其中,已知B的综合属性,给出由B产生的二进位的结果值。
如输入101。
101时,输出S.val=5.625。
3、33、设有文法G[S]:
S→(L)|a
L→L,S|S
给此文法配上语义动作子程序(或者说为此文法写出一个语法制导定义),使其输出配对括号的个数,如对于句子(a,(a,a)),输出是2。
4、4、给出文法G[S]:
S→SaA|A
A→AbB|B
B→cSd|e
1)请证实AacAbcBaAdbed是文法的一个句型。
2)写出该句型的短语、直接短语、以及句柄。
3)为文法G[S]每个产生式写出相应的翻译语义动作,使句型AacAbcBaAdbed经该翻译方案后,输出131042521430。
5、写出下列各式的逆波兰表示
(1)-a-(b*c/(c-d)+(-b)*a)
(2)-A+B*C↑(D/E)/F
6、6、写出表达式
A+B*(C-D)-E/F↑G
逆波兰表示,三元组表示,四元组表示。
7、7、写出当型语句
WHILEx+y>3DO
{a:
=a+3*b;
b:
=a+e–f*e}该语句的四元式形式为:
8、写出条件语句
IFa>0THENx:
=x+1ELSEx:
=4*(x-1)
四元式序列
9、9、把语句:
ifA∨B翻译成四元式序列。
第十章目标程序运行时存储空间组织课外训练
(一)内容
本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。
(二)本章重点
静态存储分配,栈式存储分配,嵌套过程的存储实现。
(三)本章难点
嵌套过程的存储实现。
(四)本章考点
目标程序运行时存储空间的划分。
活动记录的内容。
嵌套过程的存储实现(DISPLAY表的使用)。
(五)学习指导
要求掌握各种存储组织形式的基本方法。
在编译过程生成目标代码之前,需要把程序静态的正文和实现这个程序的动行的活动联系起来,弄清楚将来在代码运行时刻,源代码中的各种变量、常量等用户定义的量是如何存放的,如何去访问它们。
本章就目标程序运行时的活动和运行环境进行讨论,主要讨论存储组织与管理,包括活动记录的建立与管理、存储器的组织与存储分配策略、非局部名称的访问。
附训练试题:
1在编译过程中,嵌套调用的过程之间寻址问题如何解决?
下面是一个示意性源程序,请给出编译期间栈式符号表的变化情况。
PROGRAMmaina=10;
b,c:
integer;
d,e:
real;
PROCEDUREp(x:
real);
f:
real;
PROCEDUREq(y:
real);
g=5;
n:
boolean;
•BEGIN
…IFe<0THENp(f);…..
END;{q}
BEGIN
….Q(e);…
•END;{p}
PROCEDUREt;
j:
real;
BEGIN
…p(e);…
•END;{t}
BEGIN
…WHILEc>0DO…;
p(d);
…
•END.{main}
2对于下面程序:
Procedurep(x,y,z);
begin
y:
=y+1;
z:
=z+x;
end;{p}
begin
a:
=2;
b:
=3;
p(a+b,a,a)
printa
end.
若参数传递的方法分别为
(1)传名
(2)传地址(3)传值。
执行时所输出的a分别是什么?
第十一章代码优化课外训练
(一)内容
本章介绍优化概述,局部优化,基本块的划分,基本块的DAG表示及其应用,循环优化。
(二)本章重点
基本块的划分,基本块的DAG表示及其应用。
(三)本章难点
循环优化。
(四)本章考点
优化的分类。
基本块的DAG表示及其应用。
(五)学习指导
要求了解局部优化的常用技术,基本块的DAG表示及其应用。
编译程序为了最终生成更有效的目标代码,常常在中间代码生成之后对中间代码序列进行优化。
本章就目标代码生成之前进行中间代码优化的技术进行讨论,主要讨论基于基本块的局部优化。
附训练试题:
1试对以下基本块B1应用DAG进行优化。
•B1:
A:
=B*C
•D:
=B/C
•E:
=A+D
•F:
=E*2
•G:
=B*C
•H:
=G*G
•F:
=H*G
•L:
=F
•M:
=L
•并就以下两种情况分别写出优化后的四元式序列:
•
(1)假设G、L、M在基本块后面背引用;
•
(2)假设只有L在基本块后被引用。
2设有基本块
T1:
=2
T2:
=10/T
T3:
=S-R
T4:
=S+R
A:
=T2*T4
B:
=A
T5:
=S+R
T6:
=T3*T5
B:
=T6
(1)画出DAG图;
(2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列