收藏 分销(赏)

第三章答案.doc

上传人:快乐****生活 文档编号:4314662 上传时间:2024-09-05 格式:DOC 页数:17 大小:180.01KB 下载积分:8 金币
下载 相关 举报
第三章答案.doc_第1页
第1页 / 共17页
第三章答案.doc_第2页
第2页 / 共17页


点击查看更多>>
资源描述
第三章习题解答 Aho:《编译原理》书中习题 陈:《程序设计语言编译原理》书中习题 (Aho)3.6 描述下列正规式定义的语言 a) 0(0 | 1)*0 解:定义的语言L={以0开头、以0结尾的0、1串} b) ((e | 0)1*)* 解:定义的语言L={所有0、1串} c) (0 | 1)*0(0 | 1)(0 | 1) 解:定义的语言L={第3位为0的二进制串} d) 0*10*10*10* 解:定义的语言L={包含3个1的0、1串} e) (00 | 11)*((01 | 10)(00 | 11)*(01 | 10)(00 | 11)*)* 解:定义的语言L={包含偶数个0、偶数个1的0、1串} 首先画出正规式对应的NFA: 将它转换为DFA e-closure({0}) = { 0, 3, 14} = A e-closure(d({0, 3, 14}, 0)) = {1, 4, 12} = B e-closure(d({0, 3, 14}, 1)) = {2, 5, 13} = C e-closure(d({1, 4, 12}, 0)) = A e-closure(d({1, 4, 12}, 1)) = {6, 9} = D e-closure(d({2, 5, 13}, 0)) = D e-closure(d({2, 5, 13}, 1)) = A e-closure(d({6, 9}, 0)) = {7, 10} = E e-closure(d({6, 9}, 1)) = {8, 11} = F e-closure(d({7, 10}, 0)) = D e-closure(d({7, 10}, 1)) = {3, 14} = G e-closure(d({8, 11}, 0)) = G e-closure(d({8, 11}, 1)) = D e-closure(d({3, 14}, 0)) = {4, 12} = H e-closure(d({3, 14}, 1)) = {5, 13} = I e-closure(d({4, 12}, 0)) = G e-closure(d({4, 12}, 1)) = D e-closure(d({5, 13}, 0)) = D e-closure(d({5, 13}, 1)) = G 对此DFA进行化简: 0 1. {B, C, D ,E, F, H, I}, {A, G} 1 2. {B, C, D, E, F, H, I}——{B, F, H}, {C, D, E, I} {A, G} 3. {C, D, E, I}——{C, E, I}, {D} {B, F, H}, {A, G} A:偶数个0,偶数个1的0、1串 B:奇数个0,偶数个1的0、1串 C:偶数个0,奇数个1的0、1串 D:奇数个0,奇数个1的0、1串 (Aho)3.7 为下列语言写出正规定义(或正规式、正规文法、有限自动机) a) 包含五个元音,且按顺序排列的所有字母串 解:con→[b-df-hj-np-tv-z] string→(con)*a(con | a)*(con)*e(con | e)*(con)*i(con | i)*(con)*o(con | o)* (con)*u(con | u)* b) 字母按字典升序排列的所有字母串 解:a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z* c) 以/*开始,*/结束的注释,中间不能包含*/,除非包含在"和"中 解:/*([^*"]* | ".*" | *+[^/])****/ 其中,/*和*/间出现内容,是三种不同情况的闭包(随意组合出的任意长度的串) [^*"]*:除了*和"之外所有的符号任意长度的串 ".*":两个引号括起来的串,其内允许任何符号 *+[^/]:出现*的情况,其后跟一个不是/的符号,这主要是避免*后接[^*"]*,产生*/的情况,至于后面跟随多个不是/的符号,第一个之后的内容可与[^*"]*匹配 但还遗漏了一种情况,即*后不跟随任何符号的情况,即立即接注释结尾的*/的情况,这只需在*/之前加一个**即可,有这种情况,与之匹配;没有——e,也匹配 d) 不包含重复数字的数字串 解:0-9十个数字的情况比较复杂,考虑只有0-2三个数字的情况,对应DFA为 状态含义: s:e 0:最后一个符号为0的数字串 1:最后一个符号为1的数字串 2:最后一个符号为2的数字串 3:死状态 e) 包含至多一个重复数字的数字串 解: 同样可给出DFA,按d)类似方法设计状态即可 f) 包含偶数个0和奇数个1的0、1串 解:DFA为 状态含义与上题3.6 e)相同。 正规式为AB*,其中 A = 1 | 0(00 | 11)*(10 | 01) B = 00 | 11 | (01 | 10)(00 | 11)*(01 | 10) DFAà正规式的转换方法见参考资料“NFA to RegEx Conversion.htm” h) 不包含子串011的0、1串 解:DFA为 状态0:字符串未包含0 状态1:字符串包含子串0 状态2:字符串包含子串01 状态3:字符串包含子串011 正规式为:1*0* | 1*00*1(00*1)* = 1*(0 | 01)* i) 不包含子序列011的0、1串 解:DFA为 状态0:字符串未包含0 状态1:字符串包含子序列0 状态2:字符串包含子序列01 状态3:字符串包含子序列011 正规式为:1* | 1*00* | 1*00*10* (Aho)3.14 用正规式表示UNIX的文件名表达式 解:只需将文件名表达式允许的所有操作符用正规式表示出来即可 ‘s’——“s” \c——\c *——.* ?——. [s]——[s] (Aho)3.16 使用Thompson构造法为下列正规式构造NFA,写出每个NFA处理符号串ababbab过程中的状态转换序列 a) (a | b)* 解:NFA为 ababbab状态转换序列: 0à1à2à4à6à1à3à5à6à1à2à4à6à1à3à5à6à1à3à5à6à1à2à4à6à1à3à5à6à7 b) (a* | b*)* 解:NFA为 ababbab状态转换序列: 0à1à2à4à6à8à10à1à3à5à7à9à10à1à2à4à6à8à10à1à3à5à7à5à7à9à10à1à2à4à6à8à10à1à3à5à7à9à10à11 c) ((e | a)b*)* 解:NFA为 ababbab状态转换序列: 0à1à3à5à6à7à8à9à1à3à5à6à7à8à7à8à9à1à3à5à6à7à8à9à10 d) (a | b)*abb(a | b)* 解:NFA为 ababbab状态转换序列: 0à1à2à4à6à1à3à5à6à7à8à9à10à11à12à14à16à11à13à15à16à17 (Aho)3.17 利用子集构造法将3.16题得到的NFA转换为DFA,同样写出分析符号串ababbab过程中的状态转换。 a) 解: e-closure({0}) = { 0, 1, 2, 3, 7 } = A e-closure(d(A, a)) = {1, 2, 3, 4, 6, 7} = B e-closure(d(A, b)) = {1, 2, 3, 5, 6, 7} = C e-closure(d(B, a)) = B e-closure(d(B, b)) = C e-closure(d(C, a)) = B e-closure(d(C, b)) = C ababbab状态转换序列: AàBàCàBàCàCàBàC b) 解: e-closure({0}) = { 0, 1, 2, 3, 4, 5, 8, 9, 10, 11 } = A e-closure(d(A, a)) = {1, 2, 3, 4, 5, 6, 8, 9, 10, 11 } = B e-closure(d(A, b)) = {1, 2, 3, 4, 5, 7, 8, 9, 10, 11} = C e-closure(d(B, a)) = B e-closure(d(B, b)) = C e-closure(d(C, a)) = B e-closure(d(C, b)) = C ababbab状态转换序列: AàBàCàBàCàCàBàC c) 解: e-closure({0}) = { 0, 1, 2, 3, 4, 6, 7, 9, 10 } = A e-closure(d(A, a)) = {1, 2, 3, 4, 5, 6, 7, 9, 10 } = B e-closure(d(A, b)) = {1, 2, 3, 4, 6, 7, 8, 9, 10} = C e-closure(d(B, a)) = B e-closure(d(B, b)) = C e-closure(d(C, a)) = B e-closure(d(C, b)) = C ababbab状态转换序列: AàBàCàBàCàCàBàC d) 解: e-closure({0}) = { 0, 1, 2, 3, 7 } = A e-closure(d(A, a)) = {1, 2, 3, 4, 6, 7, 8 } = B e-closure(d(A, b)) = {1, 2, 3, 5, 6, 7 } = C e-closure(d(B, a)) = B e-closure(d(B, b)) = {1, 2, 3, 5, 6, 7, 9 } = D e-closure(d(C, a)) = B e-closure(d(C, b)) = C e-closure(d(D, a)) = B e-closure(d(D, b)) = {1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 17 } = E e-closure(d(E, a)) = {1, 2, 3, 4, 6, 7, 8, 11, 12, 13, 14, 16, 17 } = F e-closure(d(E, b)) = {1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 17} = G e-closure(d(F, a)) = F e-closure(d(F, b)) = {1, 2, 3, 5, 6, 7, 9, 11, 12, 13, 15, 16, 17 } = H e-closure(d(G, a)) = F e-closure(d(G, b)) = G e-closure(d(H, a)) = F e-closure(d(H, b)) = {1, 2, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 17 } = I e-closure(d(I, a)) = F e-closure(d(I, b)) = G ababbab状态转换序列: AàBàDàBàDàEàFàH (Aho)3.18 为3.16的正规式直接构造DFA,比较得到结果与3.17结果的状态数。 a) 解: followpos 1 {1, 2, 3} 2 {1, 2, 3} 3 firstpos(root) = {1, 2, 3} = A d(A, a) = followpos(1) = { 1, 2, 3 } = A d(A, b) = followpos(1) = { 1, 2, 3 } = A b) 解: followpos 1 {1, 2, 3} 2 {1, 2, 3} 3 firstpos(root) = {1, 2, 3} = A d(A, a) = followpos(1) = { 1, 2, 3 } = A d(A, b) = followpos(1) = { 1, 2, 3 } = A c) 解: followpos 1 {1, 2, 3} 2 {1, 2, 3} 3 firstpos(root) = {1, 2, 3} = A d(A, a) = followpos(1) = { 1, 2, 3 } = A d(A, b) = followpos(1) = { 1, 2, 3 } = A d) 解: followpos 1 {1, 2, 3} 2 {1, 2, 3} 3 {4} 4 {5} 5 {6, 7, 8} 6 {6, 7, 8} 7 {6, 7, 8} 8 firstpos(root) = {1, 2, 3} = A d(A, a) = followpos(1)∪followpos(3) = { 1, 2, 3, 4 } = B d(A, b) = followpos(2) = A d(B, a) = followpos(1)∪followpos(3) = B d(B, b) = followpos(2)∪followpos(4) = { 1, 2, 3, 5 } = C d(C, a) = followpos(1)∪followpos(3) = B d(C, b) = followpos(2)∪followpos(5) = { 1, 2, 3, 6, 7, 8} = D d(D, a) = followpos(1)∪followpos(3)∪followpos(6) = { 1, 2, 3, 4, 6, 7, 8 } = E d(D, b) = followpos(2)∪followpos(7) = D d(E, a) = followpos(1)∪followpos(3)∪followpos(6) = E d(E, b) = followpos(2)∪followpos(4)∪followpos(7) = { 1, 2, 3, 5, 6, 7, 8 } = F d(F, a) = followpos(1)∪followpos(3)∪followpos(6) = E d(A, b) = followpos(2)∪followpos(7) = D (Aho)3.21 最小化3.18得到的DFA d) 解: b 初始划分:{A, B, C}, {D, E, F} b {A, B, C}——{A, B}, {C} {A, B}——{A}, {B} 3.22 正规式的等价可以通过对应的最小化的DFA的结构等价性来证明,利用这种方法,证明下列正规式的等价性 a) (a | b)* b) (a* | b*)* c) ((e | a)b*)* 由16、17、18、21结果可知 (陈)7 构造下列正规式对应的DFA 解法:可正规式àNFAàDFA,或者正规式àDFA a) 1(0 | 1)*101 b) 1(1010* | 1(010)*1)*0 c) 0*10*10*10* d) (00 | 11)*((01 | 10)(00 | 11)*(01 | 10)(00 | 11)*)* (陈)8 为下列语言写出正规定义(或正规式、正规文法、有限自动机) a) 以01结尾的0、1串 解:(0 | 1)*01 b) 能被5整除的十进制整数 解:[1-9][0-9]*(0 | 5) | 0 | 5 c) 包含奇数个1和奇数个0的二进制串 解:(00 | 11)*(01 | 10)((01 | 10)+(00 | 11)*(01 | 10)+)* 解法见Aho3.7f (陈)10 一个人带一只狼、一只羊和一颗白菜过河,每次人只能将一样东西摆渡到对岸。而在无人的情况下,狼会吃掉羊,羊会吃掉白菜。目标,人将三样东西都摆渡到对岸,羊和白菜都不被吃掉。利用有限自动机得到渡河的方法 解:M——人,W——狼,S——羊,C——白菜, 状态——哪些东西在原岸,如:MWS,表示人、狼、羊在原岸(白菜在目的岸) 动作——人将一样东西摆渡到对岸(原à目的——表示为à,也可能是目的à原——表示为ß) 不满足要求的状态为死状态,如:WS、SC、… 初态:MWSC,终态:e,初态到终态的一条路径——渡河方案。 d(MWSC, àMW) = SC (红色表示死状态) d(MWSC, àMS) = WC d(MWSC, àMC) = WS d(MWSC, àM) = WSC d(WC, ßMW) = MWSC (蓝色表示出现过的状态) d(WC, ßM) = MWC d(WSC, ßM) = MWSC d(MWC, àMW) = C d(MWC, àMC) = W d(MWC, àM) = WC d(C, ßMW) = MWC d(C, ßMS) = MSC d(C, ßM) = MC d(W, ßMS) = MWS d(W, ßMC) = MWC d(W, ßM) = MW d(MSC, àMS) = C d(MSC, àMC) = S d(MSC, àM) = SC d(MWS, àMW) = S d(MWS, àMS) = W d(MWS, àM) = WS d(S, ßMW) = MWS d(S, ßMC) = MSC d(S, ßM) = MS d(MS, àMS) = e 终态! d(MS, àM) = S 状态转换序列:MWSC→WC→MWC→C→MSC→S→MS→e 动作序列:àMS,ßM,àMW,ßMS,àMC,ßM,àMS (陈)12 将下面DFA最小化 解: 初始划分:{0, 1}, {2, 3, 4, 5} a {2, 3, 4, 5}——{2, 4}, {3, 5} (陈)14 构造DFA,它接受S={0, 1}上所有满足如下条件的符号串:每个1都有0直接跟在右边。 (陈)17 下面符号串集合是否为正规集?若是,写出正规式,否则,给出证明 a) L1 = {anbn | n >= 0} 解:不是正规集,证明见讲义4-1第51页 b) L2 = {x | x中含有相同个数的a和b} 解:不是正规集,证明类似a) c) L3 = {ap | p为素数} 解:不是正规集 证明:假设L3是正规集,对应DFA D的状态数为k。 令p0、p1、…、pk为前k+1个素数, s0、s1、…、sk为D读入ap0、ap1、…apk后到达的状态。 显然,必有0<=i<j<=k,si、sj为同一状态,且必然是终态,用s表示它。 因此,sàs存在一条长度为pj - pi的路径,每条边标记为a。 在读入apj后,重复此路径(pi – 1)次,得到的符号串t包含a的个数为 pj + (pj – pi) * (pi – 1) = pj * pi – pi * (pi – 1) = pi * (pj - pi + 1) 而pj – pi + 1 > 1,因此pi * (pj - pi + 1)为合数。 D接受t,但t不是L3中符号串,矛盾。 因此,L3不是正规集。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服