编译原理复习题有答案版.docx
《编译原理复习题有答案版.docx》由会员分享,可在线阅读,更多相关《编译原理复习题有答案版.docx(9页珍藏版)》请在冰豆网上搜索。
![编译原理复习题有答案版.docx](https://file1.bdocx.com/fileroot1/2023-1/14/cd7dd478-3616-4a60-8c69-b4ac928d123b/cd7dd478-3616-4a60-8c69-b4ac928d123b1.gif)
编译原理复习题有答案版
1、给出下面语言的相应文法。
L1={anbnci|n>1,i>0}
答案:
STAB|B
Ata|aA
BtbBc|bc
2•给出下面语言的相应文法
L1={anbncmdm|m,n>1,n为奇数,m为偶数}。
答案:
文法G(S):
StAC
AtaaAbb/ab
CtccCcc/cc
3、构造一个DFA它接受!
={a,b}上所有包含ab的字符串。
(要求:
先将正规式转化为NFA再将NFA确定化,最小化)
(1)相应的正规式为(a|b)*ab(a|b)*
(2)①与此正规式对应的NFA为
答案;在自己写的纸上
4、对下面的文法G:
EtTE'E't+E|&TtFT'T'tT|&
Ftpf'F't*F'|&Pt(E)|a|b|A
(1)证明这个文法是LL
(1)的。
考虑下列产生式:
E'->E|&
T'->T|&
F'->*F'|£
P->(E)|Aa|b
FIRST(+E)AFIRST(&)={+}A{&}=©
FIRST(+E)AFOLLOW(E')={+}A{#,)}=©FIRST(T)AFIRST(&)={(,a,b,A}A{£}=©
FIRST(T)AFOLLOW(T')={(,a,b,A}A{+,),#}=©
FIRST(*F')AFIRST(&)={*}A{£}=©FIRST(*F')AFOLLOW(F')={*}A{(,a,b,A,+,),#}=©
FIRST((E))AFIRST(a)AFIRST(b)AFIRST(A)=©所以,该文法式LL
(1)文法.
计算这个文法的每个非终结符的FIRST和FOLLOW(8分)
答案:
FIRST(E)={(,a,bf}
FIRST(E')={+,£}
FIRST(T)={(,a,bf}
FIRST(T')={(,a,bf,&}
FIRST(F)={(,a,bf}
FIRST(F')={*,£}
FIRST(P)={(,a,bf}
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(T)={+,),#}
FOLLOW(T')={+,),#}
FOLLOW(F)={(,a,bA+,),#}
FOLLOW(F')={(,a,bf,+,),#}
FOLLOW(P)={*,(,a,bf,+,),#}
(3)构造它的预测分析表。
(6分)
答案;在手机上
写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。
答案:
逆波兰式:
(abcd-*+)
三元式序列:
OP
ARG1
ARG2
(1)-
c
d
(2)*
b
(1)
(3)+
a
(2)
给出下面语言的相应文法
L1={anbnambm|n,m>0}给出下面语言的相应文法
答案:
StAB|A|B|刀
AtaAb|ab
BtaBb|ab
L2={anbnci|n>1,i>0}
给出下面语言的相应文法
答案:
StAB|B
Ata|aA
BtbBc|bc
17、对下面的文法G:
S—■SaT|aT|aT
T■aT|:
:
a
(1)消除该文法的左递归和提取左公因子;
(2)构造各非终结符的FIRST和FOLLOWS合;
(3)构造该文法的LL
(1)分析表,并判断该文法是否是LL
(1)的
18、文法G(S)及其LR分析表如下,请给出串baba#的分析过程<:
(1)StDbB⑵Dtd(3)Dt&
⑷Bta(5)BtBba⑹Bt&
LR分析表
ACTION
GOTO
b
D
a
#
S
b
D
0
r3
s3
1
2
1
acc
2
s4
3
r2
4
r6
S5
r6
6
5
r4
r4
6
s7
r1
7
S8
8
r5
r5
答案:
步骤状态符号输入串
00#baba#
102#Dbaba#
2024#Dbaba#
30245#Dbaba#
40246#DbBba#
502467#DbBba#
6024678#DbBba#
70246#DbB#
801#S#acc
七、证明题
1、证明下面文法是LL⑴的但不是SLR⑴的。
S—AaAb|BbBa
Af£
B—£
首先该文法无左递归存在,没有公共左因子。
其次:
对于S—AaAb|BbBaFIRST(AaAb)={a}FIRST(BbBa)={b}
FIRST(AaAb)GFIRST(BbBa)=O
所以该文法是LL
(1)文法。
⑵证明该文法不是SLR的。
文法的LR(0)项目集规范族为:
I0={S.SS—.AaAbS—.BbBaA—.B—.}
I1={S'—S.}
I2={S—A.aAb}
I3={SfB.bBa}
I4={SfAa.AbAf.}
I5={SfBb.BaBf.}
I6={SfAaA.b}
I7={SfBbB.a}
I8={SfAaAb.}
I9={SfBbBa.}
考察I0:
FOLLOW(A)={a,b}FOLLOW(B)={a,b}FOLLOW(ADFOLLOW(B)={a,b}
产生规约-规约冲突。
所以该文法不是SLR
(1)文法。
2、证明下面文法是SLR
(1)但不是LR(0)的。
SfA
AfAb|bBa
BfaAc|a|aAb
解:
文法G[S]:
0:
SfA
1:
AfAb
2:
AfbBa
3:
BfaAc
4:
Bfa
5:
BfaAb
状态5存在“归约—移进”冲突,状态9存在“归约—归约”冲突,因此该文法不是LR(0)文法
状态5:
FOLLOW(B>{a},因此,FOLLOW(B){b}=O
状态9:
FOLLOW(B>{a},FOLLOW(符{#,b,c},因此FOLLOW(B)FOLLOW(符①
状态5和状态9的冲突均可用SLR
(1)方法解决,构造SLR
(1)分析表
状态
ACTION
GOTO
a
b
c
#
A
B
0
S2
1
1
S3
ACCEPT
2
S5
4
3
R1
R1
R1
4
S6
5
R4
S2
7
6
R2
R2
R2
7
S9
S8
8
R3
9
R5
R1
R1
R1
I111I该SLR
(1)分析表无
重定义,因此该文法是SLR
(1)文法,不是LR(0)文法。
八、语义分析题
1、将语句
if((A<0)(B>0))thenwhile(C>0)doC:
=C-D
翻译成四元式
答案:
100(j<,A,0,104)
101(j,-,-,102)
102(j>,B,0,104)
103(j,-,-,109)
104(j>,C,0,106)
105(j,-,-,109)
106(-,C,D,T1)
107(:
=,T1,-,C)
108(j,-,-,104)
109
e>cdoc:
=c+1
2、写出下面语句经语法制导翻译后所生成的四元式代码序列。
ifxelsex:
=x+5
答案:
假设初始为100,则四元式代码序列为
100
if
xgoto
101
goto
107
102
if
e>c
goto
103
goto
109
104
M:
=C+1
105
C:
=M
106
goto
102
107
N:
=X+5
108
X:
=N
109
7、设有文法:
E—E+T|T
T—T*F|F
F-(E)|i
102
104
(1)证明E+T*F是它的一个句型。
(3分)
答案:
e^>eIt^eI
(2)给出E+T*F的所有短语,直接短语和句柄。
(4分)
短语:
E+T*F,T*F,
直接短语:
T*F句柄:
T*F
(3)给出句子1+1*1的最右推导。
(4分)
没有答案
10、11、构造下面正规式相应的DFA
1(0|1)*101
答案:
II0I1
{X}①{A,B,C}
{A,B,C}{B,C}{B,C,D}
{B,C}{B,C}{B,C,D}
{B,C,D}{B,C,E}{B,C,D}
{B,C,E}{B,C}{B,C,D,y}
{B,C,D,y}{B,C,E}{B,C,D}
14、对下面的文法G:
Exprf-Expr
Exprf(Expr)|VarExprTail
ExprTailf-Expr|£
VarfidVarTail
VarTailf(Expr)|£
(1)构造LL
(1)分析表。
(12分)
(2)给出对句子id—id((id))的分析过程。
(8分)
答案:
(1)FIRST(Expr)={_,(,id}FIRST(ExprTail)={_,£}FIRST(Var)={id}
FIRST(VarTail)={(,£}FOLLOW(Expr)={#,)}FOLLOW(ExprTail)={#,)}
FOLLOW(Var)={_,#,)}FOLLOW(VarTail)={_,#,)}
(2)给出对句子id—id((id))的分析过程。
(
步骤符号栈输入串所用产生式
0#Exprid__id((id))#
1#ExprTailVarid__id((id))#ExprfVarExprTail2#ExprTail
VarTailidid__id((id))#VarfidVarTail
3#ExprTailVarTail__id((id))#
4#ExprTail__id((id))
#VarTailf£
5#Expr___id((id))
ExprTailf_Expr
6#Expr_id((id))
8#Exprid((id))#
9#ExprTailVarid((id))
10#ExprTailVarTailidid((id))
11#ExprTailVarTail((id))
12#ExprTail)Expr(((id))
13#ExprTail)Expr(id))
14#ExprTail))Expr((id))
15#ExprTail))Exprid))
16#ExprTail))ExprTailVar
#ExprfVarExprTail
#VarfidVarTail
#
#VarTailf(Expr)
#
#Exprf(Expr)
#
))#ExpfVarExprTai
17#ExprTail))ExprTailVarTailidid))
#VarfidVarTail
18#ExprTail))ExprTailVarTail))#
19#ExprTail))ExprTail))
#VarTailf£
20#ExprTail))))#ExprTailf£
21#ExprTail))#
22#ExprTail#ExprTailf£
23##
分析成功