《编译原理实践及应用》习题的参考答案.pdf
《《编译原理实践及应用》习题的参考答案.pdf》由会员分享,可在线阅读,更多相关《《编译原理实践及应用》习题的参考答案.pdf(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、附录部分习题参考答案第1章参考答案:1,2,3,4,5,6,7 解答:略!第2章参考答案:b 2,3:解答:略!4.解答:A:B:C:D:5.解答:用E表示v表达式,T表示v项,F表示 因子,上述文法可以写为:E T|E+TT t F|T*FF-(E)|i最左推导:E=E+T=E+T+T=T+T+T=F+T+T=i+T+T=i+F4-T=i+i+T=i+i+F=i+i+iE=E+T=T+T=F+T=i+T=i+T*F=i+F*F=i+i*F=i+i*i最右推导:E=E+T=E+F=E+i=E+T+i=E+F+i=E+i+i=T+i+i=F+i+i=i+i+iE=E+T=E+T*F=E+T*i=
2、E+F*i=E+i*i=T4-i*i=F+i*i=i+i*ii+i+i和i+i*i的语法树如下图所示。i+i+i、i+i*i的语法树6.解答:(1)终结符号为:or,and,not,(,),true,false非终结符号为:b e xpr,b te rm,b f ac tor)开始符号为:b e xpr(2)句子not(true or false)的语法树为:bexprIbtermbfactorbexpr or btermIIbterm bfactorIIbfactor falseItrue7.解答:(1)把an b n d分成a“b n和d两部分,分别由两个非终结符号生成,因此,生成此文法的
3、产生式为:S A BA aA b|abB CB|8(2)令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:S -aE|Ea|b S S|S b S|S S bE aEb E|b EaE|e(3)设文法开始符号为S,产生的w中满足l al W l b l W 2l al。因此,可想到S有如下的产生式(其 中B产 生1到2个b):S *aS B S|B S aSB t b|b b(4)解法一:ST 奇数头 整数 奇数尾I 奇数头 奇数尾I(奇数尾 奇数尾-1|3|5|7|9 奇数头-2|4|6|8|奇数尾)整数一 整数 数字I 数
4、字 数字-0|奇数头解法二:文法 G=(S,A,B,C,D,0,1,2,3,4,5,6,7,8,9 ,P,S)S A B I BAA C I DB-1 1 3 1 51 71 9D-2I4I6 I8 IBCOID(5)文法 G=(N,S,N,M,D,0,1,234,5,6,7,8,9,S,P)S-NO|N5N-M D|sM-1|2|3|4|5|6|7|8|9D-D0|DM|e(6)GS:SaSa I bSb I cSc I a I b I c Is8.解答:(1)句子abab有如下两个不同的最左推导:S=aSbS=abS=abaSbS=ababS=ababS=aSbS=abSaSbS=abaS
5、bS=ababS=abab所以此文法是二义性的。(2)句子abab的两个相应的最右推导:S=aSbS=aSbaSbS=aSbaSb=aSbab=ababS=aSbS=aSb=abSaSb=abSab=abab(3)句子abab的两棵分析树:(a)(b)(4)此文法产生的语言是:在 a,b 上由相同个数的a 和 b 组成的字符串。9,10:解答:略!第 3 章习题解答:1.解答:(1)V (2)V (3)X (4)X (5)4(6)V2.分析有限自动机分为确定有限自动机和非确定有限自动机。确定有限自动机的确定性表现在映射3:Q X%q是单值函数,也就是说,对任何状态q WQ和输入字符串a d%,
6、8 (q,a)唯一确定下一个状态。显然,本题给出的是一个确定的有限自动机,它的状态转换图是C中的。它所接受的语言可以用正则表达式表示为0 0(0 1)*,表示的含义为由两个。开始的后跟任意个(包含。个)0或1组成的符号串的集合。2.解答:A:B:C:D:E:(4)3,4.解答:略!5.解答:6.解答:(1)(0 1 1)*0 1(2)(1|2|9)(0|1|2|9)*1 )(0 1 5)(3)(0 1 1)*(0 1 1)(0 1 1)*(4)1*1 1*0(0 1 1 0)*(1 怆)(5)a*b*c*z*(6)(0 1 1 0*1)*1(7)(0 0 1 1 1 )*(0 1 1 1 0)
7、(0 0 1 1 1)*(0 1 I I 0)(0 0 1 1 1)*)*(8)分析设S是符合要求的串,|S|=2k+l (k 20)。则 S-S 0|S2l,|S j=2k (k 0),|S j=2k (k 20)。且 是 0,J上的小,含有奇数个d和奇数个1。0,1 上的串,含有偶数个。和偶数个1。考虑有一个自动机4 接受S 那么自动机.如下:0111000:11和L(4)等价的正规式,即1为:(0 0 1 1)|(0 1 1 0)(0 0 1 1)*(0 1 1 1 0)*(0 1 1 1 0)(0 0|1 1)*类似的考虑有个自动机M接受S ,那么自动机M如下:=01|10和 L(M)
8、等价的正规式,即S,为:(00|11)|(01|10)(00|11)-(01 10).因此,S 为:(00 11)(01 10)(00 11).(01110)*(01110)(00111).01(00 11)I(01 10)(00 11)(01110)47.解答:(1)以0 开头并且以0 结尾的,由0 和 1 组成的符号串。(2)alas 0,1)*(3)由0 和 1组成的符号串,且从右边开始数第3 位为0。(4)含 3 个 1的由0 和 1组成的符号串。alaG 0,l+,且 a 中含有3 个 1 (5)包含偶数个0 和 1 的二进制串,即alaGO,l*,且 a 中有偶数个0 和 18.解
9、答:9.解答:(l)DFA M=(0,1,a,q,q),%,%,8)其中3定义如下:s(%O)=q,s q,1)=4)8(q(O)=q2 3(q/1)=%S(q2,O)=q,8(q?l)=q)状态转换图为:DFAM=(。1,q(),qi(q2,q3,q。,以 ,),其中6定义如下:8(q0 O f8(qi(O)=q2S(q2.O)=q33,I f状态转换图为:-6(%,1)=%8 (q,.l)=q,8(q2-l q21 0.解答:(1)D F A M=(。,3(%O f3(q1 o)=q(S(q2.0)=q3状态转换图为i q0 qj q2 q3 q0 q3l-6),其中B定义如下:8(q0-
10、D=q2(q,q3B。,I f D F A M=(。1 ,qj,q0,q。,8),其中B定义如下:8(%)=%8(q0-1)=%状态转换图为:1 1 解答:(1)(al b)*a(al b)求 出N F A M:(2)(a)b)*a(al b)(al b)求NF AM:确 定化,得到D F AM:化简,在第步中求出的D F AM中没有等价状态,因此它已经是最小化的D F AM 了。1 2.解答:对应的N FA 为:增加状态X、Y,再确定化:II1 x,5 A,T,Y)()(A,T,Y)A,T,Y)B(B)B,T,Y)B,T,Y)T,Y T,Y ()得到的DFA为:最小化:该自动机已经是最小化的
11、D F A 了。13 .解答:Aa其中a代 表1元硬币,b代表5角硬币1 4.解答:正规式为:(0 11)*(0 0 10 1)化简:(0正*0(0 11)不确定的有穷自动机为:0确定化,并最小化得到:正规文法为:S-1 S I 0 AA-*0 B I 0 I IC I 1B-0 B 10 1 IC I 1C-1 S I 0 A15.解答:正规式:(d d*:l )d d*(.d d*l e),d代表a z的字母 NF A为:D F A为:16.解答:词法分析器对源程序采取非常局部的观点,因此象C语言的语句fi(a=f(x)中,词法分析器把f i 当作一个普通的标识符交给编译的后续阶段,而不会
12、把它看成是关键字 if 的拼写错。PASCAL语言要求作为实型常量的小数点后面必须有数字,如果程序中出现小数点后面没有数字情况,它由词法分析器报错。1 7.解答:此时编译器认为/*then partreturn qelse/*else part*/是程序的注释,因此它不可能再发现else前面的语法错误。分 析 这是注释用配对括号表示时的一个问题。注释是在词法分析时忽略的,而词法分析器对程序采取非常局部的观点。当进入第一个注释后,词法分析器忽略输入符号,一直到出现注释的右括号为止,由于第一个注释缺少右括号,所以词法分析器在读到第二个注释的右括号时,才认为第一个注释处理结束。为克服这个问题,后来的
13、语言一般都不用配对括号来表示注释。例如A da语言的注释始于双连字符(-),随行的结束而终止。如果用Ada语言的注释格式,那么上面函数应写成long gcd(p,q)long p,q;(if(p%q=0)-then partreturn qelse-else partreturn gcd(q,p%q);1 8.解答:略!第 4 章习题解答:1,2,3,4解 答 略!5 .解答:(1)X (2)V6.解答:(D A:(2)A:7.解答:X (4)V (5)V (6)VB:C:B:C:(7)X (8)XD:E:D:E:(1)消除给定文法中的左递归,并提取公因子:b e x p r b t e r
14、m o r b t e r m )b t e r m b f h c t o r a n d b f a c t o r b f a c t o r n o t b f a c t o r|(b e x p r)|t r u e|f a l s e(2)用类C语言写出其递归分析程序:消除所给文法的左递归,得G:void bcxpr();void bfactor();(bterm();if(llokahead=not)then WHILE(lookahead=or)match(not);match(or);bfactor();bterm();)1else if(lookahead=()then)
15、match C();bexpr();void bterm();match(),);(bfactor();else if(lookahead=,true,)WHILEdookahead=and)then match(true)match(and);else if(lookahead=false)bfactor();then match(false*);)else error;)8.解答:)S f(L)|aL -S L L -,S L|实现预测分析器的不含递归调用的种有效方法是使用张分析表和个栈进行联合控制,下面构造预测分析表:根据文法G有:F i r st(S)=(,a)F o l l o w(
16、S)=F i r st(L)=(,a)F o l l o w(L)=F i r st(L)=,F o l l o w (Lf)=按以上结果,构造预测分析表M如下:),#)m留 结 符输入符号()a#sS T(L)S aLL-SUL-SL,UL T ,SL文法G是L L(1)的,因为它的L L(1)分析表不含多重定义入口。预测分析器对输入符号串(a,(a,a)做出的分析动作如下:步骤栈剩余输入串输出1#s(a,(a,a)#2#)L(a,(a,a)#S-(L)3#)La,(a,a)#4#)L Sa,(a,a)#L S U5#)L aa,(a,a)#S a6#)L,(a,a)#7#)US,(a,a)
17、#L。,SL8#)L S(a,a)#9#)L)L(a,a)#S-(L)1 0#)L)La,a)#1 1#)U)L Sa,a)#L 一 S U1 2#)L)L aa,a)#S a1 3#)L)Lf,a)#1 4#)L)LS,a)#L-,SL!1 5#)L)L Sa)#1 6#)L)Lraa)#S a1 7#)L)Lr)#1 8#)U)#L r 1 9#)L)#2 0#)#L-2 1#9.解答:各非终结符的F i r st集:F i r st(S)=F i r st(A)8 U F i r st(B)8)U e U b=a,b,eF i r st(A)=b U s=b,eF i r st(B)=e
18、)U a=a,sF i r st(C)=F i r st(A)e U F i r st(D)U F i r st(b)=a,b,cF i r st(D)=a U c=a,c各个候选式的F i r st集 为:F i r st(A B)=a,b,8 F i r st()=eF i r st(aD)=aF i r st(b)=bF i r st(bC)=bF i r st(b)=bF i r st(A D)=a,b,cF i r st(aS)=aF i r st(c)=c各非终结符的F o l l o w集的计算:F o l l o w(S)=#UF o l l o w(D)=#F o l l o
19、 w(A)=(F i r st(B)U F o l l o w(S)U F i r st(D)=a,#,cF o l l o w(B)=F o l l o w(S)=#F o l l o w(C)=F o l l o w(S)=#F o l l o w(D)=F o l l o w(B)U F o l l o w(C)=#)10.解答:(1)求 F i r st 和 F o l l o w 集F i r st(E)=F i r st(T)=(,a,b,A F i r st(E )=+,8 F i r st(T)=F i r st(F)=(,a,b,A F i r st(T)=(,a,b,A,s
20、)F i r st(F)=F i r st(P)=(,a,b,AF i r st(F)=*,&F i r st(P)=(,a,b,A)(计算顺序)F o l l o w(E)=#,)F o l l o w(E )=F o l l o w(E)=#,)F o l l o w(T)=F i r st(E )E U F o l l o w(T)=+U ),#=+,),#F o l l o w(T)=F o l l o w(T)=+,#F o l l o w(F)=F i r st(T)UF o l l o w(T)=(,a,b,A,+,),#F o l l o w(F )=F o l l o w(F
21、)=(,a,b,A,+,),#F o l l o w(P)=F i r st(F )s U F o l l o w(F)=*,(,a,b,A,+,),#(2)证明:V a.文法不含左递归;(1,7)(1)(使用的产生式)(1,4)(3)(3,4)(5)(5,6)b.每个非终结符的各个侯选式的F i r st集不相交;c.F i r st(E )n F o l l o w(E )=+,E n#,),=F i r st(T)n F o l l o w(T)=(,a,b,A,C +,)=F i r st(F )DF o l l o w(F )=*,E n ,a,(八,+,#=改造后的文法满足LL(1
22、)文法的三个条件,是LL(1)文法。(3)预测分析表如下所示。ab*+A()#EETEETEETEETEEE J+EE fE fTT-FTT 一 FTT-FTT 一 FTTT J Tr TT J gT J Tr TT-eT-8FF-PFrFPFF-PFFPFFF fF fFF fFFfFfPP aPbPAP T E)11.解答:(1)ma.文法不含左递归;b.S,A,B各候选式的First集不相交;c.First(A)AFollow(A)=a,8 A b=(PFirst(B)n Follow(B)=b志 C T=F=(E)=(E+T)=(E+F)=(E+i)=(T+i)=(T*F+i)语法树:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理实践及应用 编译 原理 实践 应用 习题 参考答案
限制150内