编译原理及编译程序构造部分课后答案Word格式.docx
《编译原理及编译程序构造部分课后答案Word格式.docx》由会员分享,可在线阅读,更多相关《编译原理及编译程序构造部分课后答案Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
cc,bcc,bbcc,bbbc&
L[G]
(1)〈A>=>cc
(2)〈A〉=>b〈A〉=>bcc
(3)〈A>=>b〈A>=>bb〈A>=>bbcc
(4)〈A>=>b〈A>=>bb〈A>=>bbb〈A>=>bbbcc
又tcc,bcc,bbcc,bbbccEVt*
二由语言定义,cc,bcc,bbcc,bbbcdEL[G]
5试对如下语言构造相应文法:
(1){a(bn)a|n=0,1,2,3,……},其中左右圆括号为终结符。
(2){(an)(bn)|n=1,2,3,}
(1)文法[G〈S>]:
S:
=a(B)a
B:
=bB|&
(2)文法[G〈S>]:
--错了,两个n不等
S:
二(A)(B)
A:
=aA|a
=bB|b
7•对文法G3[〈表达式〉]
〈表达式〉:
二〈项〉|〈表达式〉+〈项〉|〈表达式〉-〈项〉
〈项〉:
=〈因子〉|〈项〉*〈因子〉|〈项〉/〈因子〉
〈因子〉:
=(〈表达式〉)|i
列出句型〈表达式〉+〈项〉*〈因子〉的所有短语和简单短语
<表达式>=><表达式>+<项>
=><表达式>+<项>*<因子>
<表达式〉
<表达式〉+<项>
<项>*<因子〉
短语有:
〈表达式〉+〈项〉*〈因子〉和〈项〉*〈因子〉简单短语是:
〈项〉*〈因子〉
8文法V:
=aaV|bc的语言是什么?
?
L(G[V])={a2nbc|n二0,1,2,……}
V?
aaV?
aaaaV?
....?
a2nbc(n>
1)
bc(n=0)
练习2.4
5.已知文法G[E]:
E:
=ET+|T
T:
=TF*|F
F:
=FP?
|P
P:
=(E)|i有句型TF*PPf+,问此句型的短语,简单短语,和句柄是什么?
解:
此句型的短语有:
TF*PPf+,TF*,PPf,P简单短语有:
TF*,P句柄是:
TF*
8.证明下面的文法G是二义的:
=iSeS|iS|i
由文法可知iiiei是该文法的句子,
又由文法可知iiiei有两棵不同的语法树所以该文法是二义性文法。
第三章
练习3.1
1画出下述文法的状态图
〈Z>
:
二
〈B>
e
=
〈A>
f
e|〈A>
使用该状态图检查下列句子是否是该文法的合法句子
f,eeff,
eefe
J*"
>
■^1.、"
s.
S—-―>
AV―B1—MZ'
eeff不是该文法的合法句子,eefe是该文法的合法句子
2、有下列状态图,其中S为初态,Z为终态。
(1)写出相应的正则文法:
(2)写出该文法的V,Vn和Vt;
(3)该文法确定的语言是什么?
(1)Z—A1|0A—A0|0
(2)V={A,Z,0,1}
Vn={A,Z}
Vt={0,1}
(3)L(G[S])={0或On1,n》1}
L(G[S])={0|00*1}
练习3.2
1.令A,B,C是任意正则表达式,证明
以下关系成立:
A|A=A
(A*)*=A*
A*=&
|AA*
(AB)*A=A(BA)*
(A|B)*=(A*B*)*=(A*|B*)
证明:
⑴AIA={xIx€L(A咸x€L(A)}={
xIx€L(A)}=A
A*)*=(A*)0U(A*)1U(A*)2U-U(A*)n
=&
U(AOUA1UA2U-UAn)U(A1…)
UAOUA1UA2U-UAn
=A*
⑶e|AA*所表示的语言是:
{£
}ULA•LA*
=LAOULA(LAOULA1ULA2U…)
=LAOULA1ULA2U-=LA*
故£
|AA*=A*
⑷
(LALB)*LA=(£
{}UL(A)LBULALBLALBULALBLALBLALB
U…)LA
=LAULALBLAULALBLALBLUALALBLALBL
ALBULA…
=LAU({£
}ULBLAULBLALBLAJ…)
=LA(LBLA)
•••(AB)*A=A(BA)*
⑸三个表达式所描述的语言都是LALB中
任意组合
•(A|B)*=(A*B*)=(A*|B*)*
2.构造下列正则表达式相应的DFA
(1)1(O|1)*|O
(2)1(1O1O*|1(O1O)*1)*O
•⑴与1(0|1)*|0对应的NFA为:
4.
4
fl
屮
1
[OJ;
i|
0J
!
}
(OJ!
inI
■
b
]
(T
每个1
5.构造一DFA它接受艺={0,1}上所有满足如下条件的字符串:
都有0直接跟在右边。
A
*-
L
Jj0
第四章
练习4.2
2.有文法G[A]:
=(B)|dBe
=c|Bc
试设计自顶向下的语法分析程序
消除左递归:
=c{c}procedureB;
ifCLASS='
c'
thenbeginnextsym;
whileCLASS='
donextsym;
end;
elseerror;
programG;
begin
nextsym;
A;
procedureA;
('
thenbeginnextsym;
B;
)'
thennextsym;
elseerrorend;
else
d'
e'
thennextsym;
end;
else
error;
3.有文法G[Z]:
Z:
=AcB|Bd
=AaB|c
(1)试求各选择(候选式)的FIRST集合;
(2)该文法的自顶向下的语法分析程序是否要编成递归子程序?
为什么?
(3)试用递归下降分析法设计其语法分析程序。
解:
(1)FIRST(B)={a}FIRST(A)={c}FIRST(Z)={a,c}FIRST(AcB)={c}FIRST(Bd)={a}
FIRST(AaB)={c}FIRST(c)={c}
FIRST(aA)={a}FIRST(a)={a}
(2)要编成递归子程序,因为文法具有递归性
(3)改写文法:
Z:
=c{aB}
=a[A]
voidZ(){
=AcB|Bd
A:
:
if(sym=4c,)
j
=a|A|
i
AO;
if(sym=叱J
voidA()
voidBO
{”
{
KctsymO;
iffsym==P"
)
iffsym!
=4ha,)
B();
error();
getsyniQ;
J
eke
whilefsym——妝)
crror();
getsym();
geteymO;
iRsym=
elseiffsym=W)
B();
A();
I
if(svin!
-
errorO;
vise
voidmain()
getsymO;
getnym();
Z();
*——
练习4.3
1.对下面的文法G[E]:
EfTE'
E'
f+E|£
TfFT'
T'
fT|£
FfPF'
F'
f*F'
|£
Pf(E)|a|b|A
(1)计算这个文法的每个非终结符号的FIRST和FOLLOW集合
⑵证明这个文法是LL(1的
(3)构造它的预测分析表解:
(1)
FIRST(E)={(,a,bA}
FOLLOW(E)={#,)}
FIRST(E'
)={+,门
FOLLOW(E'
)={#,)}
FIRST(T)={(,a,bA,}
FOLLOW(T)={#,),+}
FIRST(T'
)={(,a,bA,£
}
FOLLOW(T'
)={#,),+}
FIRST(F)={(,a,bA,}
FOLLOW(F)={(,a,bA,,#,),+}
FIRST(F'
)={*,£
FOLLOW(F'
)={(,a,bA,,#,),+}
FIRST(P)={(,a,bA,}
FOLLOW(P)={*,(,a,b,A,#,),+}
(2)证明:
FIRST(+E)AFIRST£
)={+}A{&
}=/
FIRST(+E)AFOLLOW(E'
)={+}A{#,)}=/
FIRST(T)AFIRST£
)={(,a,b,A}A{£
}=/
FIRST(T)AFOLLOW(T'
)={(,a,bA}门倂,),+}=/
FIRST(*F'
)AFIRST£
)={*}A{&
)AFOLLOW(F'
)={*}{(,a,b,A,#,),+}=/
FIRST((E)AFIRST(a)AFIRST(b)AFIRSTA)二/
所以此文法是LL
(1)文法
(3)分析表
+
*
(
)「
a
#
E
EtTE'
E-k
TE
E—>
TEh
EtTE'
Er
E1t+E
EJe
T
T「IT
T—
FT1
TtFT
TtF『
TJ;
T1->
T—s
TJT
丁JT
TJe
F
FtPF
Ftpp
FJe
T*F
->
e
Fj
F->
FT
TE
FJe
Pt(E)
P->
P—>
2.对于文法G[S]:
S—aABbcd|&
A—ASd|£
B—SAh|eC|£
C—Sf|Cg|£
D—aBD|£
(1)对每一个非终结符号,构造FOLLOW集;
(2)对每一产生式的各侯选式,构造FIRST!
;
(3)指出此文法是否为LL
(1)文法。
(1)FIRST(S)={a£
FIRST(A)={a,d,£
FIRST(C)={a,f,g,门
FIRST(D)={a,门
FOLLOW(S)={d,a,f,h#}
FOLLOW(A)={a,h,e,b,d}
FOLLOW(B)={b,a}
FOLLOW(C)={g,b,a}
(2)FIRST(aABbcd)={a}
FIRST(£
)={£
FIRST(ASd)={a,d}
FIRST(SAh)={a,d,h}
FIRST(eC)={e}
FIRST(Sf)={a,f}
FIRST(Cg)={a,f,g}
⑶不是LL(1文法,因
FIRST(Sf)AFIRST(Cg)={a,f}{a,f,g产
或FOLLOW(S)AFIRST(aABbcd){d,a,f,h#}A{a}^/或FOLLOW(A)AFIRST(ASd){a,h,e,b,d}A{a,d或FOLLOW(B)AFIRST(SAh){a,b}A{a,d,h}*或FOLLOW(C)AFIRST(Sf){g,a,b}A{a,fH
或FOLLOW(C)QFIRST(Cg){g,a,b}A{a,f,g}^/
6.一个文法G是LL(1的必要与充分条件是什么?
试证明之。
充要条件是:
对于G的每一个非终结符A的任何两条不同规则A:
=a
|B,有:
(1)FIRSTa)AFIRST0)=/
⑵假若B=*=>
£
贝卩FIRSTa)AFOLLOW(A)二
充分性:
条件(
条件
(1)
(2)成立反证:
若分析表中存在多重入口,即
)成立
反证:
M[B,a]={B:
=a1,B:
=a2},表明FIRSTS1)AFIRSTa2)T或M[B,a]={B:
=a2},其中a2=£
或a2=+=>
表明FIRSTa1)AFOLLOW(B)^/
与条件
(1)
(2)矛盾。
必要性:
文法是
)矛盾。
文法是LL
(1)文法,即分析表中不含多重入口
若条件
文法,即分析表中不含多重入口
若条件
(1)不成立,即存在某非终结符B的两条规则B:
=a1|a2,
FIRST®
1)nFIRST®
2)/
则对任意的a€FIRST®
2),有
=a2},矛盾
若条件(
矛盾
若条件
(2)不成立,即存在某非终结符B的两条规则B:
a2=*=>
有first®
1)nFOLLOW(B)M^
1)nFOLLOW(B)有
练习4.4
4.有文法G[E]:
E:
=E+T|T
=T*F|F
=(E)|i
列出下述句型的短语和素短语:
E、T、i、T*F、F*F、i*F
、F*i、F+F+F
句型
短语
素短语
«
■■
V
t*f
T*F
F*F
RF
i*F
i,i*F
F*i
F,i,F*i
F+F+F
F,F,F,F+F,F+F+F
F+F
练习4.5
1.考虑具有下列规则的文法
S—E#E—T|E+TT—P|PfTP—F|P*FF—i|(E)
(a)下列句型的最右推导步骤中,其活前缀的集合是什么?
(1)E+i*i#
(2)E+Pf(i+i)#
(b)
为下列输入串构造最右推导的逆:
(1)i+i*i#
(2)i+if(i+i)#
(a)
(1)句柄为i,所以活前缀集合为:
E,E,E+i
(2)句柄为i,所以活前缀集合为:
E,E+,E+P,E+Pf,E+Pf(,E+P
f(I
(b)
(1)
i+i*i#
<
F+i*i#
P+i*i#
T+i*i#
E+i*i#
E+F*i#
E+P*i#
E+P*F#
E+P#
E+T#
E#
S
练习4.6
1.给定具有如下产生式的文法
S—E#EtE-T|TTtF|FfTF—i|(E)
试求下列活前缀的有效项目集:
(a)Ff(b)E-((c)E-T
(a)Ef
{Tt.FTtFf.TTt.FfTFt.iFt.(E)}
(b)E-(
{Ft(.E),Et.E-T,Et.T,Tt.F,Tt.FfT,Tt.i,T
t.(E)}
(c)E-T
{EtE-T.}
练习4.7
1.给定下列产生式的文法:
StEEtT|E+TTtP|T*PPtF|FfPFti|(E)
(1)为该文法构造SLR
(1)分析表。
状态
P
♦
co
Cl
C2
C3
C4
S5
S6
S7
rl
S8
r3
r5
S9
C5
r7
C6
CIO
C7
Cll
56
C8
C12
C9
C\3
r2
r4
C13
r6
C14
rS
rX
第五章
练习5
3.如下非分程序结构语言的程序段,画出编译该程序段时将生成的有序符号表。
BLOCK
REALX,Y,Z1,Z2,Z3;
INTEGERIJKLASTI;
STRINGLIST-OF-NAMES;
LOGICALENTRY-ONEXIT-OFF;
ARRAYREALVAL(20);
ARRAYINTEGERMIN-VAL-IND(20);
ENDOFBLOCK;
变量名
类型
维数
E\TRY-()\
LOGICAL
EXIT-OFF
INTEGER
K
LASTI
LIST'
OFNAMES
STRING
MTN-VAI.-IND
VAL
REAL
X
Y
Z1
Z2
Z3
5.画出下面的分程序结构的程序段当程序段3和4的编译即将完成
以前的栈式符号表的图形(包括有效部分和失效部分)。
第六章
练习6.2
2考虑下面的类ALGO程序,画出当程序执行到①和②时,运行栈
内容的图像。
第七章
练习7
2.
转换成三元式,间接
将下面的语句A:
=(B+C)fE+(B+C)*F
三元式和四元式序列
三元式
四元式
⑴+B,C
(1)+B,C,T1
(2)t(l)kE
(2)TTbE,T2
(3)+B,C
(3)+B.CT3
(4)*(3),卩
(4)*T3,F,T4
(5)+
(2),⑷
(5)+T2,T冬T5
⑹:
二A,(5)
(6):
=A,T5
间接三元式
操作
(I)
2、
(2)
3>
(3)
5、
6.
⑸
⑴+
C
(2)T
(1)t
⑶*
(1),
(4)+
(2),
(5):
A,
第九章
练习9.1
1.试