• 29.32 KB
  • 2022-04-22 11:45:47 发布

清华大学编译原理第二版课后习答案.docx

  • 25页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'清华大学第二版编译原理答案《编译原理》课后习题答案第一章第 4 题对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。(1) else 没有匹配的if(2) 数组下标越界(3) 使用的函数没有定义(4) 在数中出现非数字字符答案:(1) 语法分析(2) 语义分析(3) 语法分析(4) 词法分析《编译原理》课后习题答案第三章第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1} 清华大学第二版编译原理答案第5 题写一文法,使其语言是偶正整数的集合。 要求:(1) 允许0 打头;(2)不允许0 打头。答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。(5)i+(i+i)(6)i+i*i答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>) 清华大学第二版编译原理答案=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i第7 题证明下述文法G[〈表达式〉]是二义的。〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/答案:可为句子a+a*a 构造两个不同的最右推导:最右推导1 〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉a〈表达式〉* a〈表达式〉〈运算符〉〈表达式〉* a〈表达式〉〈运算符〉a * a〈表达式〉+ a * aa + a * a最右推导2 〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a〈表达式〉〈运算符〉〈表达式〉 * a〈表达式〉〈运算符〉a * a 清华大学第二版编译原理答案〈表达式〉+ a * aa + a * a第8 题文法G[S]为:S→Ac|aBA→abB→bc该文法是否为二义的?为什么?答案:对于串abc(1)S=>Ac=>abc (2)S=>aB=>abc即存在两不同的最右推导。所以,该文法是二义的。或者:对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。Sa Bb cSA ca b第9 题考虑下面上下文无关文法:S→SS*|SS+|a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。SS S *S S + aa a(2)G[S]的语言是什么?答案:(1)此文法生成串aa+a*的最右推导如下S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。第10 题文法S→S(S)S|ε(1) 生成的语言是什么?(2) 该文法是二义的吗?说明理由。答案:(1) 嵌套的括号(2) 是二义的,因为对于()()可以构造两棵不同的语法树。第11 题令文法G[E]为:E→T|E+T|E-TT→F|T*F|T/F 清华大学第二版编译原理答案F→(E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。答案:此句型对应语法树如右,故为此文法一个句型。或者:因为存在推导序列: E=>E+T=>E+T*F,所以 E+T*F 句型此句型相对于E 的短语有:E+T*F;相对于T 的短语有T*F直接短语为:T*F句柄为:T*F第13 题一个上下文无关文法生成句子abbaa 的推导树如下:(1)给出串abbaa 最左推导、最右推导。(2)该文法的产生式集合P 可能有哪些元素?(3)找出该句子的所有短语、直接短语、句柄。BaSA B SaS B Aε b b a答案:(1)串abbaa 最左推导:S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa最右推导:S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa(2)产生式有:S→ABS |Aa|ε A→a B→SBB|b可能元素有:ε aa ab abbaa aaabbaa ……(3)该句子的短语有:a 是相对A 的短语ε 是相对S 的短语b 是相对B 的短语εbb 是相对B 的短语aa 是相对S 的短语aεbbaa 是相对S 的短语直接短语有:a ε b句柄是:a《编译原理》课后习题答案第四章第1 题构造下列正规式相应的DFA.(1) 1(0|1) *101(2) 1(1010*|1(010)*1)*0 清华大学第二版编译原理答案(3) a((a|b)*|ab*a)*b(4) b((ab)*|bb)*ab答案:(1) 先构造NFA:用子集法将NFA 确定化. 0 1X . AA A ABAB AC ABAC A ABYABY AC AB除X,A 外,重新命名其他状态,令AB 为B、AC 为C、ABY 为D,因为D 含有Y(NFA的终态),所以D 为终态。. 0 1X . AA A BB C BC A DD C BDFA 的状态图::(2)先构造NFA:X 1 Aε B1 C 0 D 1 E0εF 1 G 0 H 1 I 0 J 1 KLε ε0Yεεεε用子集法将NFA 确定化ε 0 1X XT0=X AA ABFLT1= ABFL Y CGY YCG CGJT2= Y 清华大学第二版编译原理答案T3= CGJ DH KDH DHK ABFKLT4= DH EIEI ABEFILT5= ABFKL Y CGT6= ABEFIL EJY CGEJY ABEFGJLYT7= ABEFGJLY EHY CGKEHY ABEFHLYCGK ABCFGJKLT8= ABEFHLY EY CGIEY ABEFLYCGI CGJIT9= ABCFGJKL DHY CGKDHY DHYT10= ABEFLY EY CGT11= CGJI DHJ KDHJ DHJT12= DHY EIT13= DHJ EIKEIK ABEFIKLT14= ABEFIKL EJY CG将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、1、2、3、4、5、6、7、8、9、10、11、12、13、14 表示。因为2、7、8、10、12 中含有Y,所以它们都为终态。0 10 11 2 323 4 54 65 2 36 7 37 8 98 10 119 12 910 10 311 13 512 613 1414 7 3 清华大学第二版编译原理答案0 1 0121 2710 83456911 13 1411010101101101010 10101(3) 先构造NFA:先构造NFA:X a Aε Ba,bεD a E a FCεYεε 清华大学第二版编译原理答案bεb用子集法将NFA 确定化ε a bX XT0=X AA ABCDT1=ABCD BE BYBE ABCDEBY ABCDYT2=ABCDE BEF BEYBEF ABCDEFBEY ABCDEYT3=ABCDY BE BYT4=ABCDEF BEF BEYT5=ABCDEY BEF BEY将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为3、5 中含有Y,所以它们都为终态。a b0 11 2 32 4 53 2 34 4 55 4 50 a 1 b 32a5a 4bababab(4) 先构造NFA:X Abε Ba 清华大学第二版编译原理答案F b G b HEεYaεC D b εI bεεεε用子集法将NFA 确定化:ε a bX XT0=X AA ABDEFT1=ABDEF CI GCI CIG GT2=CI DYDY ABDEFYT3=G HH ABEFHT4=ABDEFY CI GT5=ABEFH CI G将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为4 中含有Y,所以它为终态。a b0 11 2 32 43 54 2 35 2 3DFA 的状态图:0 b 1 b2a453bb 清华大学第二版编译原理答案abab第2题已知NFA=({x,y,z},{0,1},M,{x},{z}),其中:M(x,0)={z},M(y,0)={x,y},,M(z,0)={x,z},M(x,1)={x},M(y,1)=φ,M(z,1)={y},构造相应的DFA。答案:先构造其矩阵0 1x z xy x,yz x,z y用子集法将NFA 确定化:0 1x z xz xz yxz xz xyy xyxy xyz xxyz xyz xy将x、z、xz、y、xy、xyz 重新命名,分别用A、B、C、D、E、F 表示。因为B、C、F中含有z,所以它为终态。0 1A B AB C DC C ED EE F AF F EDFA 的状态图:A0 10FED0B10101 清华大学第二版编译原理答案01C第3 题将下图确定化:答案:用子集法将NFA 确定化:. 0 1S VQ QUVQ VZ QUQU V QUZVZ Z ZV Z .QUZ VZ QUZZ Z Z重新命名状态子集,令VQ 为A、QU 为B、VZ 为C、V 为D、QUZ 为E、Z 为F。. 0 1S A BA C BB D EC F FD F .E C EF F FDFA 的状态图:第4 题将下图的(a)和(b)分别确定化和最小化:答案:初始分划得Π0:终态组{0},非终态组{1,2,3,4,5}对非终态组进行审查:{1,2,3,4,5}a {0,1,3,5}而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5}∵{4} a {0},所以得到新分划Π1:{0},{4},{1,2,3,5}对{1,2,3,5}进行审查:∵{1,5} b {4}{2,3} b {1,2,3,5},故得到新分划Π2:{0},{4},{1, 5},{2,3}{1, 5} a {1, 5}{2,3} a {1,3},故状态2 和状态3 不等价,得到新分划Π3:{0},{2},{3},{4},{1, 5}这是最后分划了最小DFA: 清华大学第二版编译原理答案第5 题构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1 都有0 直接跟在右边。并给出该语言的正规式。答案:按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA 为用子集法确定化:I I0 I1{X,0,1,3,Y}{0,1,3,Y}{2}{1,3,Y}{0,1,3,Y}{0,1,3,Y}{1,3,Y}{1,3,Y}{2}{2}{2}重新命名状态集:S 0 112342244333DFA 的状态图:可将该DFA 最小化:终态组为{1,2,4},非终态组为{3},{1,2,4}0 {1,2,4},{1,2,4}1 {3},所以1,2,4 为等价状态,可合并。第6题设无符号数的正规式为θ:θ=dd*|dd*.dd*|.dd*|dd*10(s|ε)dd*|10(s|ε)dd*|.dd*10(s|ε)dd*|dd*.dd*10(s|ε)dd*化简θ,画出θ的DFA,其中d={0,1,2,…,9},s={+,-}答案:先构造NFA:X 清华大学第二版编译原理答案d. BdF GdH10dAεC10dDsεE dYdsεd用子集法将NFA 确定化:ε • s 10 dX XAT0=XA B F AB BF FGA AT1=B CC CT2=FG G HG GH HT3=A B F AT4=C D CD DET5=G HT6=H HT7=DE E YE EY YT8=E YT9=Y Y 清华大学第二版编译原理答案将XA、B、FG、A、C、G、H、DE、E、Y 重新命名,分别用0、1、2、3、4、5、6、7、8、9 表示。终态有0、3、4、6、9。• s 10 d0 1 2 31 42 5 63 1 2 34 7 45 66 67 8 98 99 9DFA 的状态图:•d62 5d3dd4 7890110ds•1010ddsddd第7 题给文法G[S]:S→aA|bQA→aA|bB|bB→bD|aQ 清华大学第二版编译原理答案Q→aQ|bD|bD→bB|aAE→aB|bFF→bD|aE|b构造相应的最小的DFA。答案:先构造其NFA:SaAaZQbBDaEbFbbabaabb bbab用子集法将NFA 确定化:a bS A QA A BZQ Q DZBZ Q DDZ A BD A BB Q D将S、A、Q、BZ、DZ、D、B 重新命名,分别用0、1、2、3、4、5、6 表示。因为3、4 中含有z,所以它们为终态。a b0 1 2 清华大学第二版编译原理答案1 1 32 2 43 2 54 1 65 1 66 2 5DFA 的状态图:0aa52b3aab416baabbbab令P0=({0,1,2,5,6},{3,4})用b进行分割:P1=({0,5, 6},{1,2},{3,4})再用b进行分割:P2=({0},{5, 6},{1,2},{3,4})再用a、b 进行分割,仍不变。再令{0}为A,{1,2}为B,{3,4}为C,{5,6}为D。最小化为:Aa , bD CaaBbabb第8题 清华大学第二版编译原理答案给出下述文法所对应的正规式:S→0A|1BA→1S|1B→0S|0答案:解方程组S 的解:S=0A|1BA=1S|1B=0S|0将A、B 产生式的右部代入S 中S=01S|01|10S|10=(01|10)S|(01|10)所以:S= (01|10)*(01|10)第9 题将下图的DFA 最小化,并用正规式描述它所识别的语言。1a26c3cb54 7bba bbbdda答案:令P0=({1,2,3,4,5},{6,7})用b进行分割:P1=({1,2},{3,4},{5},{6,7})再用a、b、c、d进行分割,仍不变。再令{1,2}为A,{3,4}为B,{5}为C,{6,7}为D。最小化为:AaC DbdBb 清华大学第二版编译原理答案cabr=b*a(c|da)*bb*=b*a(c|da)*b+《编译原理》课后习题答案第五章第1 题对文法G[S]S→a|∧|(T)T→T,S|S(1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。(2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。(3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。(4) 给出输入串(a,a)#的分析过程,并说明该串是否为G 的句子。答案:(1) 对(a,(a,a)的最左推导为:S (T)(T,S)(S,S)(a,S)(a,(T))(a,(T,S))(a,(S,S))(a,(a,S))(a,(a,a))对(((a,a),∧,(a)),a) 的最左推导为:S (T)(T,S)(S,S)((T),S)((T,S),S)((T,S,S),S)((S,S,S),S)(((T),S,S),S)(((T,S),S,S),S)(((S,S),S,S),S)(((a,S),S,S),S)(((a,a),S,S),S)(((a,a),∧,S),S)(((a,a),∧,(T)),S)(((a,a),∧,(S)),S)(((a,a),∧,(a)),S)(((a,a),∧,(a)),a)(2) 改写文法为:0) S→a 清华大学第二版编译原理答案1) S→∧2) S→( T )3) T→S N4) N→, S N5) N→ε非终结符 FIRST 集 FOLLOW 集S {a,∧,(} {#,,,)}T {a,∧,(} {)}....N {,,ε}. {)}....对左部为N 的产生式可知:FIRST (→, S N)={,}FIRST (→ε)={ε}FOLLOW (N)={)}由于SELECT(N →, S N)∩SELECT(N →ε) ={,}∩ { )}=所以文法是LL(1)的。预测分析表(Predicting Analysis Table)a ∧ ( ) , #S →a →∧ →(T)T →S N →S N →S NN →ε →, S N也可由预测分析表中无多重入口判定文法是LL(1)的。(3) 对输入串(a,a)#的分析过程为:栈(STACK)当前输入符(CUR_CHAR)剩余输入符(INOUT_STRING)所用产生式(OPERATION)#S#)T(#)T#)NS#)Na#)N#)NS,#)NS#)Na#)N#)#((a 清华大学第二版编译原理答案aa,,aa))#a,a)#...a,a)#...,a)#...,a)#...,a)#...a)#...a)#...)#...)#...#...#...S→(T).T→SNS→a.N→,SN.S→a.N→ε可见输入串(a,a)#是文法的句子。第3 题已知文法G[S]:S→MH|aH→LSo|εK→dML|εL→eHfM→K|bLM判断G 是否是LL(1)文法,如果是,构造LL(1)分析表。答案:文法展开为:0) S→M H1) S→a2) H→L S o 清华大学第二版编译原理答案3) H→ε4) K→d M L5) K→ε6) L→e H f7) M→K8) M→b L M非终结符 FIRST 集 FOLLOW 集S {a,d,b,ε,e} {#,o}........M {d,ε,b}.... {e,#,o}......H {ε,e}...... {#,f,o}......L {e}......... {a,d,b,e,o,#}K {d,ε}...... {e,#,o}......对相同左部的产生式可知:SELECT(S→M H)∩SELECT(S→a) ={ d,b ,e,#,o }∩ { a }=SELECT(H→L S o)∩SELECT(H→ε) ={ e }∩ { #,f,o }=SELECT(K→d M L)∩SELECT(K→ε) ={ d }∩ { e,#,o }=SELECT(M→K)∩SELECT(M→b L M) ={ d,e,#,o }∩ { b }=所以文法是LL(1)的。预测分析表:a o d e f b #S →a →MH →MH →MH →MH →MHM →K →K →K →bLM →KH →ε →LSo →ε →εL →eHfK →ε →dML →ε →ε由预测分析表中无多重入口也可判定文法是LL(1)的。第7 题对于一个文法若消除了左递归,提取了左公共因子后是否一定为LL(1)文法?试对下面文法进行改写,并对改写后的文法进行判断。(1)A→baB|εB→Abb|a(2) A→aABe|aB→Bb|d(3) S→Aa|bA→SBB→ab答案:(1)先改写文法为:0) A→baB1) A→ε2) B→baBbb3) B→bb4) B→a再改写文法为: 清华大学第二版编译原理答案0) A→baB1) A→ε2) B→bN3) B→a4) N→aBbb5) N→bFIRST FOLLOWA {b} {#}B {b,a} {#,b}N {b,a} {#,b }预测分析表:a b #A →baB →εB →a →bNN →aBbb →b由预测分析表中无多重入口判定文法是LL(1)的。(2) 文法:A→aABe|aB→Bb|d提取左公共因子和消除左递归后文法变为:0) A→a N1) N→A B e2) N→ε3) B→d N14) N1→b N15) N1→ε非终结符 FIRST 集 FOLLOW 集A {a}... {#,d}B {d}... {e}..N {a,ε} {#,d}N1 {b,ε} {e}..对相同左部的产生式可知:SELECT(N→A B e)∩SELECT(N→ε) ={ a }∩ {#,d }=SELECT(N1→b N1)∩SELECT(N1→ε) ={ b }∩ { e }=所以文法是LL(1)的。预测分析表(Predicting Analysis Table)a e b d #A →a NB →d N1N1 →ε →b N1N →ABe →ε →ε也可由预测分析表中无多重入口判定文法是LL(1)的。(3)文法:S→Aa|b 清华大学第二版编译原理答案A→SBB→ab第1 种改写:用A 的产生式右部代替S 的产生式右部的A 得:S→SBa|bB→ab消除左递归后文法变为:0) S→b N1) N→B a N2) N→ε3) B→a b非终结符 FIRST 集 FOLLOW 集S {b}... {#}B {a}... {a}N {ε,a} {#}对相同左部的产生式可知:SELECT(N→B a N)∩SELECT(N→ε) ={ a }∩ {# }=所以文法是LL(1)的。预测分析表(Predicting Analysis Table)a b #S →b NB →a bN →B a N →ε也可由预测分析表中无多重入口判定文法是LL(1)的。第2 种改写:用S 的产生式右部代替A 的产生式右部的S 得:S→Aa|bA→AaB|bBB→ab消除左递归后文法变为:0) S→A a1) S→b2) A→b B N3) N→a B N4) N→ε5) B→a b非终结符 FIRST 集 FOLLOW 集S {b}... {#}A {b}... {a}B {a}... {a}N {a,ε} {a}SELECT(S→A a)∩SELECT(S→b) ={ b }∩ { b }={ b }≠SELECT(N→a B N)∩SELECT(N→ε) ={ a }∩ { a }={ a }≠所以文法不是LL(1)的。 清华大学第二版编译原理答案预测分析表:a b #S →A a..→b....A →b B NB →a b..N →a B N→ε...也可由预测分析表中含有多重入口判定文法不是LL(1)的。'