版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理课后答案(第三版蒋立源康慕宁编)
第一章习题解答
1解:源程序是指以某种程序设计语言所编写的程序。目标程序是指编译程序(或解释
程序)将源程序处理加工而得的另一种语言(目标语言)的程序。翻译程序是将某种语言翻
译成另一种语言的程序的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程
序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行
解释、执行,如此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程序的特点
是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行
之。即先翻译、后执行。
2解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间
代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组
成。
3解:C语言的关键字有:autobreakcasecharconstcontinuedefaultdodoubleelse
enumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedef
unionunsignedvoidvolatilewhile。上述关键字在C语言中均为保留字。
4解:C语言中括号有三种:{},[],()o其中,(}用于语句括号;口用于数组;()用
于函数(定义与调用)及表达式运算(改变运算顺序)。C语言中无END关键字。逗号在C
语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子
表达式的值(如:(a,b,c,d)的值为d)。
5略
第二章习题解答
1.(1)答:26*26=676
(2)答:26*10=260
(3)答:{a,b,c,...,z,a0,al,…,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658
个
2.构造产生下列语言的文法
(1){anbnlnNO}
解:对应文法为G(S)=({S},{a,b},{S-elaSb},S)
(2){anbmcpln,m,p20}
解:对应文法为G(S)=({S,X,Y},{a,b,c},{S-aSIX,XfbXIY,Y-cYle),S)
(3){an#bnln^O}U{cn#dnln^O}
解:对应文法为G(S)=({S,X,Y},{a,b,c,d,#},{SfX,S-Y,XfaXbl#,YfcYdl#},S)
(4){w#wr#lw?{0,l}*,wr是w的逆序排列}
解:G(S)=({S,W,R),{O,1,#},{S^W#,W^OWOIlWil#},S)
(5)任何不是以0打头的所有奇整数所组成的集合
解:G(S)=({S,A,B,l,J},{-,0,l,2,3,4,5,6,7,8,9},{SfJIIBJ,BfOBIIBIe,I—JI2I4I6I8,Ja
113151719),S)
(6)所有偶数个0和偶数个1所组成的符号串集合
解:对应文法为S-*OAIlBle,A-OSI1CB^OCIISC-1AIOB
3.描述语言特点
(1)SflOSOSfaAAfbAAfa
解:本文法构成的语言集为:L(G)={(lO)nabmaOnln,m?O}。
(2)SfSSSf1AOA—lAOAfe
解:L(G)={lnl0nlln20n2InmOnmInl,n2,…,nmNO;且nl,n2,…nm不全为零}该语言
特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。
(3)S-*1AS-BOA-1AA-*CB-*BOB-*CC-1C0C-e
解:本文法构成的语言集为:L(G)={1p1nOnlp>1,n>0}U{1nOnOqlq1,n0},特点是具
有IplnOn或InOnOq形式,进一步,可知其具有形式ln0mn,m20,且n+m>0。
(4)SfbAdcAfAGSGfeA-a
解:可知,S=>“=>baSndcn20
该语言特点是:产生的句子中,是以ba开头de结尾的串,月.ba、de个数相同。
(5)SfaSSSfa
解:L(G)={a(2n-l)ln》l}可知:奇数个a
4.解:此文法产生的语言是:以终结符al、a2-an为运算对象,以A、V、~为运算符,
以卜]为分隔符的布尔表达式串
5.5.1解:由于此文法包含以下规则:AA—e,所以此文法是0型文法。
5.2证明:略
6.解:
(1)最左推导:
(程序>T<分程序>T<标号>:〈分程序〉TL:〈分程序〉
TL:<标号>:<分程序)
TL:L:〈分程序〉
TL:L:〈无标号分程序〉
TL:L:〈分程序首部〉;〈复合尾部〉
TL:L:〈分程序首部〉;〈说明〉:〈复合尾部)
TL:L:beginc说明〉;〈说明〉;〈复合尾部〉
TL:L:begind;〈说明〉;〈复合尾部〉
TL:L:begind;d;〈复合尾部〉
TL:L:begind;d;<语句>;〈复合尾部〉
TL:L:begind;d;s;〈复合尾部.
TL:L:begind;d;s;<语句〉end
TL:L:begind;d;s;send
最右推导:
〈程序>T<分程序>T<标号>:〈分程序〉
T〈标号〉:〈标号〉:〈分程序〉
T〈标号〉:〈标号〉:〈无标号分程序〉
Tv标号〉:〈标号〉:〈分程序首部〉;〈复合尾部〉
Tv标号>:<标号》:〈分程序首部〉;〈语句〉;〈复合尾部〉
Tv标号〉:〈标号〉:〈分程序首部〉;〈语句〉;〈语句〉;end
T<标号>:<标号>:〈分程序首部〉;〈语句〉;s;end
Tv标号>:<标号>:〈分程序首部〉;s;s;end
Tv标号〉:〈标号〉:〈分程序首部〉;说明;s;s;end
Tv标号〉:〈标号〉:〈分程序首部》;d;s;s;end
1<标号〉:〈标号》:begin说明;d;s;s;end
Tv标号〉:〈标号〉:begind;d;s;s;end
Tv标号〉:L:begind;d;s;s;end
TL:L:begind;d;s;s;end
(2)句子L:L:begind;d;s;send的相应语法树是:
7.解:
aacb是文法G[S]中的句子,相应语法树是:
最右推导:S=>aAcB=>aAcb=>aacb
最左推导:S=>aAcB=>aacB=>aacb
(2)aabacbadcd不是文法G[S]中的句子
因为文法中的句子不可能以非终结符d结尾
(3)aacbccb不是文法G[S]中的句子
可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。
(4)aacabcbcccaacdca不是文法G[S]中的句子
因为终结符d后必然要跟终结符a,所以不可能出现…de…这样的句子。
(5)aacabcbcccaacbca不是文法G[S]中的句子
由(1)可知:aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符
S,所以不可能出现…caacb…这样的句子。
8.证明:用归纳法于n,n=l时,结论显然成立。设n=k时,对于a1a2...akT*b,存在Bi:
i=l,2,..,k,aiT*bi成立,现在设
aIa2...akak+lT*b,因文法是前后文无关的,所以a1a2...ak可推导出b的一个前缀
b',ak+1可推导出b的一个后缀=b”(不妨称为bk+1)。由归纳假设,对于b',存在Bi:
i=l,2,..,k,b'=B1B2...Bk,使得
aiT*bi成立,另外,我们有ak+lT*b"(=bk+1)。即n=k+l时亦成立。证毕。
9.证明:(1)用反证法。假设a首符号为终结符时,8的首符号为非终结符。即设:a=a3;
6=A3,月.a=>*0。
由题意可知:a=a3T…TA。,=B,由于文法是CFG,终结符a不可能被替换空串或非
终结符,因此假设有误。得证;
(2)同(1),假设:B的首符号为非终结符时,a首符号为终结符。即设:a=a3;B=A
3,且a=a3T…TA3'=6,与(1)同理,得证。
10.证明:因为存在句子:abc,它对应有两个语法树(或最右推导):
STABTAbeTabe
STDCTDcTabc
所以,本文法具有二义性。
11.解:
(1)STABTAaSbTAacbTbAacbTbbAacbTbbaacb
上面推导中,下划线部分为当前句型的句柄。对应的语法树为:
全部的短语:
第一个231)是句子此222相对于非终结符人(人1)(产生式人?2)的短语(直接短语);
blal是句子bbaacb相对于非终结符A2的短语:
b2blal是句子bbaacb相对于非终结符A3的短语;
c是句子bbaacb相对于非终结符S1(产生式S?c)的短语(直接短语);
a2cb3是句子bbaacb相对于非终结符B的短语;
b2blala2cb3是句子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+t对应的语法树略。
最右推导:ETT=>F=>FPtTFEtTFET+tTFEF+tTFEP+tTFEi+t
TFTi+tTFTF*i+tTFTP*i+tTFTi*i+tTFFi*i+tTFPi*i+t
TFii*i+tTPii*i+tTiii*i+t
12.证明:
充分性:当前文法下的每一符号串仅有一个句柄和一个句柄产生式T对当前符号串有唯一
的最左归约T对每一步推导都有唯一的最右推导T有唯一的语法树。
必要性:有唯一的语法树T对每一步推导都有唯一的最右推导T对当前符号串有唯一的最
左归约T当前文法下的每一符号串仅有一个句柄和一个句柄产生式
13.化简下列各个文法
⑴解:S-bCACdA-cSAIcCCC-cSIc
(2)解:S-aABIfAIgA-eIdDAD-eAB-*f
(3)解:S-ac
14.消除下列文法中的e产生式
(1)解:S-aASIaSIbA-cS
⑵解:S-aAAIaAIaA-bAcIbeIdAelde
15.消除下列文法中的无用产生式和单产生式
(1)消除后的产生式如R
SfaBIBC
B-DBlb
C-b
D-bIDB
(2)消除后的产生式如下:
S-SAISBI()I(S)l[]I[S1
Af()l(S)l[]l[S]
Ba[]l[S]
(3)消除后的产生式如F:
E^E+TIT*FI(E)IPtFIi
TfT*FI(E)IPtFIi
F-PtFI(E)Ii
P-(E)Ii
第三章习题解答
1.从略
2.
3假设W:表示载狐狸过河,G:表示我山羊过河,C:表示载白菜过河
用到的状态1:狐狸和山羊在左岸2:狐狸和白菜载左岸3:羊和白菜在左岸4:狐狸和山羊在
右岸5:狐狸和白菜在右岸6:山羊和白菜在右岸F:全在右岸
4证明:只须证明文法G:AfaB或A-a(A,BGVN,aGVT+)
等价于GLAfaB或Afa(aGVT+)
G1的产生式中A-aB,贝B也有B-bC,C-cD….
所以有Afabb“B',a,b,b“GVT,B'eVN
所以与G等价。
2)G的产生式A-oB,aCVT+,因为a是字符串,所以肯定存在着一个终结符a,使A
faB
可见两者等价,所以山此文法产生的语言是正规语言。
5
6根据文法知其产生的语言是
L={ambncilm,n,i=1}
可以构造如下的文法VN={S,A,B,C},VT={a,b,c}
P={S-aA,AfaA,A-*bB,B-*bB,B-cC,C-*cC,C-c}
其状态转换图如下:
7(1)其对应的右线性文法是:
A-OD,B—OA,B-1C,C—WF,CfllOA,FfOlOEIlAQfOBIlC,Ef1CI0B
⑵最短输入串Oil
(3)任意接受的四个串
011,0110,0011,000011
(4)任意以1打头的串.
8从略。
9
(2)相应的3型文法
(i)S-aAS-bSA-aAA-bBB-alaBB-blbB
(ii)S-aAlaS-bBB-aBIbBA-aBA-*blbA
(iii)S-aAS-bBA-bAA-aCB-aBB-bCC-alaCC-*blbC
(iv)S-bSS-aAA-aCA-bBB-aBB-bCC-alaCC-blbC
(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等价的左线性文法:
SfBb,SfDd,DfC,BfDb,C—Bc,BfAb,Bfe,Afa
G2等价的右线性文法:
SfdD,SfaB,DfC,BfabC,BfbB,BfbA,Bf£,CfcA,Afa
(3)对G1文法,abb的推导序列是:
S=>aA=>abB=>abb
对Gl'文法,abb的推导序列是:
S=>Bb=>Abb=>abb
对G2文法,aabca的推导序列是:
S=>Aa=>Cca=>Babca=>aabca
对G2'文法,aabca的推导序列是:
S=>aB=>aabC=>aabcA=>aabca
(4)对串acbd来说,G1,GT文法都不能产生。
11将右线性文法化为左线性文法的算法:
(1)对于G中每一个形如A-aB的产生式且A是开始符,将其变为B-a,否则若A不是
开始符,B-Aa;
(2)对于G中每一个形如A-a的产生式,将其变为S-Aa
12(1)
状态矩阵是:
记[S]=qO[B]=ql[AB]=q2[SA]=q3,最小化和确定化后如图
(2)记[S]=qO,[A]=ql,[BS]=q2最小化和确定化后的状态转换图如下
13(1)将具有e动作的NFA确定化后,其状态转换图如图:
记{SO,Sl,S3}=qO{Sl}=ql{S2S3}=q2{S3}=q3
⑵记{S}=qO{Z}=ql{UR}=q2{SX}=q3{YUR}=q4{XSU}=q5{YURZ}=q6{ZS)=q7
14(1)从略
(2)化简后SO和SI作为一个状态,S5和S6作为一个状态。
状态转换图如图
15从略。
16从略。
(1)r*表示的正规式集是{e,r,rr,rrr,…}
(elr)*表示的正规式集是{£,££,•••}U{r,rr,rrr,•••}={e,r,rr,rrr,--}
eIrr*表示的正规式集是{e,r,rr,rrr,…}
(r*)*=r*={e,r,rr,nr,…}
所以四者是等价的。
(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(l)
B=cB+c(2)
T=bT+bB(3)
所以B=c*cT=b*bc*c
S=a*ab*bc*c
Gl:
S=aA+B⑴
B=cC+b(2)
A=abS+bB⑶
C=D(4)
D=bB+d(5)
把(4)(5)代入(2),得B=c(bB+d)+b=cbB+cd+b得B=(cb)*(cdlb),代入(3)得
A=abS+b(cb)*(cdlb)把它打入(1)得
S=a(abS+b(cb)*(cdlb))+(cb)*(cdlb)
=aabS+ab(cb)*(cdlb)+(cb)*(cdlb)
=(aab)*(ab(cb)*(cdlb)l(cb)*(cdlb))
G2:
S=Aa+B(1)
A=Cc+Bb(2)
B=Bb+a⑶
C=D+Bab(4)
D=d(5)
可得D=dB=ab*C=ab*ablbA=(ab*ablb)c+ab*b
S=(ab*ablb)ca+ab*ba+ab*
=(ab*ablb)calab*balab*
20
识别此语言的正规式是S='LABEL,d(dl,d)*;
从略。
21从略。
22构造NFA
其余从略。
23下面举一个能够识别1,2,3/0,20,100的例子,读者可以推而广之。
%{
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#defineON1
#defineTW2
#defineTHRE3
#defineTE10
#defineTWENT20
#defineHUNDRE100
#defineWHITE9999
%}
upper[A-Z]
%%
ONEreturnON;
TWOreturnTW;
THREEreturnTHRE;
TENretumTE;
TWENTYreturnTWENT;
HUNDREDreturnHUNDRE;
""4-l\tretumWHITE;
\nretumO;
%%
main(intargc,char*argv[])
(
intc,i=0;
chartmp[30];
if(argc==2)
if((yyin=fopen(argv[l],"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+=l;label;}
c=yylex();
if(c==HUNDRE)
i+=100;
elsei+=l;
break;
caseTW:c=yylex();
c=yylex();
if(c==HUNDRE)
i+=200;
elsei+=2;
break;
caseTWENT:i+=20;
break;
caseTE:i+=10;
break;
default:break;
)
}/*while*/
label:printf(u%d\nH,i);
return;
}
24(1)Dn表示的正规集是长度为2n任意a和b组成的字符串。
此正规式的长度是2n
用来识别Dn的DFA至多需要2n+l个状态。
25从略。
26(1)由{}括住的,中间山任意个非{组成的字符串,如{},{}},{a},{defg}等等。
(2)匹配一行仅由一个大写字母和一个数字组成的串,如A1,F8,Z2等。
(3)识别\r\n和除数字字符外的任何字符。
由‘和’括住的,中间由两个''或者非'和\n组成的任意次的字符串。如,'a'
bb'Jdef',‘'''''等等
27O[Xx][0-9]*[a-fA-F]*l[0-9]+l(\,(fa-zA-Z]IW[Xx][0-7][0-7a-fA-F]l\\0[01][0-7][0-7]l\\[a-z])\,)
28A[a-zA-ZJ+[0-9]*[a-zA-ZJ*
29参考程序如下:
%{
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#defineUPPER2
#defineWHITE3
%)
upper[A-Z]
%%
{upper}+returnUPPER;
\tln"+returnWHITE;
%%
main(intargc,char*argv[])
(
intc,i;
if(argc==2)
(
if((yyin=fopen(argv[1],nr*'))==NULL)
(
printfC'can^open%s\n",argvf1]);exit(0);
while((c=yylex())!=EOF)
if(c==2)
for(i=O;yytext[i];i++)
printf(H%cH,tolower(yytext[i]));
yytext[0]=,\000';
)
if(c==3)
printf(nn);
elseprintf(n%su,yytext);
}
return;
)
yywrapO
(
return;
)
30从略。
第四章习题参考答案
1.解:
(1)S-(S)Z21I()Z21I[S]Z31l[]Z31
A-(S)Z22I()Z22I[S]Z32I[]Z32
B-*(S)Z23I()Z23I[S]Z33I[]Z33
ZU-eIAZ11IBZ21
Z12-AZ12IBZ22Z13-AZ13IBZ23
Z21-Z11Z22-£IZ12
Z23fzi3Z31-Z21
Z32-Z22Z33fe|Z23
(2)SfbZlllaZ21A-bZ121az22
Zllf£IAZ21Z12-AZ22Z21-SZ21Z22feISZ22
(3)S->(T)Z11laZllIZUS-(T)Z12laZ12IZ12
ZU-£IZ21Z12->Z22Z21-,SZ21Z22-el,SZ22
2.解:
SAbBI』.l(表示第1步,用产生式1.1推导,以下同)
CAbbB2,2.1
edAbbB3,4.1
edCAbbB4,2.1
ededAbbbB5,4.1
edaAbbbB5,4.2(不符合,改写第5步,用4.2)
edBfbbB4,2.2
edCSdfbbB5,3.1
ededSdfbbB6,4.1
edaSdfbbB6,4.2
eddfbbB5,3.2
eddfbbCSd6,3.1
eddfbbedSd7,4.1
eddfbbaSd7,4.2
eddfbbd6,3.2
3.解:以下Save表示savetoken_pointervalue,Restore表示restoretoken_pointervalue。
(1)文法没有左递归。
FunctionP:boolean;
Begin
Save;
P:=true;
Ifnext_token=vbegin”then
Ifnext_token=?d'then
Ifnext_token=';'then
IfXthen
Ifnext_token="end“thenreturn;
Restore;
P:=false;
End;
FunctionX:boolean;
Begin
Save;
X:=true;
Ifnext_token=,d'then
Ifnext_token=';'then
IfXthenreturn;
Restore;
Ifnext_token='s'then
IfYthenreturn;
Restore;
X:=false;
End;
FunctionY:boolean;
Begin
Save;
Y=true;
Ifnext_token=';'then
Ifnext_token='s'then
IfYthenreturn;
Restore;
End;
(2)消去文法左递归,并记为:
P-beginSendS-AICA—V:=EC一ifEthenS
E-VE'E'-*+VE,HV-*I
FunctionP:boolean;
Begin
Save;
P:=true;
Ifnext_token="begin”then
IfSthen
Ifnext_token=end“thenreturn;;
Restore;
P:=false;
End;
FunctionA:boolean;
Beign
Save;
A:=true;
IfVthen
Ifnext_token=n:=wthen
IfEthenreturn;
Restore;
A:=flase;
End;
FunctionS:boolean;
Beign
Save;
S:=true;
IfAthenreturn;
Restore;
IfCthenreturn;
Restore;
S:=false;
End;
FunctionCiboolean;
Begin
Save;
C:=true;
Ifnext_token="if“then
IfEthen
Ifnext_token="then“then
IfSthenreturn;
Restore;
C:=false;
End;
FunctionE:boolean;
Begin
Save;
E:=true;
IfVthen
IfEpthenreturn;
Restore;
E:=false;
End;
FunctionEp:boolean;
Being
Save;
Ep:=true;
Ifnext_token=>+'then
IfVthen
IfE,thenreturn;
Return;
End;
4解:
5.证:因为是左递归文法,所以必存在左递归的非终结符A,及形如A-aIB的产生式,且
aT*Ad.
则first(Ad)Afirst(B)W6,从而
first(a)Cfirst(B)关6,即文法不满足LL(1)文法条件。得证。
6.证:LL(1)文法的分析句子过程的每一步,永远只有唯一的分析动作可进行。现在,假
设LL(1)文法G是二义性文法,则存在句子a,它有两个不同的语法树。即存在着句子a有
两个不同的最左推导。从而可知,用LLQ)方法进行句子a的分析过程中的某步中,存在
两种不同的产生式替换,且均能正确进行语法分析,即1X(1)分析动作存在不确定性。与
LL(1)性质矛盾。所以,G不是LL(1)文法。
7解:
(1)D产生式两个候选式2和f的first集交集不为空,所以不是LL⑴的。
⑵此文法具有左递归性,据第5题结论,不是LL(1)的。
8廨:
⑴消除左递归性,得:
S->bZlllaZ21A->bZ12laZ22Zll->bZllleZ12fbz12
Z21-bZ11laZ21Z22-bZ12laZ221e
消除无用产生式得:S-bZlllaZ21Zll-bZllleZ21-bZlllaZ21
此文法已满足LL(1)文法的三个条件,
所以G'[Sl:S-bZlllaZ21Zll^bZllleZ21-bZlllaZ21
(2)G'文法的各非终结符的FIRST集和FOLLOW集:
产生式
FIRST集
FOLLOW集
SfbZll
faZ21
{b}
{a}
{#}
Zll-bZll
fE
{b}
{$}
{#}
Z21-bZll
faZ21
{b}
{a}
{#}
LL(1)分析表为:
a
b
#
s
aZ21
bZH
Zll
bZll
Z21
aZ21
bZll
9.解:
(1)
产生式
first集
follow集
S-SaB
—bB
{b}
{b}
{#,a,c}
A-S
fa
{b}
{a}
{c}
B-*Ac
{a,b}
{#,a,c}
⑵将S-SaBIbB改写为S-bBS',S'-aBS'g,可验证,新文法是LL(1)的。
10.解:
1)为方便书写,记:〈布尔表达式>为A,〈布尔因子〉为B,〈布尔二次量>为C,〈布尔初
等量,为D,原文法可以简化为:
A-AVBIBB-BACICC^nDIDD—(A)ItrueIfalse,
显然,文法含有左递归,消去后等价LL(1)文法为:
AfBA'A'-VBA'|3B—CB',
B'fACB'|3Cf-iDIDD-(A)ltruelfalse
⑵略
证:若LL(1)文法G有形如B-aAAb的产生式,且AT+e及AT*ag,根据FIRST集FOLLOW
集的构造算法可知,FIRST(A)中一切非e加到FOLLOW(A)中,则aEFOLLOW(A);又因
为aGFIRST(ag),所以两集合相交非空,因此,G不是LL(1)文法;与前提矛盾,假设不成立,
得证。
解:
(1)
S
A
(
a
)
b
S
A
<
<
<
<
<
a
>
<
>
<
>
>
)
>
>
>
>
>
b
>
>
不是简单优先文法。
(2)
S
R
T
(
)
A
a
S
R
T
>
<
<
<
<
<
)
>
>
A
>
>
a
>
<
<
<
<
是简单优先文法。
(3)
S
R
(
a
)
S
<
<
R
>
>
(
<
<
a
>
>
<
<
)
>
是简单优先文法。
首先消去无用产生式ZfE,ZfE+T
S
z
T
#
)
Z
T
>
>
#
<
<
<
I
>
>
(
<
<
<
)
>
>
化简后的文法是简单优先文法;
解:
S
A
/
A
S
>
>
A
<
<
>
>
a
>
>
A和/之间同时有关系二和v,所以不是简单优先文法;
提示:分析教材中给出的算法,选择一种合适的表示给定文法的方法(尽量简单),使得对
文法的输入比较简单的同时(需要把输入转化为计算机语言表示,这种转化应该尽量简单),
能够比较简单地构造3个基本关系矩阵(=,LEAD和LAST)。
证明:设xjxj+L..xi是满足条件xj-lvxj=xj+l=♦..=xi>xi+l的最左子串。由=关系的定义,可
知xjxj+l...xi必出现在某产生式的右部中。又因xj-l<xj可知xj-1与xj不处于同一产生式,
且xj是某右部的首符。同理,xi为某产生式的尾符号。即存在产生式U-xjxj+I...xi设ST*
aUb其中,aT*...xj-1,bT*xi+l...对于aUb可构造一语法树,并通过对其剪枝(归约),直
到U出现在句柄中。从而xjxj+l...xi必为句柄。反之,若xjxj+l...xi是句柄,由简单优先关
系的定义,必满足上述条件。
解:为描述方便,用符号表示各非终结符:D=〈变量说明〉,L=〈变量表>,V=<变量>乃=〈类
型〉,a=VAR,则消去V,并采用分层法改写文法,得到:DfaW:T;W-LL-L,iliTf「lnlblc
其全部简单优先关系是:
D
W
T
L
a
rlnlblc
D
W
T
L
>
a
<
<
<
>
>
>
rlnlblc
是简单优先文法。
证:设STna,我们对n用归纳法,证明a不含两个非终结符相邻情况。n=l时,STa,即S-a
是文法的产生式,根据定义,它不含上述情况。设n=k时,上述结论成立,且设STkdAb,
由归纳假设,A两侧必为终结符。我们再进行一步推导,得STkdAbTdub,其中,A-u是文
法中的产生式,山定义,u中不含两个非终结符相邻情况,从而dub两个非终结符相邻情况。
得证。
证:由于G不是算符文法,G中至少有一个产生式,其右部含有两个非终结符相邻的情况。
不失一般性,设其形为U~xABy,x,ydV*,由于文法不含无用产生式,则必存在含有U的句
型dUb,即存在推导ST*dUbTdxAByb.得证。
文法为:E-EfAIAA-A*TIA/TITT-T+VIT-VIVV-iI(E)
解:
(1)构造算符优先矩阵:
*
(
)
#
>
<
>
<
<
>
<
>
*
>
<
>
<
>
<
(
<
<
<
<
)
>
>
>
>
I
>
#
<
<
<
<
(2)在(-,-)、(-,*)和(*,-)处有多重定义元素,不是算符优先文法;
(3)改写方法:
将E-E-T中的减号与F--P中的赋值运算符强制规定优先关系;
或者将F-P中的赋值运算符改为别的符号来表示;
(1)证明:由设句型a=-Ua…中含a的短语不含U,即存在A,A=>*ay,则a可归约为a二…
Ua…(1*…UA3=b,b是G的一个句型,这与G是算符文法矛盾,所以,a中含有a的短语
必含U。
(2)的证明与(1)类似,略。
证:(1)对于a=“・aU…是句型,必有ST*a(=…aU…)T+…ab….即在归约过程中,b先于a被
归约,从而,a<b.对于⑵的情况类似可以证明。
证明略.
证明略.
证明略。
证:(1)用反证法。设没有短语包含b但是不包含a,则a,b一定同时位于某个短语中,从
而必使得a,b同时位于同一产生式的右部,所以a=b,与G是算符优先文法(=与<不能并存)
矛盾。
(2)、(3)类似可证。
证:只要证u中不含有除自身以外的素短语。设有这样的素短语存在,即存在bx・・・by是
素短语,其中l<x或者y<n之一成立。因素短语是短语,根据短语定义,则必有:kxTbx-l<bx
或y<nTby>by+l,与bx-l=bx及by=by+l矛盾,得证。
提示:根据27题的结论,只要证u是句型a的短语,根据=关系的定义容易知道u是句型
a的素短语。
证:与28题的不同点只是aO,an+l可以是‘#',不影响结论。
证:设不能含有素短语,则只能是含有短语(不能含有终结符号),则该短语只能含有一个
非终结符号,否则不符合算符文法定义,得证。
解:
(1)算符优先矩阵:
+
*
)
#
+
>
<
<
<
>
<
>
>
>
<
<
>
<
>
t
>
>
<
<
>
<
<
<
<
<
<
)
>
>
>
>
I
>
>
>
>
>
#
<
<
<
<
<
(2)用Floyd方法将优先矩阵线性化得到得的优先函数为:
+
*
)
i
#
F
3
5
5
1
7
7
I
G
2
4
6
6
1
6
1
解:用Floyd方法对已知的优先矩阵构造的优先函数为:
z
b
M
L
a
(
)
5
6
7
7
4
7
1
6
5
4
6
6
7
解:
(1)优先矩阵如下:
a
#
>
>
a
<
>
<
>
<
#
<
<
<
(2)用Bell方法求优先函数的过程如下:
]
a
#
5
7
5
1
g
5
5
6
(3)显然,文法不是算符优先文法,所以不能线性化。
略。
解:
(1)识别全部活前缀的DFA如下:(以表格的形式来表示,很容易可以转化为图的形式,
本章中其余的题目也是采用这种形式表示。)
状态
项目集
经过的符号
到达的状态
10
S'f•S
Sf•aSb
S—•aSc
S-**ab
S
a
II
12
II
S'一S・
12
S—a•Sb
S—a•Sc
S-*a•b
Sf-aSb
S—•aSc
S—•ab
S
a
b
13
12
14
13
SfaS•b
SfaS•c
b
15
16
14
S-*ab•
15
S-aSb•
16
S-^aSc•
(2)识别全部活前缀的DFA如下:
状态
项目集
经过的符号
到达的状态
10
S'f•S
Sf•cA
S—,ccB
S
II
I
Il
S'-s•
12
S-*c•A
Sfc,cB
A-•cA
A一•a
A
c
a
13
14
15
13
S—cA•
14
S-*cc•B
A—c,A
Bf•ccB
B一•b
Af•cA
Af•a
B
A
b
a
16
15
17
18
15
15
A—a•
16
SfccB•
17
B-c,cB
A-*c•A
A—•cA
A—•a
C
A
a
19
110
15
18
B-b•
19
B-*cc•B
A-*c•A
B—•ccB
B->・b
A—•cA
A一•a
B
A
c
b
a
Ill
IIO
17
18
15
IIO
A-cA・
Ill
B-*ccB,
所求的LR(O)项目规范族C={IO,I1,-,I11}
(3)
状态
项目集
经过的符号
到达的状态
10
s•s
S一・aSSb
Sf・aSSS
S一•c
S
a
II
12
13
II
S,-S•
12
S-c•
13
S-a•SSb
Sfa•SSS
Sf•aSSb
S-・aSSS
S—•c
S
a
14
12
13
14
SfaS•Sb
S-aS-SS
Sf・aSSb
S—・aSSS
S一•c
S
c
a
15
12
13
15
S-aSS・b
S-aSS•S
Sf•aSSb
Sf•aSSS
S-*•c
S
a
b
c
17
13
16
12
16
S-aSSb・
17
S-aSSS•
(4)
状态
项目集
经过的符号
到达的状态
10
S'f•S
S一・A
Af•Ab
A一,a
S
A
a
II
12
13
II
S'-S•
12
S-A•
S-*A•b
b
14
13
A-*a•
14
SfAb•
解:
(1)是LR(O)文法,其SLR(l)分析表如下:FOLLOW(S)={#,b,c}
ACTION
GOTO
a
b
c
#
S
0
S2
1
ACC
2
S2
S4
3
3
S5
S6
4
R3
R3
R3
5
RI
RI
R2
R2
R2
(2)是LR(O)文法,其SLR(l)分析表如下:
FOLLOW(S)=FOLLOW(A)=FOLLOW(B)={#)
ACTION
GOTO
b
c
#
S
A
B
S2
1
ACC
S5
S4
3
RI
S5
S8
S7
3
6
R4
R2
S5
S9
10
R6
S5
S8
S7
10
R3
R5
(3)是LR(0)文法,其SLR(l)分析表如下:FOLLOW(S)={#,a,b,c)
ACTION
GOTO
#
S
S3
S2
1
ACC
R3
R3
R3
R3
S3
S2
4
S3
S2
5
S3
S6
S2
7
RI
RI
RI
RI
R2
R2
R2
R2
(4)因为12中含有冲突项目,所以不是LR(O)文法,其SLR(l)分析表如下:
FOLLOW(S)={#}n{b}=6(所以可以用SLR(l)规则解决冲突),FOLLOW(A)={b,#}
ACTION
GOTO
a
b
#
S
A
S3
1
2
ACC
S4
RI
R3
R3
R2
R2
解:
状态
项目集
经过的符号
到达的状态
10
S'一•S
S一•(SR
S一•a
S
a
II
12
13
II
S'-S•
12
S->(•SR
S-•(SR
S—•a
S
(
a
14
12
13
13
S-a•
14
S-(S•R
Sf•(SR
Sf•a
Rf•,SR
R一•)
R
)
13
12
15
16
17
15
Sf(SR・
16
Rf,•SR
S一•(SR
S一•a
S
(
a
18
12
13
17
R一)•
18
R-,S•R
Rf•,SR
R-•)
)
R
17
16
19
19
Rf,SR•
LR(O)分析表如F:
ACTION
GOTO
a
)
#
S
R
0
S3
S2
ACC
2
S3
S2
4
3
R2
R2
R2
R2
R2
S3
S2
S7
S6
5
RI
RI
RI
RI
RI
S3
S2
R4
R4
R4
R4
R4
S7
S6
9
R3
R3
R3
R3
R3
可见是LR(O)文法。
解:
(1)
状态
项目集
经过的符号
到达的状态
10
S'f•S
S一•Sab
S一•bR
S
b
II
12
II
(冲突项目)
S'-s•
SfS・ab
a
acc
13
12
S-b•R
R—・S
R-**a
S—,Sab
S一•bR
R
S
a
b
14
15
16
12
13
S-Sa•b
b
17
14
SfbR•
r2
15
RfS・
S-*S,ab
a
13
16
Rfa•
17
SfSab•
项目11,15同时具有移进和归约项目,对于15={R-S•,S-S•ab),follow(R)={a},follow(R)
n{a}={a},所以SLR(l)规则不能解决冲突,从而该文法不是SLR(l)文法。
(2)
状态
项目集
经过的符号
到达的状态
10
S'一•S
S—・aSAB
S一・BA
B一・b
S
a
B
b
II
12
13
14
II
S,—S•
12
S->a・SAB
S—•aSAB
S->•BA
B-•b
S
a
B
b
15
12
13
14
13
S-*B•A
A—•aA
A—•B
B—•b
A
a
B
b
16
17
18
14
14
B—b•
r5
15
S-aS•AB
A一•aA
A一•B
B一•b
A
a
B
b
19
17
18
14
16
S-BA•
r2
17
A-^a•A
A—・B
A—•aA
B-・b
A
B
a
b
IIO
18
17
14
18
A—B•
19
S-aSA•B
B一•b
B
Ill
14
IIO
A—aA•
r3
Ill
S-aSAB•
rl
不存在冲突项目,故该文法是LR(O)文法,也是SLR(l)文法。
SLR(l)分析表如下:
ACTION
GOTO
a
b
#
S
A
B
S2
S4
1
3
1
ACC
S2
S4
5
3
S7
S4
6
8
R5
R5
R5
S7
S4
9
8
R2
R2
R2
S7
S4
8
R4
R4
R4
S4
11
10
R3
R3
R3
11
RI
RI
RI
(3)先求识别全部活前缀的DFA:
状态
项目集
经过的符号
到达的状态
10
S'一・S
S-*•aSb
S一・bSa
S-**ab
S
II
12
13
II
S'—S•
acc
12
S—a•SB
Sfa•b
S--aSb
S-・bSa
Sf•ab
S
b
a
14
15
12
13
Si-Sa
S-*•aSb
S一・bSa
S-**ab
S
a
b
16
12
13
14
S-aS•b
b
17
15
Sfab,
16
S-bS•a
a
18
17
S-*aSb-
18
S-bSa•
r2
不存在冲突项目,故该文法是LR(O)文法,也是SLR(l)文法。
SLR⑴分析表如下:
ACTION
GOTO
a
b
#
S
S2
S3
1
ACC
S2
S5
4
S2
S3
6
S7
R3
R3
R3
S8
RI
RI
RI
R2
R2
R2
(4)先求识别全部活前缀的DFA:
状态
项目集
经过的符号
到达的状态
10
S'f•S
S-**aA
S-•bB
S
II
12
13
II
S'一S•
acc
12
(冲突)
Sfa•A
Af,cAd
A一•
A
c
14
15
r4
13
(冲突)
S-b-B
B—•cBdd
B—•
B
c
16
17
r6
14
SfaA•
15
(冲突)
A-*c•Ad
Af,cAd
A一•
A
c
18
15
r4
16
S-bB•
r2
17
(冲突)
Bfc•Bdd
B--c•Bdd
B--
B
c
19
17
r6
18
A—cA,d
d
IIO
19
B—cB•dd
d
III
110
A->cAd•
r3
Ill
BfcBd•d
d
112
112
B-*cBdd•
r5
因为follow(A)=follow(B)={#,d},所以冲突项目12,13,15,17可以用SLR⑴规则得以解决,从而
该文法为SLR⑴文法。其SLR(l)分析表如下:
ACTION
GOTO
a
b
c
d
#
S
A
B
S2
S3
1
1
Acc
2
S5
R4
R4
4
3
S7
R6
R6
6
4
RI
5
S5
R4
R4
8
6
R2
7
S7
R6
R6
9
8
S10
9
Sil
10
R3
R3
11
S12
12
R5
R5
(5)解:原文法等价化为ql-q2,ql-q3,q2fq4;q5,q4->beginD,q4fq4;D,q5fsend,q5
fS;q5,q3-beginq5,
先求识别全部活前缀的DFA:
状态
项目集
经过的符号
到达的状态
10
qT—•q]
ql-**q2
ql~**q3
q2f•q4;q5
q3f•beginq5
q4f•beginD
q4f•q4;D
qi
q2
q3
q4
begin
II
12
13
14
15
II
ql'-ql•
ACC
12
ql->q2•
RI
13
ql一q3•
R2
14
q2fq4•;q5
q4fq4,;D
D
16
15
q3-*begin,q5
q3-*begin•D
q5f•Send
q5f,S;q5
q5
D
S
17
18
19
16
q2fq4;•q5
q4fq4;•D
q5f•Send
q5f・S;q5
q5
D
S
IIO
Ill
19
17
q3-*beginq5•
R8
18
q3-*beginD•
R4
19
q5fs•end
q5fs•;q5
end
112
113
IIO
q2fq4;q5•
R3
Ill
q4—q4;D•
R5
112
q5fSend•
R6
113
q5fs;•q5
q5f•Send
q5f•S;q5
q5
S
114
19
114
q5fs;q5・
R7
不存在冲突项目,故该文法是LR(O)文法,也是SLR(l)文法。
SLR(l)分析表如下:
ACTION
GOTO
begin
D
S
end
#
qi
q2
q3
q4
q5
0
2
3
4
1
Acc
2
RI
3
R2
4
S6
5
S8
S9
7
6
S7
S9
10
7
R8
8
R4
9
S13
S12
10
R3
11
R5
12
R6
13
S9
14
14
R7
(6)解:原文法可化为等价形式:qLbeginq2q3end,q2fq2d;,q2f£,q3fq3;q4,q3fq4,
q4fS,q4f£,
先求识别全部活前缀的DFA:
状态
项目集
经过的符号
到达的状态
10
qrf・ql
ql—•beginq2q3end
qi
begin
II
12
II
ql'-ql•
ACC
12
ql_*begin•q2q3end
q2f•q2d;
q2一•
q2
q2
13
R3
13
(冲突项目)
Ql-*beginq2•q3end
q2fq2,d;
q3f,q3;q4
q3f•q4
q4f•S
q4f•
q3
Dd
q4
S
14
IIO
15
16
R7
14
ql->beginq2q3•end
q3fq3,;q4
end
17
18
15
q3fq4•
R5
16
q4fs•
R6
17
ql->beginq2q3end•
RI
18
(冲突项目)
q3fq3;,q4
q4f・S
q4f•
q4
S
19
16
R7
19
q3fq3;q4•
R4
IIO
q2fq2d•;
Ill
Ill
q2—q2d;,
R2
因为folk)w(q4)={end,#},故冲突项目可以通过SLR(l)规则来解决,从而文法为SLR(l)文法。
SLR(l)分析表如下:
action
goto
begin
end
d
S
#
qi
q2
q3
q4
S2
R3
R3
R3
R3
R7
S10
R7
S6
L
5
S7
S8
R5
R5
R6
R6
RI
R7
R7
S6
9
R4
R4
10
11
R2
R2
R2
R2
解:识别活前缀的DFA及LR(0)分析表:
状态
项目集
经过的符号
到达的状态
10
S'-*•S
S—•AAd
Sf•cAd
S-•b
A一•ASc
Af•Sb
A-**cd
A—•a
S
A
a
b
c
10
16
15
14
13
II
S'—S•
A-S・b
b
12
12
A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公环境中小学语文学习的价值
- 2025建筑工程分包合同
- 2025附条件赠与合同 标准版模板全
- 2025中国银行劳动合同范本
- 智能电器项目可行性研究报告
- 中国灭菌器材行业市场发展现状及前景趋势与投资分析研究报告(2024-2030版)
- 2023-2029年中国专用机动车辆检验检测行业市场全景评估及投资前景展望报告
- 人像摄影的艺术风格与市场需求分析
- 2024酒精制造行业分析报告
- 体育教育设施的施工质量保障措施
- 灵新煤矿职业病危害告知制度范文(2篇)
- 2024年护校队安全工作制度(3篇)
- 安全生产知识负责人复习题库(附参考答案)
- 2024年安徽省广播电视行业职业技能大赛(有线广播电视机线员)考试题库(含答案)
- 山东省济南市济阳区三校联考2024-2025学年八年级上学期12月月考语文试题
- 糖尿病酮酸症中毒
- Unit 6 Food Lesson 1(说课稿)-2024-2025学年人教精通版(2024)英语三年级上册
- 东北师大附属中学2025届高一物理第一学期期末质量检测试题含解析
- GB/T 44570-2024塑料制品聚碳酸酯板材
- 雨的形成课件教学课件
- 金蛇纳瑞2025年公司年会通知模板
评论
0/150
提交评论