画出C语言注释的状态转换图,编译原理课件ch2-4.ppt

编译原理课件ch2-4

编译原理习题课 中国海洋大学计算机系 葛 琳 green.lyn@ 第二章习题 例一:叙述下面正规式描述的语言,并画出接受该语言的最简DFA的状态转换图 (1|01)* 0* 思路:从(1|01)* 可以看出,任何1的前面不可能有多于一个0,即不可能出现001这种状况,但是最后一个1后面可以有任意多个0。 描述的语言是,所有不含子串001的0和1的串(包括空串) 第二章习题 例一:叙述下面正规式描述的语言,并画出接受该语言的最简DFA的状态转换图 (1|01)* 0* 状态转换图: 第二章习题 例二:用状态转换图表示接受(a|b)?a(a|b)(a|b)的DFA 思路:考虑当前串的最末三位的状态 第二章习题 (a|b)?a(a|b)(a|b) 第二章习题 例二的练习: 画出接受正规式(a | b)*aa的DFA 第二章习题 例三:写出语言“所有相邻数字都不相同的非空数字串”的正规定义 123031357106798035790123 answer ? (0 | no_0 0 ) (no_0 0 )? (no_0 | ? ) | no_0 no_0 ? (1 | no_0-1 1 ) (no_0-1 1 )? (no_0-1 | ? ) | no_0-1 . . . no_0-8 ? 9 将这些正规定义逆序排列就是答案 第二章习题 例四:用C语言编译器编译下面的函数时,报告 parse error before ‘else’ long gcd(p,q) long p,q; { if (p%q == 0) /* then part */ return q此处遗漏分号 else /* else part */ return gcd(q, p%q); } 第二章习题 例四:现在少了第一个注释的结束符号后,反而不报错了 long gcd(p,q) long p,q; { if (p%q == 0) /* then part return q此处遗漏分号 else /* else part */ return gcd(q, p%q); } 第二章习题 例五:叙述0*10*10*10*的描述语言。 思路:该串有且只有三个1,三个1的前后或之间可以有任意多个0(包括0个)。 结论:含有且只含三个1的0,1串。 注意:串的长度大于或者等于3。 第二章习题 例六:为正规式(a|b)*a(a|b)(a|b)构造NFA。 思路:寻求简单手工构造。可以先对正规式进行分割 第二章习题 例七:若L是正规语言,证明下面L’也是正规语言。L’定义为: L’={x | xR?? L},其中xR表示x的逆。 思路:如果能构造出接受语言L’的NFA,就可以证明L’是正规语言。(因为NFA接受的是正规集) 第二章习题 例七(续): 因为L是正规语言,因此必有一接受L的DFA M,可以基于M构造L’的NFA。 关键字:“反向”。 将M的所有边反向,M的开始状态变M’的接受状态,并新增一M’开始状态,令其有指向所有原M的接受状态的?转换。 这样构造的M’就是接受L’的NFA 第二章习题 习题1:叙述 0(0|1)*0 的描述语言 答案:0开始,0结尾的0、1串,串长大于等于2。 第二章习题 习题2:叙述((?|0)1*)*的描述语言 思路: (?|0)1*描述的语言为集合 {?,1,11,111,…,0,01,011,0111,…} 其中含有0,1两个串。因此,(0|1)*描述的语言是((?|0)1*)*描述语言的子集。 (0|1)*描述所有的0,1串,因此((?|0)1*)*描述的语言不可能更多,只能是所有0,1串 结论:字母表{0,1}上所有串的集合 第二章习题 习题3:叙述(0|1)*0(0|1)(0|1)的描述语言。 思路:(0|1)*表示任意0,1串, 0(0|1)(0|1)表示最后三位可以是000,001,010,011,总之,倒数第三位一定是0。 结论:以000,001,010,011结尾的任意0,1串。(或倒数第三位是0的任意0,1串) 注意:串的长度一定大于或等于3。 第二章习题 习题4:叙述(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*的描述语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值