重点编译原理资料 A4排版Word文档格式.docx
《重点编译原理资料 A4排版Word文档格式.docx》由会员分享,可在线阅读,更多相关《重点编译原理资料 A4排版Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
S→(L)
S’→aS’
→S
→ε
S’→S
S’→ε
S’
L
L→L'
L→SL’
L’→,SL’
3.设文法G(S):
(12分)
1.构造各非终结符的FIRSTVT和LASTVT集合;
2.构造优先关系表和优先函数。
1.FIRSTVT(S)={i,+,),(}
FIRSTVT(A)={+,),(}
FIRSTVT(B)={),(}
LASTVT(S)={i,+,*,(}
LASTVT(A)={+,*,(}
LASTVT(B)={*,(}
1 优先关系表:
+
*
>
优先函数:
f
2
6
1
g
4
4.已知文法G(E)
E→T|E+T
T→F|T*F
F→(E)|i
(1)给出句型(T*F+i)的最右推导;
(2)给出句型(T*F+i)的短语、素短语。
(1)最右推导:
E->
T->
F->
(E)->
(E+T)->
(E+F)->
(E+i)->
(T+i)->
(T*F+i)
(2)短语:
(T*F+i),T*F+i,T*F,i
素短语:
T*F,i
最左素短语:
T*F
简单短语:
句柄:
T*F
5.设文法G(S)为:
S—>a|aAb S—>b|bBa
A—>1A0|ε B—>1B0|ε
求①LR(0)项目集族;
②构造识别文法G(E)的DFA;
③构造文法G(E)的SLR(1)的分析表;
④分析句子a1100b的识别过程。
(1)、
(2)LR(0)项目集族和识别活前缀的DFA,如图A-19所示。
图A-19LR(0)
项目集族和DFA
(3)、(4)略。
6.设将文法G改写成等价的LL
(1)文法,并构造预测分析表
G[S]为:
S→A;
A→BA|ε;
B→aB|b
求:
(1)构造的DFA(10分)
(2)LR
(1)分析表(10分)
(3)输入串abab的分析过程为:
(10分)
(1)拓广文法G’:
(0)S’→S
(1)S→A
(2)A→BA(3)A→ε(4)B→aB(5)B→b;
FIRST(A)={ε,a,b};
FIRST(B)={a,b}
构造的DFA如下:
项目集规范族看出,不存在冲突动作。
所以,该文法是LR
(1)文法。
(2)LR
(1)分析表如下:
状态
Action
Goto
b
A
S4
S5
r3
3
acc
r1
s4
R3
7
5
r5
r2
r4
R4
(3)输入串abab的分析过程为:
步骤
状态栈
符号栈
当前字符
剩余字符串
动作
(1)
bab#
移进
(2)
04
#a
ab#
(3)
045
#ab
b#
归约B→b
(4)
047
#aB
归约B→aB
(5)
03
#B
(6)
034
#Ba
(7)
0345
#Bab
(8)
0347
#BaB
(9)
033
#BB
归约A→ε
(10)
0336
#BBA
归约A→BA
(11)
036
#BA
(12)
02
#A
归约S→A
(13)
01
#S
7.设={0,1}上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA。
(8分)
8.设有文法G(S):
aBc|bAB
A—>
aAb|b
B—>
b|ε
①求各产生式的FIRST集,FOLLOW(A)和FOLLOW(B)。
已及各产生式的SELECT集。
②构造LL
(1)分析表,并分析符号串baabbb是否是。
1 解:
FIRST(aBc)={a},FIRST(bAB)={b},FIRST(aAb)={a},A→b:
FIRST(A→b)={b},B→b:
FIRST(b)={b},FIRST(ε)={ε}
FOLLOW(A)={b,#},FOLLOW(B)={c,#}
SELECT(S→aBc)={a},SELECT(S→bAB)={b},SELECT(A→aAb)={a},SELECT(A→b)={b},SELECT(B→b)={b},SELECT(B→ε)={c,#}
因此,所得的LL
(1)分析表如表A-4所示
表A-4LL
(1)分析表
输入
输入符号
c
S→aBc
S→bAB
A→aAb
A→b
B→b
B→ε
ε
2 分析符号串baabbb成功,baabbb是该文法的句子,如图A-16所示。
输入串
所用的产生式
baabbb#
#BAb
aabbb#
#BbAa
#BbA
abbb#
A→aAB
#BbbAa
#BbbA
bbb#
8
#Bbbb
9
#Bbb
bb#
10
#Bb
11
12
成功
9.对下列文法G(S):
10.对文法G[S]
S→aSb|P
P→bPc|bQc
Q→Qa|a
(1)它是否是算符优先文法?
请构造算符优先关系表文法G[S]消除左递归、提取左公
因子后是否是LL
(1)文法?
请证实。
简单优先关系矩阵如下:
P
Q
=
=<
由于矩阵中有元素存在多种优先关系,故不是简单优先文法。
11.逆波兰式ab+c+d*e-所表达的三元表达式。
(即:
写出表达式a+b*(c-d)/e的逆波兰式和三元序列)
逆波兰式:
abcd-*e/+
三元序列:
oparg1arg2
(1)-cd
(2)*b
(1)
(3)/
(2)e
(4)+a(3)
12.构造下述文法G[S]的自动机:
S->
A0A->
A0|S1|0
该自动机是确定的吗?
若不确定,则对它确定化。
由于该文法的产生式S->
A0,A->
A0|S1中没有字符集VT的输入,所以不是确定的自
动机。
要将其他确定化,必须先用代入法得到它对应的正规式。
把S?
A0代入产生式A?
S1
有:
A=A0|A01|0=A(0|01)|0=0(0|01)*。
代入S->
A0有该文法的正规式:
0(0|01)*0,所以,改
写该文法为确定的自动机为:
由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化:
下表由子集法将NFA转换为
DFA:
13.设文法G(S):
S→(T)|a
T→T+S|S
(1)计算FIRSTVT和LASTVT;
(2)构造优先关系表。
(1)FIRSTVT(S)={a,(}
FIRSTVT(T)={+,aa,(}
LASTVT(S)={a,)}
LASTVT(T)={+,a,)}
.>
.
=.
14.已知文法G(S)
S→BA
A→BS|d
B→aA|bS|c
的预测分析表如下:
a
b
c
d
#
S
A
A→BS
A→d
B
B→aA
B→bS
B→c
给出句子adccd的分析过程。
句子adccd的分析过程:
产生式
adccd#
#AB
#AAa
#AA
dccd#
#Ad
ccd#
#SB
#Sc
ccd#
B→c
#S
cd#
cd#
#Ac
d#
#A
#d
13
#
15.对表达式文法G:
E→E+T|T
T→T*F|F
F→(E)|I
(1)造各非终结符的FIRSTVT和LASTVT集合;
(2)构造文法的算符优先关系表。
FIRSTVT
LASTVT
E
T
F
*,+,(,i
*,(,i
(,i
*,+,),i
*,),i
),i
(2)算符优先关系表
I
16.写一个文法,使其语言是:
L={1n0m1m0n|m,n≥0}
17.为正规式(a|b)*a(a|b)构造一个确定的有限自动机。
18.已知文法G为:
(1)S′→S
(2)S→aAd
(3)S→bAc
(4)S→aec
(5)S→bed
(6)A→e
试构造它的LR
(1)项目集、可归前缀图和LR
(1)分析表。
19.已知文法G[E]为:
E→T|E+T|E-T
T→F|T*F|T/F
F→(E)|i
①该文法的开始符号(识别符号)是什么?
②请给出该文法的终结符号集合VT和非终结符号集合VN。
③找出句型T+T*F+i的所有短语、简单短语和句柄。
①该文法的开始符号(识别符号)是E。
②该文法的终结符号集合VT={+、-、*、/、(、)、i}。
非终结符号集合VN={E、T、F}。
③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i;
简单短语为i、T*F、第一个T;
句
柄为第一个T。
20.设={0,1}上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA
21.设已构造出文法G(S):
(1)SBB
(2)BaB
(3)Bb
的LR分析表如下
ACTION
GOTO
s3
s6
s7
假定输入串为abab,请给出LR分析过程(即按照步骤给出状态,符号,输入串的变化过程)。
22.已知文法G(S)
S→bAa
A→(B|a)
B→Aa
写出句子b(aa)b的规范归约过程
句子b(aa)b的规范归约过程:
b(aa)b#
预备
#b
(aa)b#
#b(
aa)b#
3
#b(a
a)b#
#b(A
归约
#b(Ma
)b#
#b(Ma)
#b(B
#bA
#bAb
接受
1、填空题
1.(最右推导)称为规范推导。
2.编译过程可分为(词法分析),(语法分析),(中间代码生成),(代码优化)和(目标代码生成)五个阶段。
3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是(二义性的)。
4.从功能上说,程序语言的语句大体可分为(执行性)语句和(说明性)语句两大类。
5.语法分析器的输入是(单词符),其输出是(语法单位)。
6.扫描器的任务是从(源程序)中识别出一个个(单词符号)。
7.符号表中的信息栏中登记了每个名字的有关的性质,如(类型、种属、所占单元大小、地址)等等。
8.一个过程相应的DISPLAY表的内容为(现行活动记录地址和所有外层最新活动记录的地址)。
9.一个句型的最左直接短语称为句型的(句柄)。
10.常用的两种动态存贮分配办法是(栈式)动态分配和(堆式)动态分配。
11.一个名字的属性包括(类型)和(作用域)。
12.常用的参数传递方式有(传地址),(传值)和(传名)。
13.根据优化所涉及的程序范围,可将优化分成为(局部优化),(循环优化)和(全局优化)三个级别。
14.语法分析的方法大致可分为两类,一类是(自上而下)分析法,另一类是(自下而上)分析法。
15.预测分析程序是使用一张(分析表)和一个(符号栈)进行联合控制的。
16.一张转换图只包含有限个状态,其中有一个被认为是(初)态;
而且实际上至少要有一个(终)态。
17.语法分析是依据语言的(语法)规则进行。
中间代码产生是依据语言的(语义)规则进行的。
18.一个文法G,若它的预测分析表M不含多重定义,则该文法是(LL
(1))文法。
19.对于数据空间的存贮分配,FORTRAN采用(静态)策略,PASCAL采用(动态)策略。
20.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是(二义性文法)。
21.最右推导亦称为(规范推导),由此得到的句型称为(规范)句型。
22.对于文法G,仅含终结符号的句型称为(句子)。
23.所谓自上而下分析法是指(从开始符号出发,向下推导,推出句子)。
24.语法分析器的输入是(单词符号),其输出是(语法单位)。
25.局限于基本块范围的优化称(语法单位)。
26.2型文法又称为(上下文无关)文法;
3型文法又称为(正规)文法。
27.每条指令的执行代价定义为(指令访问主存次数加1)。
28.算符优先分析法每次都是对(最左素短语)进行归约。
29.不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:
静态存储分配方案和动态存储分配方案,而后者又分为栈式动态存储分配和堆式动态存储分配。
30.规范规约是最左规约。
31.编译程序的工作过程一般划分为5个阶段:
词法分析、语法分析、语义分析与中间代码生成,代码优化及目标代码生成。
另外还有表格管理和出错处理。
32.表达式x+y*z/(a+b)的后缀式为xyz*ab+/+。
33.文法符号的属性有综合属性和继承属性。
34.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i,j]的地址计算公式为a+(i-1)*20+j-1。
35.局部优化是局限于一个基本块范围内的一种优化。
二.选择题
1.一个上下文无关文法G包括四个组成部分:
一组终结符,一组非终结符,一个(C),以及一组(B)。
A.字符串B.产生式C.开始符号D.文法
2.程序的基本块是指(D)。
A.一个子程序B.一个仅有一个入口和一个出口的语句
C.一个没有嵌套的程序段D.一组顺序执行的程序段,仅有一个入口和一个出口
3.高级语言编译程序常用的语法分析方法中,递归下降分析法属于(B)分析方法。
A.自左向右B.自顶向下C.自底向上D.自右向左
4.在通常的语法分析方法中,(A)特别适用于表达式的分析。
A.算符优先分析法B.LR分析法
C.递归下降分析法D.LL
(1)分析法
5.经过编译所得到的目标程序是(D)。
A.四元式序列B.间接三元式序列
C.二元式序列D.机器语言程序或汇编语言程序
6.一个文法所描述的语言是(A);
描述一个语言的文法是(C)。
A.唯一的B.不唯一的C.可能唯一,也可能不唯一
7.如果在文法G中存在一个句子,当其满足下列条件(BCD)之一时,则称该文法是二义文法。
A.其最左推导和最右推导相同B.该句子有两个不同的最左推导
C.该句子有两个不同的最右推导D.该句子有两棵不同的语法树
E.该句子对应的语法树唯一
8.下面(BCD)语法制导翻译中,采用拉链—回填技术。
A.赋值语句B.布尔表达式的计算C.条件语句D.循环语句
9.运行阶段的存储组织与管理的目的是(C)。
①提高编译程序的运行速度②节省编译程序的存储空间
③提高目标程序的运行速度④为运行阶段的存储分配做准备
可选项有:
A.①②B.②③C.③④D.④②
三、判断题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。
(×
)
2.一个句型的直接短语是唯一的。
3.已经证明文法的二义性是可判定的。
4.每个基本块可用一个DAG表示。
(√)
5.每个过程的活动记录的体积在编译时可静态确定。
6.2型文法一定是3型文法。
7.一个句型一定句子。
8.算符优先分析法每次都是对句柄进行归约。
(×
9.采用三元式实现三地址代码时,不利于对中间代码进行优化。
10.编译过程中,语法分析器的任务是分析单词是怎样构成的。
11.一个优先表一定存在相应的优先函数。
12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
13.递归下降分析法是一种自下而上分析法。
14.并不是每个文法都能改写成LL
(1)文法。
15.每个基本块只有一个入口和一个出口。
16.一个LL
(1)文法一定是无二义的。
17.逆波兰法表示的表达试亦称前缀式。
18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
19.正规文法产生的语言都可以用上下文无关文法来描述。
(√)
20.一个优先表一定存在相应的优先函数。
21.3型文法一定是2型文法。
22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。
(√)
四、名词解释题:
1.局部优化-------局限于基本块范围的优化称。
2.二义性文法------如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义性文法。
3.DISPLAY表----过程的嵌套层次显示表,记录该过程的各外层过程的最新活动记录的起始地址。
4.词法分析器-----执行词法分析的程序。
5.最左推导------任何一步α=>
β都是对α中的最右非终结符替换。
6.语法------一组规则,用它可形成和产生一组合式的程序。
7.文法------描述语言的语法结构的形式规则。
8.基本块------指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一个语句,出口就是其中的最后一个语句。
9.语法制导翻译------在语法分析过程中,根据每个产生式所对应的语义子程序进行翻译的办法叫做语法制导翻译。
10.短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有S
αAδ且A
β,则称β是句型αβδ相对非终结符A的短语。
11.待用信息------如果在一个基本块中,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的