《编译原理》课后习题答案第二章.docx
《《编译原理》课后习题答案第二章.docx》由会员分享,可在线阅读,更多相关《《编译原理》课后习题答案第二章.docx(10页珍藏版)》请在冰豆网上搜索。
《编译原理》课后习题答案第二章
第二章
习题1
6.答:
省略表示法:
{1.3,1.33,1.333…};描述表示法:
{1.3i|i=1,2,3…}
7.答:
x+={0,12,123,1234…};
x*={,0,12,123…}
8.答:
长度为0的符号串个数:
0个
长度为1的符号串个数:
26个
长度为2的符号串个数:
26*36=936个
长度为3的符号串个数:
26*36*36=33696个
长度不大于3的符号串个数:
26+936+33696=34658个
有代表性的符号串:
a,a0,aa,a00,a0a,aa0
习题2
3.
(1)ETT/FF/F(E)/F(E+T)/F(T+T)/F(F+F)/F(i+i)/i
(2)EE+TE+T+TE+T*F+FE+T*F+iE+T*T*F+i
E+T*F*F+iE+T*F*i+i
短语:
E+T是相对于E的短语;F是相对于T的短语;i是相对于F的短语;T*F是相对于T的短语;E+T+T是相对于E的短语;E+T+F是相对于E的短语;E+T+i是相对于E的短语;
E+T*F是相对于E的短语;E+T*F*F是相对于E的短语;E+T*F*i是相对于E的短语;
E+T*F*i+i是相对于E的短语.
简单短语:
E+T是相对于E的简单短语;F是相对于T的简单短语;i是相对于F的简单短语;T*F是相对于T的简单短语;
5.解:
L(G[A])={bn-1a|n=1,2…}
L(G[W])={bn-1a2|n=1,2…}
证明:
当n=1时,WAaaaa2,显然结论成立;
假设n=k时W*bk-1a2;
则当n=k+1时,WAa*bbk-1aa(bka2)
综上,结论对一切n>=1成立,即W*bn-1a2
在上面的规纳证明中,利用文法的一切规则且仅用了文法中的规则,因此,该文法产生的语言L(G[W])={bn-1a2|n=1,2…}
6.
(1)Z:
:
=aAd|aZd
A:
:
=bc|bAc
(2)Z:
:
=AB
A:
:
=ab|aAb
B:
:
=b|Bb
7.解:
题中要求文法是:
Z:
:
=1|3|5|7|9|Z1|Z3|Z5|Z7|Z9|A1|A3|A5|A7|A9
A:
:
=2|4|6|8|A0|A2|A4|A6|A8|Z0|Z2|Z4|Z6|Z8
习题5
2.最左推导:
S(T)(T,S)(S,S)(a,S)(a,(T))(a,(S))(a,(b))
最右推导:
S(T)(T,S)(T,(T))(T,(S))(T,(b))(S,(b))(a,(b))
最右推导是规范分析,最右推导每一步的句柄是:
①(;②T;③(;④S;⑤b;⑥S;⑦a
4.
(2)证明:
从上面两个语法树中可得出对于文法G[S]:
S:
:
=iScS|iS|i的句子iiici有两个不同的语法树,故得出该文法是二义性的.
5.
(1)方法一:
自顶向下
最右推导:
ZAAiBAiCAi(Bi(B+Ci(B+(i(C+(i((+(i(
方法二:
自底向上
最左归约:
ZAAiBAiCAi(Bi(B+Ci(B+(i(C+(i((+(i(矚慫润厲钐瘗睞枥庑赖賃軔朧碍鳝绢懣硯涛镕頃赎巯驂雞虯从躜鞯烧论雛办罴噓剥淚軔琿閔。
第三章
习题6
3.解:
DFAD=({A,B,C,D,E,F},{0,1},M,A,{E,F})
M:
M(A,0)=B
M(B,0)=DM(B,1)=C
M(C,0)=AM(C,1)=F
M(D,0)=AM(D,1)=C
M(E,0)=DM(E,1)=C
M(F,0)=EM(F,1)=A
对于字符串0011011运行DFAD有:
M(A,0011011)
=M(M(A,0),011011)
=M(M(B,0),11011)
=M(M(D,1),1011)
=M(M(C,1),011)
=M(M(F,0),11)
=M(M(E,1),1)
=M(C,1)
=F
∴DFAD能接受字符串0011011
8.解:
将状态转换图列表,即:
聞創沟燴鐺險爱氇谴净祸測樅锯鳗鲮詣鋃陉蛮苎覺藍驳驂签拋敘睑绑鵪壺嗫龄呓骣頂濺锇慪。
由左图可知,该状态转换图直接对应的是确定有穷状态自动机DFA
DFAD=({0,1,2,3,4,5},{a,b},M,0,{0,1})
M:
M(0,a)=1M(0,b)=2
M(1,a)=1M(1,b)=4
M(2,a)=1M(2,b)=3
M(3,a)=3M(3,b)=2
M(4,a)=0M(4,b)=5
M(5,a)=5M(5,b)=1残骛楼諍锩瀨濟溆塹籟婭骒東戇鳖納们怿碩洒強缦骟飴顢歡窃緞駔蚂玨础对聳卻錨纩鳅抛蒉。
化简:
1.分化
①{0,1}{2,3,4,5}
②{0,1}{2,4}{3,5}
2.合并
3.删除
没有无用状态和死状态,所以化简到此结束
状态最小化图:
9.
(1)证明:
e1|e2=e2|e1
|e1|e2|=|e1|∪|e2|=|e2|∪|e1|=|e2|e1|∴e1|e2=e2|e1
(2)证明:
(e1|e2)e3=e1e3|e2e3
|(e1|e2)e3|=|(e1|e2)||e3|=|e1|e2||e3|=(|e1|∪|e2|)|e3|=|e1||e3|∪|e2||e3|=|e1e3|∪|e2e3|=|e1e3|e2e3|
∴(e1|e2)e3=e1e3|e2e3
10.证明:
e=b|ae当且仅当e={a}b
证:
充分性:
正则表达式e=b|ae的值是这样一个正则集,以无数个小a开头,后跟一个小b。
即:
e={a}b。
必要性:
|{a}b|=|{a}||b|=|a|*|b|
∴e=b|ae当且仅当e={a}b
11.
(1)
从e构造转换系统:
酽锕极額閉镇桧猪訣锥顧荭钯詢鳕驄粪讳鱸况閫硯浈颡閿审詔頃緯贾钟費怜齪删费龙觯諞餛。
去ε弧及无用状态和死状态:
由状态转换图构造NFA:
NFAA=({S,A,B,C,D,F,Z},{0,1},M,{S},{Z})
M:
由NFA产生DFA:
分化:
①{[S],[C],[A],[AD],[AF],[ABF]}{[AFZ]}
②{[S]}{[C]}{[A],[AF],[ABF]}{[AD]}{[AFZ]}
最小化:
(2)由e构造转换系统:
去ε弧及无用状态和死状态:
因为现在只有一个状态,所以无需再最小化,此时就是最小化.
13.解:
建立方程组如下:
W=Ua+Vb①
U=Va+c②
V=Ub+c③
把③代入②得,U=(Ub+c)a+c
=Uba+ca+c
把它改写成U=(ca+c){ba},因此U=(ca|c){ba}④
把②代入③得,V=(Va+c)b+c
=Vab+cb+c
把它改写成V=(cb+c){ab},因此V=(cb|c){ab}⑤
把④⑤代入①得,W=Ua+Vb=(ca|c){ba}a+(cb|c){ab}b
因此W=(ca|c){ba}a|(cb|c){ab}b彈贸摄尔霁毙攬砖卤庑诒尔肤亿鳔简闷鼋缔鋃耧泞蹤頓鍥義锥柽鳗铟夺髅搅联黨莢蠷抛務槍。
第四章
6、试消去文法G[S]:
S∷=Qc|Rd|c
Q∷=Rb|Se|b
R∷=Sa|Qf|a
文法左递归与规则左递归。
解:
step1:
U1=SU2=QU3=R
step2:
i=1,j=1:
j>i-1,不执行关于j的循环,且关于U1=S不存在规则左递归
i=2,j=1:
U2=Q∷=(Qc|Rd|c)e|Rb|b
=Qce|Rde|ce|Rb|b
消去规则左递归:
Q∷=RdeQ′|ceQ′|RbQ′|bQ′
Q′∷=ceQ′|ε
i=3,j=1:
U3=R∷=Qca|Rda|ca|Qf|a
j=2:
R∷=RdeQ′ca|ceQ′ca|RbQ′ca|bQ′ca|Rda|ca|RdeQ′f|cf|
RbQ′f|bQ′f|a
消去规则左递归:
R∷=ceQ′caR′|bQ′caR′|caR′|ceQ′fR′|bQ′fR′|aR′
R∷=deQ′caR′|bQ′caR′|daR′|deQ′fR′|bQ′fR′|ε
Step3:
G′[S]:
S∷=Qc|Rd|c
Q∷=RdeQ′|ceQ′|RbQ′|bQ′
Q′∷=ceQ′|ε
R∷=ceQ′caR′|bQ′caR′|caR′|ceQ′fR′|bQ′fR′|aR′
R∷=deQ′caR′|bQ′caR′|daR′|deQ′fR′|bQ′fR′|ε
此文法没有多余规则,所以消去左递归后的文法就是G′[S]
4、试为文法G[P]:
P∷=beginSendS∷=A|C
A∷=V:
=EC∷=ifEthenS
E∷=VE∷=E+VV∷=i
采用某种程序设计语言构造递归下降识别程序。
解:
由于文法存在左递归,进行文法等价变换,得到等价文法G′[P]:
P∷=beginSendS∷=A|C
A∷=V:
=EC∷=ifEthenS
E∷=VE′E′∷=+VE′|εV∷=i
流程图如下:
謀荞抟箧飆鐸怼类蒋薔點鉍杂篓鳐驱數硯侖葒屜懣勻雏鉚預齒贡缢颔臉悭榇龟伤确妫閽缮该。
8、设文法G[E]:
E∷=T+E|T-E|T
T∷=F*T|F/T|F
F∷=(E)|i
试问能否直接应用预测分析技术来实现其识别程序?
简略说明原因。
请设法为该文法构造预测分析表,给出构造过程,并识别输入符号串i*i-(i+i)/i是否该文法的句子。
解:
不能直接应用预测分析技术来实现其识别程序。
原因:
该文法存在回溯性
消回溯:
E∷=TE′
E′∷=+E|-E|ε
T∷=FT′
T′∷=*T|/T|ε
F∷=(E)|i
first(E)={(,i}
first(E′)={+,-,ε}
first(T)={(,i}
first(T′)={*,/,ε}
first(F)={(,i}
follow(E)={#,)}
follow(E′)={#,)}
follow(T)={#,),+,-}
follow(T′)={#,),+,-}
follow(F)={*,/,#,),+,-}厦礴恳蹒骈時盡继價骚卺癩龔长鳏檷譴鋃蠻櫓鑷圣绋閼遞钆悵囅为鹬饲綣渍骯為棟轾緝駐鴕。
识别输入符号串i*i-(i+i)/i,则识别过程
步骤栈输入输出
0#Ei*i-(i+i)/i#E∷=TE′
1#E′Ti*i-(i+i)/i#T∷=FT′
2#E′T′Fi*i-(i+i)/i#
3#E′T′i*i-(i+i)/i#
4#E′T′*i-(i+i)/i#T′∷=*T
5#E′T**i-(i+i)/i#
6#E′Ti-(i+i)/i#T∷=FT′
7#E′T′Fi-(i+i)/i#
8#E′T′i-(i+i)/i#
9#E′T′-(i+i)/i#T′∷=ε
10#E′-(i+i)/i#E′∷=-E
11#E--(i+i)/i#
12#E(i+i)/i#E∷=TE′
13#E′T(i+i)/i#T∷=FT′
14#E′T′F(i+i)/i#F∷=(E)
15#E′T′)E((i+i)/i#
16#E′T′)Ei+i)/i#E∷=TE′
17#E′T′)E′Ti+i)/i#T∷=FT′
18#E′T′)E′T′Fi+i)/i#
19#E′T′)E′T′i+i)/i#
20#E′T′)E′T′+i)/i#T′∷=ε
21#E′T′)E′+i)/i#E′∷=+E
22#E′T′)E++i)/i#
23#E′T′)Ei)/i#E∷=TE′
24#E′T′)E′Ti)/i#T∷=FT′
25#E′T′)E′T′Fi)/i#
26#E′T′)E′T′i)/i#
27#E′T′)E′T′)/i#T′∷=ε
28#E′T′)E′)/i#E′∷=ε
29#E′T′))/i#
30#E′T′/i#T′∷=/T
31#E′T//i#
32#E′Ti#T∷=FT′
33#E′T′Fi#
34#E′T′i#
35#E′T′#T′∷=ε
36#E′#E′∷=ε
37##
因此识别出i*i-(i+i)/i是文法G[E]的句子茕桢广鳓鯡选块网羈泪镀齐鈞摟鳎饗则怿唤倀缀倉長闱踐識着純榮詠橱释环东黲奁榿嚙熗灩。
第五章
习题8
2.为文法G[S]:
S∷=a|b|(R)R∷=TT∷=S,T|S
构造简单优先矩阵。
解:
S1=SS2=aS3=bS4=(S5=RS6=)S7=TS8=,
鹅娅尽損鹌惨歷茏鴛賴縈诘聾諦鳍皑绲讳谧铖處騮戔鏡謾维覦門剛慘貽专秃胜鹃龄鬧酽铈趸。
最终得到的简单优先矩阵为:
3.利用图5-4中的简单优先矩阵,识别文法G5.2的句子b(aa)b.
步骤句型句柄归约为所构造的直接推导
由于最终归约到了识别符号Z,识别出符号串b(aa)b.是文法G5.2的句子.
所构造的推导是:
Z=>bMb=>b(Lb=>b(Ma)b=>b(aa)b
习题9籟丛妈羥为贍偾蛏练淨槠挞曉养鳌顿顾鼋徹脸鋪闳讧锷詔濾铩择觎測馮夢织個鱉韋禅珑怃傧。
3.试为下列优先矩阵构造优先函数
(1)逐次加一法构造优先函数:
步骤一、置初始值
步骤二、关于优先关系修改f与g的值成
步骤三、关于优先关系±修改f与g的值成,而此时构造过程已收敛,即优先函数值与优先关系完全一致,则该优先矩阵所对应的优先函数为:
(2)Bell有向图法(非形式化)
步骤一、构造有向图
步骤二、对各结点所能达到的结点个数计数,最终可列表:
步骤三、检查可得f与g的值与原有的优先矩阵一致,所以上表函数即为所求优先函数
Bell有向图法(形式化)
步骤一、构造布尔矩阵B
步骤二、使用Warshall算法构造布尔矩阵B*
步骤三、则优先函数为:
預頌圣鉉儐歲龈讶骅籴買闥龅绌鳆現檳硯遙枨纾釕鴨鋃蠟总鴯询喽箋纣莴缬膾鲠郐鸳鼴該礎。
习题10
3、试为文法G[Z]:
Z∷=A()A∷=(|Ai|B)B∷=i
构造算符符优先关系。
解:
firstterm(Z)={(}firstterm+(Z)={(,i,)}
firstterm(A)={(,i,)}firstterm+(A)={(,i,)}
firstterm(B)={i}firstterm+(B)={i}
但是由于文法中不存在…TV…(T∈VT,V∈VN)的规则,所以没有的关系。
Lastterm(Z)={)}Lastterm+(Z)={)}
Lastterm(A)={(,i,)}Lastterm+(A)={(,i,)}
Lastterm(B)={i}Lastterm+(B)={i}
由规则Z∷=A()及对于A的Lastterm+,得
((、i(、)(
由规则A∷=Ai及对于A的Lastterm+,得
(i、ii、)i
由规则A∷=B)及对于B的Lastterm+,得
i)
而等于关系只有:
()
最终求得算符优先关系矩阵是:
4、试证明定理5.13:
证明:
Ufirstterm+TU+T…或U+VT…U*W…且W∷=[V]T…
Uhead*W且WfirsttermTU(head*)(firstterm)T
∴firstterm+=(head*)(firstterm)
TjTiU∷=…TjV…其中V+Ti…或V+WTi…
Tj±V且Vfirstterm+TiTj±V且V(head*)(firstterm)Ti
Tj(±)(head*)(firstterm)Ti
∴=(±)(head*)(firstterm)得证.
证明:
Ulastterm+TU+…T或U+…TVU*…W且W∷=…T[V]
Utail*W且WlasttermTU(tail*)(lastterm)T
∴lastterm+=(tail*)(lastterm)
TjTiU∷=…VTi…其中V+…Tj或V+…TjW
V±Ti且Vlastterm+TjTjtranspose(lastterm+)V且V±Ti
Tjtranspose((tail*)(lastterm))V且V±Ti
Tjtranspose((tail*)(lastterm))(±)Ti
∴=transpose((tail*)(lastterm))(±)得证.
6、试用图5-15中的算符优先识别算法识别符号串i*(i+i)是否是第五题中文法的句子。
识别过程如下:
栈关系余留串动作
#i*(i+i)#S
#i*(i+i)#r
#N*(i+i)#S
#N*(i+i)#S
#N*(i+i)#S
#N*(i+i)#r
#N*(N+i)#S
#N*(N+i)#S
#N*(N+i)#r
#N*(N+N)#r
#N*(N)#S
#N*(N)#r
#N*N#r
#N#a
所以符号串i*(i+i)是第五题中文法的句子。
习题11
2、试说明文法G[S]:
S∷=aBB∷=Bb|b不是LR[0]文法。
解:
构造文法G[S]的增广文法G[Z]:
Z∷=S#S∷=aBB∷=Bb|b
CFSM:
因为文法G[Z](等价于G[S])的CFSM中有不适定状态S4,所以此文法不是LR(0)文法。
4、试利用表5-10中的分析表识别符号串(i+i)*i+i是否是文法G5.5的句子。
给出识别过程。
注意,请指出步每步动作。
解:
识别过程:
栈余留串动作
(i+i)*i+i#
i+i)*i+i#
+i)*i+i#
+i)*i+i#
+i)*i+i#
+i)*i+i#
i)*i+i#
)*i+i#
)*i+i#
)*i+i#
)*i+i#
*i+i#
*i+i#
*i+i#
i+i#
+i#
+i#
+i#
+i#
i#
#
#
#
#acc
5、设文法G[S]:
S∷=a|b|(T)T∷=T,S|S
试构造closure({[0,0;#]})。
解:
closure({[0,0;#]})=closure({[Z→.S,#]})
={[Z→.S,#],[S→.a,#],[S→.b,#],[S→.(T),#]}
6、试写出关于文法G[S]:
S∷=a|b|(T)T∷=T,S|S
的规则T∷=T,S的一切LR(0)项,且构造CLOSURE({S→(.T)}),指明它有哪些后继项集,各是什么?
其中哪些对应于归约状态?
哪些对应于读状态?
哪些对应于不适定状态?
解:
T∷=T,S的一切LR(0)项:
T→.T,ST→T.,ST→T,.ST→T,S.
CLOSURE({S→(.T)})={S→(.T),T→.T,S,T→.S,S→.a,S→.b,S→.(T)}
CFSM:
后继项集有:
S1、S2、S3、S4、S5
归约状态:
S2、S3、S4
读状态:
S1、S5
无不适定状态
9、设文法G[E]:
E∷=E+T|TT∷=TF|FF∷=F*|(E)|a|b
构造该文法的LR(0)项集规范族与SLR
(1)分析表。
解:
LR(0)项集规范族:
SLR
(1)分析表:
13、设文法G[B]:
B∷=AB|bA∷=BA|a
则该文法是否是LALR
(1)文法?
是否是LR
(1)文法?
请说明理由。
解:
渗釤呛俨匀谔鱉调硯錦鋇絨钞陉鳅陸蹕銻桢龕嚌谮爺铰苧芻鞏東誶葦鎊鎪荟乌驁諷葒讀儺钨。
由上面两图可以看出该文法是二义性的,二义性的文法必不是LR文法,所以该文法不是LR文法,因而也不是LALR
(1)和LR
(1)文法.铙誅卧泻噦圣骋贶頂廡缝勵罴楓鳄烛员怿镀鈍缽蘚邹鈹繽駭玺礙層談愨厲裣脚驱绲啮來维嗳。