1、编译原理34 第三章P67e1解: Z其状态图为: start e由状态图知: f ,eeff不是合法的句子 eefe是该文法的句子。2解:正则文法为GZ: ZA10 AA00该文法的 V=Z,A,1,0 Vn=Z,A Vt=1,0该文法所确定的语言为:LGZ0n1或0n15证明:AAxxLA或xLAxxLAA(A*)*(A*)0(A*)1(A*)2(A*)n(A0A1A2An) (A1) A0A1A2An AAA*所表示的语言是LALA*LA0LA(LA0LA1LA2)LA0LA1LA2LA*故AA*A*(LALB)*LA=(LALBLALBLALBLALBLALBLALB) LA =LAL
2、ALBLALALBLALBLALALBLALBLALBLA = LA(LBLALBLALBLA) = LA(LBLA) (AB)*=A(AB)*三个表达式所描述的语言都是LALA中任意组合P2 (A|B)*=(A*B*)=(A*|B*)*start6解: R1=01对应的自动机为 P3start1 (R1)*=(0|1)* 对应的自动机为M2将M2确定化状态 输入 01 P0P1,P3 P1P2P2 P2P1,P3 P3 I I0 I1(空)状态 输入 0 1P0,P1,P3P1,P2,P3P1,P2,P3 P0P1P1P1,P2,P3P1,P2,P3P1,P2,P3 P1P1P1(注:上图中
3、的(空)列表示没有该列。即上图为两个独立的表)P1状态转换图为:0,1简化为:1R=1(0|1)*|0 的DFA M为: R1=1010*|1(010)*1对应的DFA M为:q8S13R2=(1010*|1(0|0)*1)* 对应的DFA M为:0startS9P11对应R=1(1010*|1(010)*1)*0 的DFA M为:P14P901 8.解:(a) I Ia Ib 0 0,1 1 0,1 0,1 1 1 0 DFA的状态转换矩阵为: 状态 输入 a b q0 q1 q2 q1 q1 q2 q2 q0 化简:p0= q0= q1 p1= q2a 状态图为 :bastartP1P0
4、10解:它所识别的语言为:(1010)*第四章 语法分析P801. 解:(见课本)2解:文法有左递归,故先改写文法:errorA A=(B)|dBe B=cc下面给出两个分析子程序的框图:Sym=c(?) BY YY N Y两分析子程序如下:procedure A; IF sym= ( THEN Begin Nextsym; B; If sym=) Then Nextsym; Else Error End; ELSE If sym=d Then Begin Nextsym; B; if sym=e then Nextsym else Error End; Else Error; Procedu
5、re B; IF sym=c THEN Begin Nextsym; While sym=c do Nextsym End ELSE Error;/*程序中nextsym为读字符子程序,error为出错处理子程序*/*主程序*/ program G; VAR sym:CHAR; BEGIN Nextsym; A; END3解:(1)。 FIRST(AcB)=c FIRST(Bd)=a FIRST(AaB)=c FIRST(c)=c FIRST(aA)=a FIRST(a)=a(2). 若用不带回溯的自顶向下的语法分析程序,必须改写文法: ZAcB|Bd AcaB BaA 因为调用分析子程序A的
6、过程中,调用了B子程序,在B中又调用了A,相当于A间接的调用了A,所以该文法应编写成递归子程序。(3). 三个分析子程序框图如下: AZYYSym=c(?)errrorY nextsymSym=a(?)NY BB 三个分析子程序为:procedure Z; if sym=c thenbegin A; If sym=c then B; Else ErrorEnd; ElseIf sym=a then Begin B; If sym=d then Nextsym; Else Error End;Else Error;Procedure A;If sym=c then Begin Nextsym;
7、While sym=a do B; End;Else Error;Procedure B;If sym=a then Begin Nextsym; If sym=c then A; End;Else Error;P871 解:(1) FIRST(P)=(,a,b,) FOLLOW(E)=#,) FIRST(F)=, FOLLOW(E)= #,) FIRST(F)=(,a,b,) FOLLOW(T)= #,),+ FIRST(T)= (,a,b, ) FOLLOW(T)= #,),+ FIRST(T)= (,a,b,) FOLLOW(F)= (,a,b, ),+,# FIRST(E)=+, FO
8、LLOW(F)= (,a,b, ),+# FIRST(E)= (,a,b,) FOLLOW(P)= (,a,b, ),+,#,*(2)证明:对于E+E| FIRST(+E)=+ FIRST()= FOLLOW(E)=#, FIRST(+E)FIRST()= FIRST(+E)FOLLOW(E)= 对于TT| FIRST(T)FOLLOW(T)= 对于F*F| FIRST(*F)FOLLOW(F)= 对于P(E)|a|b| FIRST(E)=() FIRST(a)=a FIRSTb=b FIRST= 根据LL(1)文法的充要条件可以断定该文法是LL(1)文法.(3).构造其分析表如下: a b
9、( ) * + # EETEETEETEETE EEE+EE TTFTTFTTFTTFT TTTTTTTTTTTT FFPFFPFFPFFPF FFFFFFF*FFF PPaPbPP(E) (注:空白处均为ERROR)2解: (2)FIRST(aABbcd)=a; FIRST()=; FIRST(Asd)=a,d; FRIST(SAh)=a,h; FIRST(eC)=e; FRIST(Sf)=a,f; FIRST(Cg)=g,a,f; FRITS(aBD)=a; (3)对于CSf | Cg,FIRST(Sf) FIRST(Cg)=a,f 此文法不是LL(1)文法。6解:一个文法是文法的充要条件
10、是:AVn,A的任何两条不同的规则A:=|有下列条件成立:* FIRST()FIRST()= =,则FIRST()FOLLOW(A)= 证明:充分性:*对于任意非终结符A 若A:=|满足上述条件,取分析表项MA,a,aVt若A=a假设=a即aFIRST() FIRST()FIRST()= * aFIRST() 分析表项MA,a= A:= 若=,且aFOLLOW (A) aFIRST() MA,a= A:= 否则 MA,a=error 综上,分析表的元素无多重定义,符合LL(1)文法定义,是LL(1)文法必要性: 令对于LL(!)文法G的 AVn, A:=|条件不成立 FIRST()FIRST(
11、)=B FIRST()FIRST()=C* 若a,则MA,a中,可同时存在 A:=及A:= 若=则MA,a中,可同时存在A:= A:= 两条规则 这与定义相矛盾,假设错误必要性得证。P1002.(2)解:步骤对象栈算符栈关系读入符号符号串0#a+b*(c+d)-e#1#a+b*(c+d)-e#2a#+b*(c+d)-e#3a#+b*(c+d)-e#4ab#+*(c+d)-e#5ab#+*(c+d)-e#6ab#+*(c+d)-e#7abc#+*(+d)-e#8abc#+*(+d)-e#9abcd#+*(+)-e#10abf#+*()-e#11abf#+*-e#12ag#+-e#13h#-e#1
12、4h#-e#15he#-#16t#所以,a+b*(c+d)-e是文法的合法句子。3.解:procedure INSERT(u,a) if not Lu,a then begin Lu,a:=true; 将(u,a)压入栈STACK end;program MAIN; begin for 每个非终结符U和终结符a do Lu,a:=false; For 每条形如U:=a或U:= aV规则 do INSERT(U,a); While STACK 非空 DO Begin 将STACK栈顶弹出,记为(V,a); for 每条形如U:=V规则 do INSERT(U,a); End; End4. 短语
13、素短语E 无 无T T 无i i iT*F T*F T*FF*F F*F,F F*Fi*F i*F,i iF*i F*i,F,i iF+F+F F+F+F,F+F,F F+F5.步骤符号栈优先关系读入符号符号串0#ii+i#1#i#i+i#2#N#+i#3#N+ii#4#N+i+i#5#N+N#+#6#N接受所以i+i是符合文法的句子。步骤符号栈优先关系读入符号符号串0#ii*(i*i)#1#i#i*(i*i)#2#N#*(i*i)#3#N*(i*i)#4#N*(ii*i)#5#N*(i(i*i)#6#N*(N(*i)#7#N*(N*ii)#8#N*(N*i*i)#9#N*(N*N(i)#10
14、#N*(N()#11#N*(N)* ()#12#N*N#*#13#N接受P1041.(a) (1)E+F*i# = E+i*i#所以活前缀的集合为E,E,Ei(2)EPT= E+ PP#= E+ PF#= E+ P(E)#= E+ P(E+T)#= E+ P(E+P)#= E+ P(E+F)#= E+ P(E+i)#= E+ P(T + i)#= E+ P(P+i)#= E+ P(F+i)#= E+ P(i+i)#(b) (1)i+i*i#的最右推导逆过程如下: i+i*i# - F+i*i# - P+i*i# - T+i*i# - E+i*i# - E+F*i# - E+P*F# - E+P
15、# - E+T# - E# (2)i+i(i+i)#的最右推导的逆过程如下: i+i(i+i)# - F+i(i+i)# - P+i(i+i)# - T+i(i+i)# - E+i(i+i)# - E+F(i+i)# - E+P(i+i)# - E+P(F+i)# - E+P(P+i)# - E+P(T+i)# - E+P(E+i)# - E+P(E+F)# - E+P(E+P)# - E+P(E+T)# - E+P(E)# - E+PF# - E+PT# - E+T# - E# 2.(1)步骤栈内容输入串活前缀句柄00i+i-i#10i3+i-i#ii20T2+i-i#TT30E1+i-i#
16、E40E1+6i-i#E+50E1+6i3-i#E+ii60E1+6T8-i#E+TE+T70E1-i#E80E1-7i#E-90E1-7i3#E-ii100E1-7T9#E-TE-T110E1#E120E1#5E#E#130接受所以,i+i-i#为合法输入串。(2)步骤栈内容输入串活前缀句柄00(i+i)-i#10(4i+i)-i#(20(4i3+i)-i#(ii30(4T2+i)-i#(TT40(4E10+i)-i#(E50(4E10+6i)-i#(E+i60(4E10+6i3)-i#(E+ii70(4E10+6T8)-i#(E+TE+T80(4E10)-i#(E90(4E10)11-i#
17、(E)(E)100T2-i#TT110E1-i#E120E1-7i#E-130E1-7i3#E-ii140E1-7T9#E-TE-T150E1#E160E1#5E#E#170接受所以(i+i)-i#为合法输入串。P1081.解:(a) (b) F(.E),E.E-T,E.T,T.F,T.FT,F.i ,F.(E)(c) EE-T. 2.解:I0=closure(S.E#)=S.E#,E.wX,E.xYI1=goto(I0,E)=closure(SE.#)=SE.#I2=goto(I0,w)=closure(Ew.X)=Ew.X,X.yX,X.zI3=goto(I0,x)=closure(Ex.
18、Y)=Ex.Y,Y.yY,Y.zI4=goto(I1,#)=closure(SE#.)= SE#.I5=goto(I2,X)=closure(EwX.)= EwX.I6=goto(I2,y)=closure(Xy.X)= Xy.X, X.yX,X.z I7=goto(I2,z)=closure(X.z)= Xz.I8=goto(I3,Y)=closure(ExY.)= ExY.I9=goto(I3,y)=closure(Yy.Y)= YyY.I10=goto(I3,z)=closure(Yz.)= Yz.I11=goto(I6,X)=closure(XyX.)= XyX.I12=goto(I9
19、,Y)=closure(Yy.Y)= Yy.Y=I9LR(0)机器为:yI0z3.解: 步骤 栈内容 输入串 活前缀 句柄 10wyyz# 20w2yyz# w 20w2y6 yz# wy 30w2y6y6 z# wyy 40w2y6y6z7 # wyyzz 50w2y6y6X11 # wyyxyx 6 0w2y6X11 # wyxyx 70w2X5 # wxwx 8 0E1 # E 90E1#4 # E#E# 100 accept 步骤 栈内容 输入串 活前缀 句柄 00xyyyz# 10x3 yyyz#x 20x3y9 yyz#xy 30x3y9y9 yz#xyy 40x3y9y9y9 z
20、#xyyy 50x3y9y9y9z10 #xyyyzz 60x3y9y9y9Y12 #xyyyYyY 70x3y9y9Y12 #xyyYyY 80x3y9Y12 #xyYyY 90x3Y8 #xYxY 100E1 #E 110E1#4 #E#E# 120 acceptP1161. 给定下列产生式的文法:SE# ET|E+T TP|T*P PF|FP Fi|(E)(a) 为该文法构造LR(0)机器。(b) 证明该文法是SLR(1)。(c) 为该文法构造SLR(1)分析表。解:(a)构造LR(0)机器 C0:S.E#,E.T,E.E+T,T.P,T.T*P,P.F,P.FP,F.i,F.(E) C
21、1:SE.#,EE.+T C2:ET.,TT.*P C3:TP. C4:PF.,PF.P C5:Fi. C6:F(.E),E.T,E.E+T,T.P,T.T*P,P.F,P.FP,F.i,F.(E) C7:SE#. C8:EE+.T,T.P,T.T*P,P.F,P.FP,F.i,F.(E) C9:TT*.P,P.F,P.FP,F.i,F.(E) C10:PF.P, P.F, P.FP, F.i,F .(E) C11:F(E.),EE.+T C12:EE+T.,TT.*P C13:TT*P. C14:PFP. C15:F(E).(b)对于状态C2:ET.,TT.*P Follow(E)=#,+, *不属于Follow(E) C4:PF.,PF.P Follow(P)=#,+,* 不属于Follow(P) C12:EE+T.,TT.*P Follow(E)=#,+, *不属于Follow(E) 该文法构成的分析表不会出现多重定义出口。它是SLR(1)文法。(c)构造分析表为:状态SETPF+*i()#C0C1C2C3C4S5S6C1S8S7C2r1S9r1r1C3r3r3r3r3C4r5r5S10r5r5C5r7r7r7r7r7C6C11C2C3C4S5S6C7AC8C12C3C4S5S6C9C13C4S5S6C10C14C4S5S6
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1