初学编译原理——构造一个DFA,它接受字母表∑={0,1}上能被能5整除的二进制数

题目:构造一个DFA,它接受字母表∑={0,1}上能被能5整除的二进制数

解析如下:

注意,我们要明白DFA是一个一个数字扫描的,比如二进制数字101,其先扫描的字符是1,接下来是0,最后是1。
要求能被5整除的二进制数,例如0、101、1010等,一个数除以5,其余数可能为0、1、2、3、4共五个状态,0除以5还是0,因此0既为初态,也为终态。

首先是初态0状态,当扫描的第一个字符为1时,构成了二进制数字1,1除以5的余数还是1,因此到达了1状态,当在0状态扫描到的字符还是0时,说明二进制数字还是0,余数是0,因此回到本身0状态;

接下来是1状态,当扫描的下一个字符为1时,便构成了二进制数字11,即数字3,3除以5的余数还是3,因此到达3状态;如果1状态的下一个字符是0,便构成了二进制数字10,即数字2,同理到达2状态;

从2状态出发,即10,如果下一个字符是1,构成的二进制数字便是101,即十进制数字5,5除以五的余数是0,因此到达了0状态,即终态;如果2状态的下一个字符是0,构成的二进制数字是100,即4,4除以5的余数是4,到达了4状态;

从3状态出发,即11,如果下一个字符是1,构成的二进制数字便是111,即十进制数字7,7除以五的余数是2,因此到达了2状态;如果3状态的下一个字符是0,构成的二进制数字是110,即6,6除以5的余数是1,到达了1状态;

从4状态出发,即100,如果下一个字符是1,构成的二进制数字便是1001,即十进制数字9,9除以五的余数是4,因此到达了4状态;如果4状态的下一个字符是0,构成的二进制数字是1000,即8,16除以5的余数是3,到达了3状态

综上所述,将其构造为DFA便如下图所示,其中,0既为初态,也为终态

在这里插入图片描述

  • 24
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值