首页 编译原理习题解答(第2-3章)

编译原理习题解答(第2-3章)

举报
开通vip

编译原理习题解答(第2-3章) 《编译原理》第2-3章习题解答 版权所有:南京邮电大学计算机学院 声明:希望同学们不要把此解答拷贝 给他人,请大家保持诚信 * 第二章习题 * P38 7.设有文法G[S]: S∷=A A∷=B | IF A THEN A ELSE A B∷=C | B+C | +C C∷=D | C*D | *D D∷=X | (A) | -D 试写出VN和VT。 解: VN={S,A,B,C,D} VT={IF,THEN,...

编译原理习题解答(第2-3章)
《编译原理》第2-3章习题解答 版权所有:南京邮电大学计算机学院 声明:希望同学们不要把此解答拷贝 给他人,请大家保持诚信 * 第二章习题 * P38 7.设有文法G[S]: S∷=A A∷=B | IF A THEN A ELSE A B∷=C | B+C | +C C∷=D | C*D | *D D∷=X | (A) | -D 试写出VN和VT。 解: VN={S,A,B,C,D} VT={IF,THEN,ELSE,+,*,X,(,),-} P39 10.给定文法: S∷=aB | bA A∷=aS | bAA | a B∷=bS | aBB| b 该文法所描述的语言是什么? 解: L(G)={相同个数的a与b以任意次序连接而成的非空符号串}。 P39 11.试分别描述下列文法所产生的语言(文法开始符号为S): (2) S∷=aaS | bc (4) S:: =AB A:: =aAb | ab B:: =cBd | ε 解: (2) L(G)={a2nbc | n≥0}; (4) L(G)={anbncmdm | m≥0, n≥1}。 P39 12.试分别构造产生下列语言的文法: (1){ abna | n=0,1,2,3……} (3){ aban | n≥1} (5){ anbmcp | n,m,p≥0} 解: (1)G={VN,VT,P,S},VN={S,A },VT={a,b}, P:S∷=aAa 或 S∷=aB A∷=bA |ε B∷=bB | a (3)G={VN,VT,P,S},VN={S,A },VT={a,b}, P:S∷=abA 或 S∷=Sa | aba A∷=aA | a (5){ anbmcp | n,m,p≥0} 解: G={VN,VT,P,S},VN={S,A ,B,C },VT={a,b,c}, P:S∷=ABC A∷=aA |ε B∷=bB |ε C∷=cC |ε P39 15. 设文法G规则为: S::=AB B::=a|Sb A::=Aa|bB 对下列句型给出推导语法树,并求出其句型短语,简单短语和句柄。 (2)baabaab 解: S A B A a S b b B A B a b B a a 句型baabaab的短语a, ba, baa, baab, baabaab,简单短语a,句柄 a P40 19. 证明下述文法是二义的 S::=iEtS| iEtSeS|a E::=b 存在句子ibtibtaeibta或者ibtibtaea有两颗不同的语法树 3) 解: 对于句子ababa可构造两棵不同的语法树,所以证明该文法是二义的。 S A a C b A b a a S B B C C a b a b a P41 24. 下面文法那些是短语结构文法,上下文有关文法,上下文无关文法,及正规文法? 1.S::=aB B::= cB B::=b C::=c 2.S::=aB B::=bC C::=c C::=ε 3.S::=aAb aA::=aB aA::=aaA B::=b A::=a 4.S::=aCd aC::=B aC::=aaA B::=b 5.S::=AB A::=a B::=bC B::=b C::=c 6. S::=AB A::=a B::=bC C::=c C::=ε 7. S::=aA S::= ε A::=aA A::=aB A::=a B::=b 8. S::=aA S::= ε A::=bAb A::=a 解:正规文法 1 2 7 或者 1 上下文无关文法 5 6 8 或者 2 5 6 7 8 上下文有关文法 3 短语结构文法 4 P41 26. 给出产生下列语言L(G)={W|W∈{0,1}+且W不含相邻1}的正规文法。 解: G=({S, A, B}, {0, 1}, P, S) P: S::=0|1|0S|1A A::=0|0S 解题思路一:写出满足要求的符号串,例如0,1,00,01,10,000,101,010,001等,根据符号串从左至右的次序画出状态转换图,然后根据状态转换图来推导出文法。这将会得到S::=0|1|0S|1A|0Z|1Z A::=0|0S|0Z 经过分析其中Z为多余状态可删去。 S Z A 1 0 0 0 0 1 解题思路二:写出其正规表达式(0|10)*(10|0|1)【如果仅有(0|10)*的话推导不出1,因为是连接关系,后面缺了10的话就会以1结尾,同样的道理还要推导出0,所以得到此正规式】,画出转换系统,然后根据转换系统来推导出文法。也可以根据正规表达式直接写文法,例如正规表达式(0|10)*(10|0|1)可以看成是a*b,推导出A::= (0|10)A|10|0|1,即A::= 0A|1B|10|0|1,其中B::=0A,但是10此项不符合正规文法的选项,可以进行改写从而得到A::= 0A|1B|0|1 B::=0A|0。 P41 27.给出一个产生下列语言 L(G)={W|W∈{a,b}*且W中含a的个数是b个数两倍的前后文无关文法。 解:文法G=({S, A, B}, {a, b}, P, S) P: S::=AAB|ABA|BAA|ε A::=aS B::=bS 或者 S::=Saab|aSab|aaSb|aabS|Saba|aSba|abSa|abaS|Sbaa|bSaa|baSa|baaS|ε 或者 S::=aaB|aBa|Baa|ε B::=SbS P41 28. 给出一个产生下列语言L(G)={w | w∈{a, b, c}+且w由相同个数的a,b,c组成的前后文有关文法。 解: 文法G=({S, A, B}, {a, b, c}, P, S) P: S::= ABC A::=aS | a B::=bS | b C::=cS | c AB::=BA BC::=CB AC::=CA P41 29. 用扩充的BNF表示以下文法规则: (1) Z::=AB|AC|A (2) A::=BC|BCD|AXZ|AXY (3) S::=aABb|ab (4) A::=Aab|ε 解: (1) Z::=A(B|C|ε)::=A[B|C] (2) A::=BC(ε|D)|{X(Z|Y)}::= BC[D]|{X(Z|Y)} (3) A::=a((AB|ε)b) ::= a[AB]b (4) A::={ab|ε}::={ab} 第三章习题 P74 4. 画出下列文法的状态图: Z :: =Be B :: =Af A :: =e|Ae 并使用该状态图检查下列句子是否该文法的合法句子:f, eeff, eefe。 解: 由状态图可知只有eefe是该文法的合法句子。 P74 6. 构造下述文法G[Z]的自动机,该自动机是确定的吗?它相应的语言是什么? Z :: =A0 A :: =A0|Z1|0 解1:将左线性文法转换为右线性文法,由于在规则中出现了识别符号出现在规则右部的情形,因此不能直接使用书上的左右线性文法对应规则,可以引入非终结符号B,将左线性文法变为Z :: =A0 A :: =A0|B1|0 B :: =A0,具体为: A := Z1 A := B1 A := A01 Z := A0 B := A0 将所得的新左线性文法转换成右线性文法: 此时利用书上规则,其对应的右线性文法为:A :: =0A|0B|0 Z :: =0A B :: =1A 解2:先画出该文法状态转换图: NFA=({S,A,Z},{0,1},M,{S},{Z}) 其中M: M(S,0)={A} M(S,1)=ø M(A,0)={A,Z} M(A,1)=ø M(Z,0)=ø M(Z,1)={A} 显然该文法的自动机是非确定的;它相应的语言为:{0,1}上所有满足以00开头以0结尾且每个1必有0直接跟在其后的字符串的集合;也可以通过求解正规表达式得到A=0(0|01)*,Z=0(0|01)*0 那么如何构造其相应的有穷自动机呢? 先构造其转换系统: Z’ Z A S S’ ε 0 1 0 0 ε 根据其转换系统可得状态转换集、状态子集转换矩阵如下表所示:(其中S’可以忽略,结果是一样的) I I0 I1 S 0 1 {S’, S} {A} Ф 0 1 Ф {A} {A, Z, Z’} Ф 1 2 Ф {A, Z, Z’} {A, Z, Z’} {A} 2 2 1 则其相应的DFA为: 2 1 0 0 0 0 1 P74 7. 构造一个DFA,它接受{0,1}上所有满足下述条件的字符串,其条件是:字符串中每个1都有0直接跟在右边,然后,再构造该语言的正规文法。 解(一):其状态转换图为 (状态S表示空串开始,状态A表明串的末尾是1,状态Z表示串的末尾是0) DFA=({S,A,Z},{0,1},M,S,{Z}) 其中M: M(S,0)=Z M(S,1)= A M(A,0)=Z M(Z,0)=Z M(Z,1)=A 该语言的正规文法G[Z]为: 右线性文法://S :: =0|1A|0Z 左线性文法: A :: =0|0Z A :: =1|Z1 Z :: =0|1A|0Z Z :: =0|A0|Z0 若终止状态只引入不引出则适合构造右线性文法,若开始状态只引出不引入则适合构造左线性文法,若终态和初态均既有引入又有引出,则构造文法要注意。 解(二):可以先写出该文法的正规表达式为(0 | 10)*,根据该正规式构造转换系统 对于该转换系统可以采用子集法将其转变为DFA,再根据DFA写出其正规文法;但是注意观察后,发现开始状态S通过ε到达A状态,可以直接删去S状态,由A状态作为新的开始状态,同理,只有A状态通过ε才能到达终止状 态Z,因此可以删去Z状态,由A状态作为终止状态。这样,A状态就既为开始状态又为终止状态。可画出化简后的转换图。可写出右线性文法为: A :: =0|0A|1B B :: =0|0S P74 8. 设 (NFA) M = ( {A, B}, {a, b}, M, {A}, {B} ),其中M定义如下: M (A, a) = {A, B} M (A, b) = {B} M (B, a) = ø M (B, b) = {A, B} 请构造相应确定有穷自动机(DFA) M’。 解:构造一个如下的自动机(DFA) M’, (DFA) M’={K’, {a, b}, M’, S’, Z’} K’的元素是[A] [B] [A, B] 由于M(A, a)={A, B},故有M’([A], a)=[A, B] 同样 M’([A],b)=[B] M’([B],a)= ø M’([B],b)=[A,B] 由于M({A,B},a)= M(A,a)U M(B,a)= {A,B}U ø= {A,B} 故 M’([A,B],a)= [A,B] 由于M({A,B},b)= M(A,b)U M(B,b)={B}U {A,B} = {A,B} 故 M’([A,B],b)= [A,B] S’=[A],终态集Z’={[A,B],[B]} 重新定义:令0=[A] 1=[B] 2=[A, B],则DFA如下所示: P74 9. 设有穷自动机M = ({S, A, E}, {a, b, c}, M, S, {E}),其中M定义为 M (S, c) = A M (A, b) = A M (A, a) = E 请构造一个左线性文法。 解:先求右线性文法 S→cA A→bA A→a | aE {A→aE实际上是多余的规则,应该去掉} 其左线性文法G=(VN, VT, P, S) VN = {A, S} VT = {a, b, c} 根据书上左右线性文法的转换规则,得到P: A→c A→Ab S→Aa {E→Aa实际上是多余的规则,应该去掉} 画出状态转换图之后就非常清晰。 P74 11. 构造下列正规式相应的DFA: (1)(0 | 11*0)* 【新课本】 解:先构造该正规式的转换系统: 由上述转换系统可得状态转换集K={S, 1, 2, 3, 4, Z},状态子集转换矩阵如下表所示: I I0 I1 K 0 1 {S, 1, Z} {1, Z} {2, 3, 4} 0 1 2 {1, Z} {1, Z} {2, 3, 4} 1 1 2 {2, 3, 4} {1, Z} {3, 4} 2 1 3 {3, 4} {1, Z} {3, 4} 3 1 3 由状态子集转换矩阵可知,状态0和1是等价的,而状态2和3是等价的,因此,合并等价状态之后只剩下2个状态,也即是最少状态的DFA。 P74 12. 将图3.24非确定有穷自动机NFA确定化和最少化。 解:设(DFA)M = {K, VT, M, S, Z},其中,K={[0], [0, 1], [1]},VT ={a, b},M: M ([1], a) =[0] M ([1], b) =Ф M ([0, 1], a) =[0, 1] M ([0, 1], b) =[1] M ([0], a) =[0, 1] M ([0], b) =[1] S=[1],Z={[0], [0, 1]} 令[0, 1]=2,则其相应的状态转换图为: 现在对该DFA进行化简,先把状态分为两组: 终态组 {0, 2} 和非终态组 {1},易于发现 {0, 2} 不可以继续划分,因此化简后的状态转换图如下: P74 15. 用两种方法将(NFA) M = ({X, Y, Z}, {0, 1}, M, {X}, {Z}),构造相应的DFA,其中: M (X, 0) = {Z} M (X, 1) = {X} M (Y, 0) = {X, Y} M (Y, 1) = Ф M (Z, 0) = {X, Z} M (Z, 1) = {Y} 第一种方法:先画出其状态转换图,利用非子集法: 假设(DFA) M’=(K’, VT’, M’, S’, Z’), 其中K’={[X], [Y], [Z], [X,Y], [X, Z], [Y, Z], [X, Y, Z]}, VT’={0, 1},M’的规则如下表: 其中[Y, Z]为不可到达状态,应该删去,所以S’={[X]},Z’={[Z], [X, Z], [X, Y, Z]},再进行化简,发现4和6两状态等价,最后其DFA如下所示: 第二种方法:先构造其对应的转换系统: 由上述转换系统可得状态转换集、状态子集转换矩阵如下表所示: 先化简,分为非终态集 {2, 4, 5, 0} 和终态集 {6, 1, 3},易于发现可划分为{0, 2},{1},{3, 6},{4},{5},其DFA如下所示: P74 18. 根据下面正规文法构造等价的正规表达式: S::=cC | a ……① A::=cA | aB ……② B::=aB | c ……③ C::=aS | aA | bB | cC | a ……④ 解:由③式可得 B= aB + c → B=a*c 由②式可得 A= cA + aB → A= c*aa*c 由①式可得 S= cC + a 由④式可得 C= aS + aA + bB + cC + a → C= c*( aS + aA + bB + a) → C= c*( aS + ac*aa*c + ba*c + a) → S= cc*( aS + ac*aa*c + ba*c + a) + a = cc*aS+ cc*( ac*aa*c + ba*c + a) + a = (cc*a)*( cc*( ac*aa*c + ba*c + a) + a) = (cc*a)*( cc*( ac*aa*c | ba*c | a) | a) 另一种答案是S= c(ac | c)*( ac*aa*c | ba*c | aa | a) | a P75 20. 证明下列关系式成立,其中A、B是任意正规表达式。 (4)(AB)*A = A(BA)* 解: (AB)*A = ((AB)0 ∪(AB)1∪(AB)2∪……)A = A∪ABA∪ABABA∪…… = A((BA)0 ∪(BA)1∪(BA)2∪……) = A(BA)*。 *
本文档为【编译原理习题解答(第2-3章)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥12.0 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
北溟愚鱼
暂无简介~
格式:ppt
大小:491KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2018-09-26
浏览量:125