《编译原理》西北工业大学第三版课后答案Word格式.docx
- 文档编号:8657991
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:96
- 大小:353.06KB
《编译原理》西北工业大学第三版课后答案Word格式.docx
《《编译原理》西北工业大学第三版课后答案Word格式.docx》由会员分享,可在线阅读,更多相关《《编译原理》西北工业大学第三版课后答案Word格式.docx(96页珍藏版)》请在冰点文库上搜索。
(4){w#wr#|w?
{0,1}*,wr是w的逆序排列}
G(S)=({S,W,R},{0,1,#},{S→W#,W→0W0|1W1|#},S)
(5)任何不是以0打头的所有奇整数所组成的集合
G(S)=({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,I→J|2|4|6|8,J→1|3|5|7|9},S)
(6)所有偶数个0和偶数个1所组成的符号串集合
对应文法为S→0A|1B|e,A→0S|1CB→0C|1SC→1A|0B
3.描述语言特点
(1)S→10S0S→aAA→bAA→a
本文法构成的语言集为:
L(G)={(10)nabma0n|n,m≥0}。
(2)S→SSS→1A0A→1A0A→ε
L(G)={1n10n11n20n2…1nm0nm|n1,n2,…,nm≥0;
且n1,n2,…nm不全为零}该语言特点是:
产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。
(3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε
L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m>
0。
(4)S→bAdcA→AGSG→εA→a
可知,S=>
…=>
baSndcn≥0
该语言特点是:
产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。
(5)S→aSSS→a
L(G)={a(2n-1)|n≥1}可知:
奇数个a
4.解:
此文法产生的语言是:
以终结符a1、a2…an为运算对象,以∧、∨、~为运算符,以[、]为分隔符的布尔表达式串
5.
5.1解:
由于此文法包含以下规则:
AA→e,所以此文法是0型文法。
5.2证明:
略
6.解:
(1)最左推导:
<
程序>
T<
分程序>
标号>
:
TL:
TL:
L:
无标号分程序>
分程序首部>
;
复合尾部>
说明>
begin<
begind;
d;
语句>
s;
复合尾部.
end
send
最右推导:
end
说明;
begin说明;
L:
(2)句子L:
send的相应语法树是:
7.解:
aacb是文法G[S]中的句子,相应语法树是:
S=>
aAcB=>
aAcb=>
aacb
最左推导:
aacB=>
(2)aabacbadcd不是文法G[S]中的句子
因为文法中的句子不可能以非终结符d结尾
(3)aacbccb不是文法G[S]中的句子
可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。
(4)aacabcbcccaacdca不是文法G[S]中的句子
因为终结符d后必然要跟终结符a,所以不可能出现…dc…这样的句子。
(5)aacabcbcccaacbca不是文法G[S]中的句子
由
(1)可知:
aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符S,所以不可能出现…caacb…这样的句子。
8.证明:
用归纳法于n,n=1时,结论显然成立。
设n=k时,对于α1α2...αkT*b,存在βi:
i=1,2,..,k,αiT*bi成立,现在设
α1α2...αkαk+1T*b,因文法是前后文无关的,所以α1α2...αk可推导出b的一个前缀b'
,αk+1可推导出b的一个后缀=b"
(不妨称为bk+1)。
由归纳假设,对于b'
,存在βi:
i=1,2,..,k,b'
=β1β2...βk,使得
αiT*bi成立,另外,我们有αk+1T*b"
(=bk+1)。
即n=k+1时亦成立。
证毕。
9.证明:
(1)用反证法。
假设α首符号为终结符时,β的首符号为非终结符。
即设:
α=aω;
β=Aω’且α=>
*β。
由题意可知:
α=aωT…TAω’=β,由于文法是CFG,终结符a不可能被替换空串或非终结符,因此假设有误。
得证;
(2)同
(1),假设:
β的首符号为非终结符时,α首符号为终结符。
β=Aω’且α=aωT…TAω’=β,与
(1)同理,得证。
10.证明:
因为存在句子:
abc,它对应有两个语法树(或最右推导):
STABTAbcTabc
STDCTDcTabc
所以,本文法具有二义性。
11.解:
(1)STABTAaSbTAacbTbAacbTbbAacbTbbaacb
上面推导中,下划线部分为当前句型的句柄。
对应的语法树为:
全部的短语:
第一个a(a1)是句子bbaacb相对于非终结符A(A1)(产生式A?
a)的短语(直接短语);
b1a1是句子bbaacb相对于非终结符A2的短语;
b2b1a1是句子bbaacb相对于非终结符A3的短语;
c是句子bbaacb相对于非终结符S1(产生式S?
c)的短语(直接短语);
a2cb3是句子bbaacb相对于非终结符B的短语;
b2b1a1a2cb3是句子bbaacb相对于非终结符S2的短语;
注:
符号的下标是为了描述方便加上去的。
(2)句子(((b)a(a))(b))的最右推导:
ST(AS)T(A(b))T((SaA)(b))T((Sa(a))(b))
T(((b)a(a))(b))
相应的语法树是:
(3)解:
iii*i+↑对应的语法树略。
ETT=>
F=>
FP↑TFE↑TFET+↑TFEF+↑TFEP+↑TFEi+↑
TFTi+↑TFTF*i+↑TFTP*i+↑TFTi*i+↑TFFi*i+↑TFPi*i+↑
TFii*i+↑TPii*i+↑Tiii*i+↑
12.证明:
充分性:
当前文法下的每一符号串仅有一个句柄和一个句柄产生式T对当前符号串有唯一的最左归约T对每一步推导都有唯一的最右推导T有唯一的语法树。
必要性:
有唯一的语法树T对每一步推导都有唯一的最右推导T对当前符号串有唯一的最左归约T当前文法下的每一符号串仅有一个句柄和一个句柄产生式
13.化简下列各个文法
(1)解:
S→bCACdA→cSA|cCCC→cS|c
(2)解:
S→aAB|fA|gA→e|dDAD→eAB→f
S→ac
14.消除下列文法中的ε产生式
S→aAS|aS|bA→cS
S→aAA|aA|aA→bAc|bc|dAe|de
15.消除下列文法中的无用产生式和单产生式
(1)消除后的产生式如下:
S→aB|BC
B→DB|b
C→b
D→b|DB
(2)消除后的产生式如下:
S→SA|SB|()|(S)|[]|[S]
A→()|(S)|[]|[S]
Bà
[]|[S]
(3)消除后的产生式如下:
E→E+T|T*F|(E)|P↑F|i
T→T*F|(E)|P↑F|i
F→P↑F|(E)|i
P→(E)|i
第三章习题解答
1.从略
2.
3假设W:
表示载狐狸过河,G:
表示载山羊过河,C:
表示载白菜过河
用到的状态1:
狐狸和山羊在左岸2:
狐狸和白菜载左岸3:
羊和白菜在左岸4:
狐狸和山羊在右岸5:
狐狸和白菜在右岸6:
山羊和白菜在右岸F:
全在右岸
4证明:
只须证明文法G:
A→αB或A→α(A,B∈VN,α∈VT+)
等价于G1:
A→aB或A→a(a∈VT+)
∙G1的产生式中A→aB,则B也有B→bC,C→cD….
所以有A→abc…B’,a,b,c…∈VT,B’∈VN
所以与G等价。
2)G的产生式A→αB,α∈VT+,因为α是字符串,所以肯定存在着一个终结符a,使A→aB
可见两者等价,所以由此文法产生的语言是正规语言。
5
6根据文法知其产生的语言是
L={ambnci|m,n,i≧1}
可以构造如下的文法VN={S,A,B,C},VT={a,b,c}
P={S→aA,A→aA,A→bB,B→bB,B→cC,C→cC,C→c}
其状态转换图如下:
7
(1)其对应的右线性文法是:
A→0D,B→0A,B→1C,C→1|1F,C→1|0A,F→0|0E|1A,D→0B|1C,E→1C|0B
(2)最短输入串011
(3)任意接受的四个串
011,0110,0011,000011
(4)任意以1打头的串.
8从略。
9
(2)相应的3型文法
(i)S→aAS→bSA→aAA→bBB→a|aBB→b|bB
(ii)S→aA|aS→bBB→aB|bBA→aBA→b|bA
(iii)S→aAS→bBA→bAA→aCB→aBB→bCC→a|aCC→b|bC
(iv)S→bSS→aAA→aCA→bBB→aBB→bCC→a|aCC→b|bC
(3)用自然语言描述输入串的特征
(i)以任意个(包括0)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字符串
(ii)以a打头,后跟任意个(包括0)b
(iii)以a打头,中间有任意个(包括0)b,再跟a,最后由一个a,b所组成的任意串结尾或者
以b打头,中间有任意个(包括0)a,再跟b,最后由一个a,b所组成的任意串结尾
(iv)以任意个(包括0)b开头,中间跟aa最后由一个a,b所组成的任意串结尾或者
以任意个(包括0)b开头,中间跟ab后再接任意(包括0)a再接b,最后由一个a,b所组成的任意串结尾
10
(1)G1的状态转换图:
G2的状态转换图:
(2)G1等价的左线性文法:
S→Bb,S→Dd,D→C,B→Db,C→Bc,B→Ab,B→ε,A→a
G2等价的右线性文法:
S→dD,S→aB,D→C,B→abC,B→bB,B→bA,B→ε,C→cA,A→a
(3)对G1文法,abb的推导序列是:
aA=>
abB=>
abb
对G1’文法,abb的推导序列是:
Bb=>
Abb=>
对G2文法,aabca的推导序列是:
Aa=>
Cca=>
Babca=>
aabca
对G2’文法,aabca的推导序列是:
aB=>
aabC=>
aabcA=>
(4)对串acbd来说,G1,G1’文法都不能产生。
11将右线性文法化为左线性文法的算法:
o
(1)对于G中每一个形如A→aB的产生式且A是开始符,将其变为B→a,否则若A不是开始符,B→Aa;
o
(2)对于G中每一个形如A→a的产生式,将其变为S→Aa
12
(1)
状态矩阵是:
记[S]=q0[B]=q1[AB]=q2[SA]=q3,最小化和确定化后如图
(2)记[S]=q0,[A]=q1,[BS]=q2最小化和确定化后的状态转换图如下
13
(1)将具有ε动作的NFA确定化后,其状态转换图如图:
记{S0,S1,S3}=q0{S1}=q1{S2S3}=q2{S3}=q3
(2)记{S}=q0{Z}=q1{UR}=q2{SX}=q3{YUR}=q4{XSU}=q5{YURZ}=q6{ZS}=q7
14
(1)从略
(2)化简后S0和S1作为一个状态,S5和S6作为一个状态。
状态转换图如图
15从略。
16从略。
∙
(1)r*表示的正规式集是{ε,r,rr,rrr,…}
(ε|r)*表示的正规式集是{ε,εε,…}∪{r,rr,rrr,…}={ε,r,rr,rrr,…}
ε|rr*表示的正规式集是{ε,r,rr,rrr,…}
(r*)*=r*={ε,r,rr,rrr,…}
所以四者是等价的。
(2)(rs)*r表示的正规式集是{ε,rs,rsrs,rsrsrs,…}r={r,rsr,rsrsr,rsrsrsr,…}
r(sr)*表示的正规式集是r{ε,sr,srsr,srsrsr,…}={r,rsr,rsrsr,rsrsrsr,…}
所以两者等价。
18写成方程组
S=aT+aS
(1)
B=cB+c
(2)
T=bT+bB(3)
所以B=c*cT=b*bc*c
S=a*ab*bc*c
∙G1:
S=aA+B
(1)
B=cC+b
(2)
A=abS+bB(3)
C=D(4)
D=bB+d(5)
把(4)(5)代入
(2),得B=c(bB+d)+b=cbB+cd+b得B=(cb)*(cd|b),代入(3)得
A=abS+b(cb)*(cd|b)把它打入
(1)得
S=a(abS+b(cb)*(cd|b))+(cb)*(cd|b)
=aabS+ab(cb)*(cd|b)+(cb)*(cd|b)
=(aab)*(ab(cb)*(cd|b)|(cb)*(cd|b))
G2:
S=Aa+B
(1)
A=Cc+Bb
(2)
B=Bb+a(3)
C=D+Bab(4)
D=d(5)
可得D=dB=ab*C=ab*ab|bA=(ab*ab|b)c+ab*b
S=(ab*ab|b)ca+ab*ba+ab*
=(ab*ab|b)ca|ab*ba|ab*
20
∙识别此语言的正规式是S=’LABEL’d(d|,d)*;
∙从略。
21从略。
22构造NFA
其余从略。
23下面举一个能够识别1,2,3,10,20,100的例子,读者可以推而广之。
%{
#include<
stdio.h>
string.h>
ctype.h>
#defineON1
#defineTW2
#defineTHRE3
#defineTE10
#defineTWENT20
#defineHUNDRE100
#defineWHITE9999
%}
upper[A-Z]
%%
ONEreturnON;
TWOreturnTW;
THREEreturnTHRE;
TENreturnTE;
TWENTYreturnTWENT;
HUNDREDreturnHUNDRE;
"
"
+|\treturnWHITE;
\nreturn0;
main(intargc,char*argv[])
{
intc,i=0;
chartmp[30];
if(argc==2)
if((yyin=fopen(argv[1],"
r"
))==NULL)
printf("
can'
topen%s\n"
argv[1]);
exit(0);
}
while((c=yylex())!
=0)
switch(c)
caseON:
c=yylex();
if(c==0)goto{i+=1;
label;
if(c==HUNDRE)
i+=100;
elsei+=1;
break;
caseTW:
i+=200;
elsei+=2;
caseTWENT:
i+=20;
caseTE:
i+=10;
default:
}/*while*/
label:
printf("
%d\n"
i);
return;
24
(1)Dn表示的正规集是长度为2n任意a和b组成的字符串。
∙此正规式的长度是2n
∙用来识别Dn的DFA至多需要2n+1个状态。
25从略。
26
(1)由{}括住的,中间由任意个非{组成的字符串,如{},{}},{a},{defg}等等。
(2)匹配一行仅由一个大写字母和一个数字组成的串,如A1,F8,Z2等。
(3)识别\r\n和除数字字符外的任何字符。
∙由’和’括住的,中间由两个’’或者非’和\n组成的任意次的字符串。
如’’’’,‘a’,’bb’,’def’,’’’’’’等等
27O[Xx][0-9]*[a-fA-F]*|[0-9]+|(\’([a-zA-Z]|\\[Xx][0-7][0-7a-fA-F]|\\0[01][0-7][0-7]|\\[a-z])\’)
28^[a-zA-Z_]+[0-9]*[a-zA-Z_]*
29参考程序如下:
#defineUPPER2
#defineWHITE3
{upper}+returnUPPER;
\t|"
+returnWHITE;
intc,i;
}
=EOF)
if(c==2)
for(i=0;
yytext[i];
i++)
%c"
tolower(yytext[i]));
yytext[0]='
\000'
;
if(c==3)
);
elseprintf("
%s"
yytext);
yywrap()
return;
30从略。
第四章习题解答
第四章习题参考答案
∙1.解:
(1)S→(S)Z21|()Z21|[S]Z31|[]Z31
A→(S)Z22|()Z22|[S]Z32|[]Z32
B→(S)Z23|()Z23|[S]Z33|[]Z33
Z11→ε|AZ11|BZ21
Z12→AZ12|BZ22Z13→AZ13|BZ23
Z21→Z11Z22→ε|Z12
Z23→Z13Z31→Z21
Z32→Z22Z33→ε|Z23
(2)S→bZ11|aZ21A→bZ12|aZ22
Z11→ε|AZ21Z12→AZ22Z21→SZ21Z22→ε|SZ22
(3)S→(T)Z11|aZ11|Z11S→(T)Z12|aZ12|Z12
Z11→ε|Z21Z12→Z22Z21→,SZ21Z22→ε|,SZ22
∙2.解:
S
AbB1,1.1(表示第1步,用产生式1.1推导,以下同)
CAbbB2,2.1
edAbbB3,4.1
edCAbbB4,2.1
ededAbbbB5,4.1
edaAbbbB5,4.2(不符合,改写第5步,用4.2)
edBfbb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 编译 原理 西北工业大学 第三 课后 答案