广工编译原理复习例题有客观题的答案Word格式.docx
- 文档编号:16666089
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:17
- 大小:94.65KB
广工编译原理复习例题有客观题的答案Word格式.docx
《广工编译原理复习例题有客观题的答案Word格式.docx》由会员分享,可在线阅读,更多相关《广工编译原理复习例题有客观题的答案Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
A->
(B{print“2”}
a{print“3”}
B->
Aa){print“4”}
若输入序列为b(((aa)a)a)b,则采用自下而上的分析方法,则输出是B。
[A]32224441[B]34242421
[C]12424243[D]34442212
14.局部优化是对D进行的优化。
[A]表达式 [B]部分代码
[C]循环体 [D]基本块
15.削减运算强度是对D的一种优化。
[A]表达式 [B]过程 [C]基本块 [D]循环
二填空题
1.词法分析阶段的任务式从左到右扫描 源程序,从而逐个识别单词 。
2.对于文法G[E]:
E→T|E+TT→F|T*FF→P^F|PP→(E)|i,句型T+T*F+i的句柄是 T 。
3.最右推导的逆过程称为最左规约,也称为规范规约。
4.符号表的信息栏中登记了每个名字的有关属性,如符号名、⎽⎽⎽符号的类型⎽⎽、⎽⎽⎽⎽符号的存储类别⎽⎽⎽和⎽⎽⎽⎽符号的作用域及可视性⎽⎽等。
5.一个确定有穷自动机由五部分组成:
有穷状态集、有穷字母表、转换函数、⎽⎽初态⎽⎽⎽和终态集。
6.最常用的两类语法分析方法是 自顶向下 和 自底向上 分析法。
7.单词的三种描述工具:
正规文法、正规式和有穷自动机互相之间具有等价性。
8.在PL/0的目标代码解释执行时,寄存器B总是指向当前执行过程活动记录的 起始地址 ,而寄存器T总是指向 栈顶 。
9.LR(0)分析法的名字中”L”表示自左向右扫描输入符号串,”R”表示最右推导的逆过程,“0”表示向前看的输入符号的个数。
10.两种常用的动态存储分配办法是栈式⎽⎽⎽⎽动态分配和⎽⎽⎽堆式⎽⎽⎽⎽动态分配。
三判断题(认为正确的填“T”,错的填“F”)
【T】1.同心集的合并有可能产生“归约/归约”冲突。
【T】2.一个文法所有句子的集合构成该文法定义的语言。
【F】3.非终结符可以有综合属性,但不能有继承属性。
【T】4.逆波兰表示法表示表达式时无需使用括号。
【F】5.一个确定有穷自动机有且只有一个终态。
【F】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元素。
四解答题
1.给定文法G和句型(T+F)*i+T,
G:
E→E+T|TT→T*F|FF→(E)|i
(1)画出句型的语法树;
(2)写出句型的全部短语、简单短语和句柄。
解:
(略)
2.设有文法G:
S→S+S|S*S|i|(S)。
(1)对于输入串i+i*i给出一个最左推导;
(2)该文法是否是二义性文法?
请证明你的结论。
(1)i+i*i的最左推导:
S=>
S+S=>
i+S=>
i+S*S=>
i+i*S=>
i+i*i
(2)该文法是二义性的。
因为对于句子i+i*i可以画出两棵语法树(语法树略)。
3.给出语言{ambmcn|m≥1,n≥0}的上下文无关文法(2型)。
G:
S→AB|A
A→aAb|ab
B→cB|c
4.给出语言{akbmcn|k,m,n≥1}的正规文法(3型)。
A→aA|aB
B→bB|bC
C→cC|c
5.将文法G改写成等价的正规文法(3型)。
S→dAB
A→aA|a
B→bB|b
S→dA
A→aA|aB
6.设有字母表{a,b}上的正规式R=(ab|a)*。
(1)构造R的相应有限自动机;
3
ε
(2)构造R的相应确定有限自动机;
将
(1)所得的非确定有限自动机确定化
Ia
Ib
-+013
123
+123
13
+13
-+
(3)构造R的相应最小确定有限自动机;
对
(2)得到的DFA化简,合并状态0和2为状态2:
(4)构造与R等价的正规文法
令状态1和2分别对应非终结符B和A
A→aB|a|ε
B→aB|bA|a|b|ε
可化简为:
A→aB|ε
B→aB|bA|ε
7.已知正规文法G[S]:
S→aS|bA|a
A→aS
(1)构造与之等价的自动机NFAM
(2)将NFAM确定化为DFAM’
I
-0
S
SZ
A
+1
8.有穷自动机M接受字母表∑={0,1}上所有满足下述条件的串:
串中至少包含两个连续的0或两个连续的1。
请写出与M等价的正规式。
(0|1)*(00|11)(0|1)*
9.对右图所示的有限自动机
(1)若是确定的,则写出其转换矩阵;
若不是,则将其确定化;
(2)最小化。
(注:
确定化和最小化均应给出转换矩阵和图示)。
(1)
符号
状态
-1
4
+3
5
+4
6
(2)首先将状态按终态和非终态分成两个集合{1,2,5,6}和{3,4}
检查子集{1,2,5,6},由于f(1,a)=2,f(2,a)=1,f(5,a)=4,f(6,a)=3,所以子集{1,2,5,6}可进一步划分为{1,2}和{5,6}
检查子集{3,4},由于f(3,a)=2,f(4,a)=1以及f(3,b)=5,f(4,b)=6,所以不用进一步划分了。
检查子集{1,2},由于f(1,a)=2,f(2,a)=2以及f(1,b)=3,f(2,b)=4,所以不用进一步划分了。
检查子集{5,6},由于f(5,a)=4,f(6,a)=3以及f(5,b)=¢,f(6,b)=¢,所以不需要进一步划分了。
因此最终划分的结果是{1,2}、{3,4}和{5,6},重新命名状态,令{1,2}为1,{3,4}为3和{5,6}为5,则得到化简后的DFA为
10.写出在{a,b}上,不以a开头,但以aa结尾的字符串集合的正规式(并构造与之等价的最简DFA)。
依题意,“不以a开头”,则必以b开头,又要“以aa结尾”,故正规式为:
b(a|b)*aa
(构造与之等价的最简DFA,此略)
11.写一个LL
(1)文法G,使其语言是
L(G)={ambnc2n|m>
=0,n>
0}
并证明文法是LL
(1)。
文法G(S):
S→aS|E
E→bE’
E’→Ecc|cc
Select(S→aS)∩Select(S→E)=Ф
Select(E’→Ecc)∩Select(E’→cc)=Ф
故文法为LL
(1)的
12.将文法G改写成等价的LL
(1)文法,并构造预测分析表。
G:
S→S*aT|aT|*aT
T→+aT|+a
(编写递归下降子程序)
消除左递归后的文法G’:
S→aTS’|*aTS’
S’→*aTS’|ε
T→+aT|+a
提取左公因子得文法G’’:
S→aTS’|*aTS’
T→+aT’
T’→T|ε
Select(S→aTS’)={a}
Select(S→*aTS’)={*}
Select(S→aTS’)∩Select(S→*aTS’)=Ф
Select(S’→*aTS’)={*}
Select(S’→ε)=Follow(s’)={#}
Select(S’→*aTS’)∩Select(S’→ε)=Ф
Select(T→+aT’)={+}
Select(T’→T)=First(T)={+}
Select(T’→ε)=Follow(T’)={*,#}
Select(T’→T)∩Select(T’→ε)=Ф
所以该文法是LL
(1)文法。
预测分析表:
*
#
S’Ta,N
TS’T,N
S’
ε,P
T
T’a,N
T’
T,P
ε,N
OK
(递归下降子程序,略)
13.对文法G[S]:
S→aSb|P
P→bPc|bQc
Q→Qa|a
构造简单优先关系表。
该文法是否是简单优先文法?
简单优先关系矩阵如下:
P
Q
c
=
<
>
>
=<
由于矩阵中有元素存在多种优先关系,故不是简单优先文法。
14.考虑文法G:
S→AS|b
A→SA|a
(1)构造文法的可归前缀图(活前缀的DFA);
(2)判断文法是否是LR(0)文法,并说明理由。
(1)可归前缀图
(2)因为存在冲突,所以不是LR(0)文法。
15.已知文法G[S]:
S→Uta|Tb
T→S|Sc|d
U→US|e
(1)试判断G是LR(0),SLR
(1),LALR
(1)还是LR
(1),说明理由。
(2)构造相应的分析表。
(1)首先拓广文法为G'
,增加产生式S'
→S
(0)S'
→S
(1) S→UTa
(2)S→Tb(3)T→S
(4)T→Sc(5)T→d(6)U→US(7)U→e
G′的LR(0)项目集族及识别活前缀的DFA如下图所示:
(2)在I1中:
S'
→S.为接受项目,T→S.为归约项目,T→S.c为移进项目,存在接受-归约和移进-归约冲突,因此所给文法不是LR(0)文法。
在I1中:
Follow(S'
)∩Follow(T)={#}∩{a,b}=
Follow(T)∩{c}={a,b}∩{c}=
在I8中:
Follow(U)∩Follow(T)∩{c}={d,e}∩{a,b}∩{c}=
所以在I1中的接受-归约和移进-归约冲突与I8中的移进-归约和归约-归约冲突可以由Follow集解决,所以G是SLR
(1)文法。
构造的SLR
(1)分析表如下:
状态(State)
Action
Goto
a b c d e #
S U T
7
8
9
10
S5 S4
r3 r3 S6 Acc
S9..................
r7 r7
r5 r5........................
r4 r4.........................
S10 S9.........................
r3 r3. S6 r6 r6......
r2 r2. r2 r2 r2 r2
r1 r1. r1 r1 r1 r1
1 2 3
.
8 2 7
16.文法G及其LR分析表如下,请给出对串dada#的分析过程。
S→VdB①
V→e②
V→ε③
B→a④
B→Bda⑤
B→ε⑥
状态
ACTION
GOTO
d
e
B
V
r3
S3
acc
S4
r2
r6
S5
r4
S7
r1
S8
r5
对输入串dada#的分析过程
步骤
状态栈
符号栈
剩余输入符号
动作
02
024
0245
0246
02467
024678
01
#V
#Vd
#Vda
#VdB
#VdBd
#VdBda
#S
dada#
ada#
da#
a#
用V→ε归约
移进
用B→a归约
用B→Bda归约
用S→VdB归约
接受
17.对以下文法,请写出关于配对括号数目ps的属性文法。
文法规则
语义规则
S→(T)
S→i
T→T,S
T→S
h表示配对括号数目
(1)S.h=T.h+1
(2)S.h=0
(3)T.h=T’.h+S.h(4)T.h=S.h
18.把下列语句
ifx>0andy>0thenz:
=x+y
elsex:
=x+2
翻译成四元式序列。
略
19.对传值、传地址和传名3种参数传递方法分别写出下列程序的输出:
voidp(intx,inty,intz){
y*=3;
z+=x;
}
voidmain(){
inta=5,b=2;
p(a*b,a,a);
printf(“%d\n”,a);
这些参数传递机制如何实现?
(1)传值5;
(2)传地址25;
(3)传名45
(参数传递机制,略)
20.将下面程序划分为基本块,并画出其程序流图。
b:
=1
=2
ifw<
=xgotoL2
e:
=b
gotoL2
L1:
gotoL3
L2:
c:
=3
=4
c:
=6
L3:
ify<
=zgotoL4
halt
L4:
g:
=g+1
h:
=8
gotoL1
(1)基本块:
(2)程序流图
=xgotoL2
(1)
gotoL2
(2)
gotoL3(3)
c:
=6(4)
ify<
=zgotoL4(5)
halt(6)
g:
gotoL1(7)
21.对PL/0语言If……ELSE子句填空:
<
条件语句>
:
:
=IF<
条件>
THEN<
语句>
ELSE<
注:
FOR语句和WHILE语言的填空
请在空缺处填空,完成条件语句的编译算法:
switch(SYM){
……
caseIFSYM:
;
CONDITION(SymSetUnion(SymSetNew(THENSYM),FSYS),LEV,TX);
if(SYM==THENSYM)GetSym();
elseError(16);
CX1=CX;
GEN(JPC,0,0);
STATEMENT(SymSetUnion(SymSetNew(ELSESYM),FSYS),LEV,TX);
CX2=CX;
GEN(JMP,0,0);
;
If()
{GetSym();
STATEMENT(FSYS,LEV,TX);
;
break;
(1)getSym()
(2)Code[CX1].A=CX
(3)SYM==ELSESYM(4)Code[CX2].A=CX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 复习 例题 客观 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)