编译原理考试核心Word文档格式.docx
《编译原理考试核心Word文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理考试核心Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。
5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。
二填空题
3.对于文法G1和G2,若有L(G1)=L(G2)(或G1和G2的语言相同),则称文法G1和G2是等价的。
4.对于文法G[E]:
E→T|E+TT→F|T*FF→P^F|PP→(E)|i,句型T+T*F+i的句柄是T,最左素短语是T*F。
5.最右推导的逆过程称为规范归约,也称为最左归约。
6.规范规约中的可规约串是句柄,算符优先分析中的可规约串是最左素短语
7.(A∨B)∧(C∨¬
D∧E)的逆波兰式是AB∨CD¬
E∧∨∧。
8.在属性文法中文法符号的两种属性分别称为继承属性和综合属性(次序可换)。
9.符号表的每一项是由名字栏和地址分配两个栏目组成。
在目标代码生成阶段,符号表是地址分配的依据。
10.一个过程的DISPLAY表的内容是它的 直接外层的DISPLAY表的内容加上本过程的SP的地址
二、填空题(每空1分,共15分)
1、常见的程序设计语言主要有(过程式语言)、(面向对象语言)、(应用式语言)、(基于规则的语言)4种类型。
2、翻译过程中翻译的主要工作就是把高级语言翻译成(中间语言)。
3、编译程序前端主要由与源语言有关而与目标语言无关的部分组成,这些部分包括词法分析、(语法分析)、语义分析和(中间代码生成)。
4、编译程序后端主要由编译程序中与目标程序有关的部分组成,主要包括(代码优化)和(目标代码生成)。
5、如果按语言结构的形式分类,可以把程序设计语言分为过程式语言、(面向对象语言)、应用式语言和(基于规则的语言)。
6、编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。
7、编译器常用的语法分析方法有自底向上和自顶向下两种。
8、通常把编译过程分为分析前端与综合后端两大阶段,词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。
9、对编译程序而言,输入数据是源程序,输出结果是目标程序。
10、从功能上说,程序语言的语句大体可分为执行性语句和说明性语句。
11、所谓最右推导是指(任何一步аβ都是对a中最右非终结符进行替换的)。
12、一个上下文无关法所含四个组成部分是:
一组终结符号、一组非终结符号、一个开始符号、一组产生式。
13、产生式是用于定义语法范畴的一种书写规则。
14、文法中的终结符和非终结符的交集是空集。
词法分析器交给语法分析器的文法符号一定是终结符,它一定只出现在产生式的右部。
15、最左推导是指每次都对句型中的最左非终结符进行扩展。
16、语法树代表推导过程,分析树代表归约过程。
17、计算机执行用高级语言编写的程序主要由两种途径解释和编译。
18、后缀式abc-/所代表的表达式是a/(b-c)。
19、编译过程可分为词法分析、语法分析、语义分析与中间代码生成、优化和目标代码生成五个阶段。
20、如果一个文法存在某个句子对应两个不同的语法树,则称这个文法是二义性的。
21、语法分析是依据语言的语法规则进行,中间代码的产生是依据语言的语义规则进行的。
22、对一个文法G,仅含终结符号的句型称为句子。
23、2型文法又称为上下文无关文法,3型文法又称为正则文法。
二、填空题
1.解释程序和编译程序的区别在于(是否生成目标代码)。
2.编译过程通常可分为5个阶段,分别是(词法分析)、(语法分析)、语义分析与中间代码产生、代码优化和目标代码生成。
3.编译程序工作过程中,第一阶段输入是(源程序),最后阶段的输出为(目标代码)程序。
4.把语法范畴翻译成中间代码所依据的是(语义规则)。
5.目标代码可以是(汇编)指令代码或(可重定位)指令代码或绝对机器指令代码。
6.词法分析的任务是:
输入源程序,对构成源程序的(字符串)进行扫描和分解。
7.源程序中的错误通常分为(语法错误)和(语义错误)两大类。
8.(编译程序)是将源程序翻译成目标程序的程序。
9.一个上下文无关文法G包括四个部分:
(终结符号)、(非终结符号)、(开始符号)和一组(产生式)。
10.若
,则称这个序列是从
到
的一个(推导)。
11.设文法G的开始符号为S,如果
则称
是L(G)的一个(句型)。
12.文法G所产生的句子的全体是文法G所定义的(语言)。
13.若一个文法存在某个句子对应的两棵不同的语法树,则称这个文法是(二义文法)。
14.程序语言的单词符号一般可分为五种:
(关键字)、(标识符)、常数、(运算符)和界符。
15.(确定有限自动机DFA)是非确定有限自动机NFA的一个特例。
16.对于正规文法G和有限自动机M,若L(G)=L(M),则称G和M是(等价)的。
17.若两个正规式所表示的正规集相等,则认为二者是(等价)的。
18.按照语法分析树的建立方法,语法分析可分为两类:
(自上而下分析)和(自下而上分析)。
18.规范归约中的可归约串是指(句柄)。
19.算符优先分析中的可归约串是指(最左素短语)。
20.(自下而上)语法分析的关键问题是精确定义可归约串的概念。
21.自顶向下语法分析方法的基本思想是:
从①识别符号出发,不断建立②直接推导,试图构造一个推导序列,最终由它推导出与输入符号串相同的③符号串。
22.把汇编语言程序翻译成机器可执行的目标程序的工作是由汇编器完成的。
23.确定的有穷自动机是一个
(1)五元组,通常表示为
(2)DFA=(K,∑,M,S,Z)。
24.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编语言,则其翻译程序称为编译程序。
25.一个上下文无关文法G包括四个组成部分依次为:
一组终结符号,一组非终结符号,一个开始符号,以及一组产生式。
三、名词解释题:
1.局部优化-------局限于基本块范围的优化称。
2.二义性文法------如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。
3.DISPLAY表----过程的嵌套层次显示表,记录该过程的各外层过程的最新活动记录的起始地址。
5.最左推导------任何一步α=>
β都是对α中的最右非终结符替换。
6.语法------一组规则,用它可形成和产生一组合式的程序。
7.文法------描述语言的语法结构的形式规则。
8.基本块------指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。
9.语法制导翻译------在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法制导翻译。
10.短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有S
αAδ且A
β,则称β是句型αβδ相对非终结符A的短语。
11.待用信息------如果在一个基本块中,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的其它定值,则称j是四元式i的变量A的待用信息。
12.规范句型------由规范推导所得到的句型。
13.扫描器------执行词法分析的程序。
14.超前搜索------在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。
15.句柄------一个句型的最左直接短语。
16.语法制导翻译------在语法分析过程中,根据每个产生式所对应的语义程序进行翻译的方法叫做语法制导翻译。
17.规范句型------由规范推导所得到的句型。
18.素短语------素短语是指这样一个短语,至少含有一个终结符,并且,除它自身外不再含任何更小的素短语。
19.语法------是组规则,用它可形成和产生一个合式的程序。
20.待用信息------如果在一个基本块中,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的其它定值,则称j是四元式i的变量A的待用信息。
21.语义------定义程序的意义的一组规则。
三、名词解释题(共5小题,每小题4分,共20分)
1.词法分析
词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则
从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,
并转换成统一的内部表示(token),送给语法分析程序。
2.LL
(1)文法
若文法的任何两个产生式A|都满足下面两个条件:
(1)FIRST()FIRST()=;
(2)若*,那么FIRST()FOLLOW(A)=。
我们把满足这两个条件的文法叫做LL
(1)文法,其中的第一个L代表从左
向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步
动作时向前看一个输入符号。
除了没有公共左因子外,LL
(1)文法还有一
些明显的性质,它不是二义的,也不含左递归。
3.语法树
句子的树结构表示法称为语法树(语法分析树或语法推导树)。
给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的
语法树。
这棵树具有下列特征:
(1)根节点的标记是开始符号S。
(2)每个节点的标记都是V中的一个符号。
(3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列
次序为A1A2…AR,那么AA1A2…AR一定是P中的一条产生式。
(4)若一标记为A的节点至少有一个除它以外的子孙,则A
VN。
(5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G
的句型;
若w中仅含终结符号,则w为文法G所产生的句子。
4.LR(0)分析器
所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的
每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再
向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否
已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作(是
移进还是按某一产生式进行归约等)。
四、简答题(20分)
1.简要说明语义分析的基本功能。
答:
语义分析的基本功能包括:
确定类型、类型检查、语义处理和某些静态语义检查。
2.考虑文法G[S]:
S→(T)|a+S|a
T→T,S|S
消除文法的左递归及提取公共左因子。
解:
消除文法G[S]的左递归:
S→(T)|a+S|a
T→ST′
T′→,ST′|ε
提取公共左因子:
S→(T)|aS′
S′→+S|ε
T′→,ST′|ε
3.试为表达式w+(a+b)*(c+d/(e-10)+8)写出相应的逆波兰表示。
wab+cde10-/+8+*+
4.按照三种基本控制结构文法将下面的语句翻译成四元式序列:
while(A<
C∧B<
D)
{
if(A≥1)C=C+1;
elsewhile(A≤D)
A=A+2;
}。
该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):
100(j<
A,C,102)
101(j,_,_,113)
102(j<
B,D,104)
103(j,_,_,113)
104(j=,A,1,106)
105(j,_,_,108)
106(+,C,1,C)
107(j,_,_,112)
108(j≤,A,D,110)
109(j,_,_,112)
110(+,A,2,A)
111(j,_,_,108)
112(j,_,_,100)
113
5.已知文法G[S]为S→aSb|Sb|b,试证明文法G[S]为二义文法。
证明:
由文法G[S]:
S→aSb|Sb|b,对句子aabbbb对应的两棵语法树为:
因此,文法G[S]为二义文法。
三、名词解释
1、词法分析:
主要任务是是从左到右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示,送给语法分析程序。
2、语法树:
句子的树结构表示法称为语法树。
给定文法G=(Vn,Vt,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。
语法树具有如下特征:
(1)根节点的的标记是开始符S。
(2)每个节点的标记都是V中的一个符号。
(3)若一颗树的根节点为A,且其具有直接子孙的标记从左向右的排列次序为A1A2……AR,那么A—>
A1A2……AR一定是P中的一条产生式。
(4)若一标记为A的节点至少有一个除它以外的子孙,则A∈Vn.
(5)若树的所有叶节点上的标记从左到右排列为字符串W,则W是文法G的句型;
若W中仅含终结符号,则W为文法G所产生的句子。
3、推导:
我们称αAβ直接推出αγβ,即αAβÞ
αγβ,仅当A→γ是一个产生式,且α、β∈(VN∪VT)*。
如果α1Þ
α2Þ
…Þ
αn,则我们称这个序列是从α1至α2的一个推导。
若存在一个从α1αn的推导,则称α1可推导出αn。
推导是归约的逆过程。
4、语法:
表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。
语义:
表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。
5、上下文无关法:
一个上下文无关文法G是一个四元式(VT,VN,S,P),其中:
VT是一个非空有限集,它的每个元素称为终结符号;
VN是一个非空有限集,它的每个元素称为非终结符号,VT∩VN=Φ;
S是一个非终结符号,称为开始符号;
P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,α∈(VT∪VN)*。
开始符号S至少必须在某个产生式的左部出现一次。
6、翻译程序:
把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序。
7、编译程序(compiler):
把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。
8、解释程序:
把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
9、源语言:
被翻译的语言。
目标语言:
翻译后的语言。
中间语言:
在编译过程中,把源语言首先转换为一种中间表示形式,然后再把这种中间表示形式翻译为最终的目标语言,这种中间表示形式就叫做中间语言。
编译方式:
把一个高级语言的文本文件“翻译”成机器语言的可执行文件。
解释方式:
将源语言文件放在一个被称为解释器的程序里执行,把源语言代码中的语句翻译成一小段及其代码并执行之,工作方式是翻译一句执行一句
10、抽象语法树或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。
树上的每个节点都表示源代码中的一种结构。
之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。
11、二义性定义:
“若对于一个文法的某一句子存在两棵不同的语法树,则该文法是二义性文法。
”
12、语法:
就是描述语言现象这种词汇间的并列关系与嵌套关系的规则。
三、简答
1.给出上下文无关文法的定义。
一个上下文无关文法G是一个四元式(VT,VN,S,P),其中:
VT是一个非空有限集,它的每个元素称为终结符号;
VN是一个非空有限集,它的每个元素称为非终结符号,VT∪VN=Φ;
S是一个非终结符号,称为开始符号;
P是一个产生式集合(有限),每个产生式的形式是P→α,其中,P∈VN,α∈(VT∪VN)*。
2、“符号就是字符”,这种说法对吗,为什么?
解答:
不对。
符号是字母表中的元素,不能把符号理解成字符。
如4个保留字的字母表{BEGIN,END,FOR,WHILE}此时,BEGIN,END,FOR,WHILE都是一个符号,因为它们是字母表中的元素。
3、DFA与NFA有何区别?
DFA与NFA的区别表现在两方面。
一是NFA可有若干个开始状态,而DFA仅一个。
另一方面,DFA的映像M是从K×
∑到K,而NFA的映像M是从K×
∑到K的子集,即映像M将产生一个状态集合(可能为空集),而不是单个状态。
4、LL
(1)分析法的名字中,第一个“L”的含义是什么?
第二个“L”的含义是什么?
“1”的含义是什么?
六、计算题:
1、写一个文法,使其语言是奇数集,且每个奇数不以0开头。
文法G(N):
N→AB∣B
A→AC∣D
B→1∣3∣5∣7∣9
D→B∣2∣4∣6∣8
C→0∣D
2、写一个文法,使其语言是偶数集,且每个偶数不以0开头。
所求文法是G(S):
S→AB∣BAO
A→AD∣C
B→2∣4∣6∣8
C→1∣3∣5∣7∣9∣B
D→0∣C
四、综合题:
2、设文法G为:
S→aAcB|BdS
A→BaB|aBc|a
B→aScA|cAB|b
对于输入串aacabccb,给出最左推导。
S=>
aAcB=>
aaBccB=>
aacABccB=>
aacaBccB=>
aacabccB=>
aacabccb
3、设文法G为:
S→BA
A→BS|d
B→aA|bS|c
对于输入串adccd,给出最左推导。
BA=>
aAA=>
adA=>
adBS=>
adcS=>
adcBA=>
adccA=>
adccd
4、证明:
文法G:
P→PaP|PbP|cP|Pe|f
为二义文法。
对于文法G定义的句子fbfbf,有两棵不同的语法树:
所以该文法是二义文法。
5、证明:
P→S+S|S*S|i|(S)
对于文法G定义的句子i+i*i,有两棵不同的语法树:
四、简答题:
3.已知文法G(S)
S→bAa
A→(B|a
B→Aa)
写出句子b(aa)b的规范归约过程。
3.句子b(aa)b的规范归约过程:
步骤
符号栈
输入串
动作
#
b(aa)b#
预备
1
#b
(aa)b#
移进
2
#b(
aa)b#
3
#b(a
a)b#
4
#b(A
a)b#
归约
5
#b(Ma
)b#
8.写一个文法G,使其语言为L(G)={albmclanbn|l>
=0,m>
=1,n>
=2}
8.所求文法是G[S]:
S→AB
A→aAc|D
D→bD|b
B→aBb|aabb
10.何谓优化?
按所涉及的程序范围可分为哪几级优化?
11.目标代码有哪几种形式?
生成目标代码时通常应考虑哪几个问题?
10.优化:
对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。
三种级别:
局部优化、循环优化、全局优化
11.目标代码通常采用三种形式:
机器语言,汇编语言,待装配机器语言模块。
应着重考虑的问题:
(1)如何使生成的目标代码较短;
(2)如何充分利用寄存器,以减少访问内存次数;
(3)如何充分利用指令系统的特点。
七已知文法G为:
(1)S′→S
(2)S→aAd
(3)S→bAc
(4)S→aec
(5)S→bed
(6)A→e
试构造它的LR
(1)项目集、可归前缀图和LR
(1)分析表。
【】【答案:
】
构造LR
(1)分析表
如下:
九、(9分)设已构造出文法G(S):
(1)SBB
(2)BaB
(3)Bb
的LR分析表如下
ACTION
GOTO
状态
a
b
S
B
s3
s4