确定有限状态自动机(deterministic finite automaton --> DFA)

总结

创建一个程序,该程序将输入确定性有限状态自动机(DFA)的定义,并处理一些字符串,以确定这些字符串是否是DFA所识别的语言的一部分。

细节

  1. 编写一个Java命令行程序,首先提示用户输入文件名。
  2. 这个文件将被程序读入。
  3. 该文件将包含对 DFA 的描述和一些要由 DFA 计算的未知数量的字符串。
  4. 对于每个字符串,程序将模拟该字符串上的 DFA 。
  5. 在下面一行打印带有"ACCEPT"或"REJECT"的字符串,并在后面加一个空行以使输出可读。

文件格式

  1. 第 1 行一整数, N ,作为DFA中的状态数(编号为 0 一 N 一 l ) ; 启动状态将始终为 0
  2. 第 2 行一表示DFA字母表中单个符号的字符串(单个字符)
  3. 第 3 行一至少一个整数 【 0 , N 一 l ]将是最终状态(s) ; 多个最终态将被空格分开
  4. 第 4 行: M 一 DFA 的转换函数,定义为一个三元组:整数字符integer ,其中第一个整数是当前状态,字符是要转换的输入符号,第二个整数是要转换的状态。每行上不超过 10 个三元组,其中一 1 #一 1 作为最后的三元组,表示转换函数定义的结束。行 M + 1 : EOF一要输入到DFA进行计算的字符串,每行一个,直到文件结束。

Example input file:

4
ba
3
0 b 0 1 b 0 2 b 0 3 b 3
0 a 1 1 a 2 2 a 3 3 a 3
-1 # -1
baabaaaab
babbabbab

Examle output:

baabaaaab
ACCEPTbabbabbab
REJECT

使用python实现

final_state = input("请输入终态:")
a_change_def = input("请输入a的转换函数:")
a_change = a_change_def.split(" ")
i = 0
change = {}
# 把自动机的转换状态保存
while i < len(a_change) - 2:change[a_change[i] + "." + a_change[i + 1]] = a_change[i + 2]i += 3
print(change)b_change_def = input("请输入b的转换函数:")
b_change = b_change_def.split(" ")
i = 0
# 把自动机的转换状态保存
while i < len(b_change) - 2:change[b_change[i] + "." + b_change[i + 1]] = b_change[i + 2]i += 3
print(change)# 根据当前的状态和输入的字符,确定下一个状态,然后一直循环到整个字符串结束
def check(s):now_state = 0for char in s:now_state = change[str(now_state) + "." + char]return now_state == final_statefor i in range(0, 2):string = input("请输入测试字符串:")if check(string):print("ACCEPT")else:print("REJECT")

测试数据

请输入终态:3
请输入a的转换函数:0 b 0 1 b 0 2 b 0 3 b 3
{'0.b': '0', '1.b': '0', '2.b': '0', '3.b': '3'}
请输入b的转换函数:0 a 1 1 a 2 2 a 3 3 a 3
{'0.b': '0', '1.b': '0', '2.b': '0', '3.b': '3', '0.a': '1', '1.a': '2', '2.a': '3', '3.a': '3'}
请输入测试字符串:baabaaaab
ACCEPT
请输入测试字符串:babbabbab
REJECT

确定有限状态自动机(deterministic finite automaton --> DFA)相关推荐

  1. 有限状态自动机java实现_用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机...

    阅读博客的朋友可以到我的网易云课堂中,通过视频的方式查看代码的调试和执行过程: 上一节,我们通过代码,实现了一个有限状态自动机,并将其应用于对整形和浮点数的识别.构造有限状态自动机,并驱动它,从而实现 ...

  2. 一.正则表达式转换为有限状态自动机:正则表达式转NFA

    原文:https://study.163.com/course/courseMain.htm?courseId=1002830012 一.有限状态自动机的分类 有限状态自动机,其实可以分成两类.第一类 ...

  3. 用java开发编译器之:Thompson构造,将正则表达式转换为有限状态自动机

    阅读博客的朋友可以到我的网易云课堂中,通过视频的方式查看代码的调试和执行过程: http://study.163.com/course/courseMain.htm?courseId=10028300 ...

  4. 从零写一个编译器(四):语法分析之构造有限状态自动机

    项目的完整代码在 C2j-Compiler 通过上一篇对几个构造自动机的基础数据结构的描述,现在就可以正式来构造有限状态自动机 我们先用一个小一点的语法推导式来描述这个过程 s -> e e - ...

  5. 计算机态,(计算机)有限态自动机,FSM(finite state machine),音标,读音,翻译,英文例句,英语词典...

    补充资料:ω-有限自动机 ω-有限自动机 ω-finite state automata 1094·.一youx一anz}dongJ-..有限自动机(.一rinite state automata)一 ...

  6. 一文搞定有穷状态自动机(FA)——DFA、NFA区别、转换以及DFA化简

    有穷状态自动机(Finite Automata, FA)分为确定的和不确定的,简称为DFA和NFA. 确定有穷自动机(DFA) 形式定义: 表示形式为: 注意:终态是用两个圆圈表示的,图中的3号即为D ...

  7. 第十二篇:形式语言理论与有限状态自动机

    目录 我们到目前已经介绍了什么? 形式语言理论 为什么要去做这个事情 ? 例子 超越会员问题-- 大纲 常规语言/正则语言 例子重现 正则语言的特性 有限状态接受器 样例 派生形态学 形态学 FSA ...

  8. 【Codeforces 506E】Mr.Kitayuta’s Gift【BZOJ 4214】黄昏下的礼物 dp转有限状态自动机+矩阵乘法优化...

    神题-- 胡乱讲述一下思维过程-- 首先,读懂题. 然后,转化问题为构造一个长度为|T|+n的字符串,使其内含有T这个子序列. 之后,想到一个简单的dp.由于是回文串,我们就增量构造半个回文串,设f( ...

  9. 用C语言实现有限状态自动机FSM

    摘要:状态机模式是一种行为模式,在<设计模式>这本书中对其有详细的描述,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重 ...

  10. 表示数值的字符串(有限状态自动机与搜索)

    文章目录 题目 思路一 代码一 思路二 代码二 题目 思路一 考察有限状态自动机(参考jyd): 字符类型: 空格 「 」.数字「 0-9 」 .正负号 「 ± 」 .小数点 「 . 」 .幂符号 「 ...

最新文章

  1. vue响应式给数组中的对象添加新属性
  2. “重金求来”Alibaba技术官并发编程笔记,附Java面经
  3. mysql 并行复制搭建_基于GTID的主从实践系列之④并行复制搭建及测试
  4. python PyQt5 QtCore.QPointF类、QPointF类与QPoint类区别
  5. 【POI2011】LIZ-Lollipop 【构造】
  6. java fast math,Java FastMath.signum方法代码示例
  7. python自己创建模块路径_python之本地模块/包使用和创建
  8. python输入的方式有几种_Python输入方式具体的三种实现方式
  9. server2008实验之七 利用FSRM实现文件服务器精确管理.
  10. html如何动态添加样式表,JavaScript动态插入CSS的方法
  11. Linux-完美解决linux系统镜像下载速度慢的问题
  12. 御剑后台扫描工具下载
  13. 四川大学本科教务系统 - 一键评教
  14. C# 海康人脸识别设备初开发(二)话不多说以下完整例子
  15. ORA-01950: 对表空间 USERS无权限
  16. 面试分享:一年经验初探阿里巴巴前端社招
  17. java一维数组输入整数n_用键盘接受输入的整数,将输入的整数保存到一个一维数组,然后输出最大值...
  18. 如何将每日新闻添加到自己博客中,发送到微信群中
  19. 最全最详细的PHP面试题(带有答案)
  20. 计算机word求差函数,【2人回答】如何在Word表格中插入公式求差?-3D溜溜网

热门文章

  1. 非线性拟合matlab代码,Matlab非线性拟合
  2. hdu 畅通工程再续
  3. csdn如何上传附件
  4. QT 自定义UI控件自适应窗口大小
  5. Python中filter筛选函数匿名参数问题
  6. 【供应链架构day2】美团收单供应链系统的演进之路
  7. 移动硬盘文件或目录损坏且无法读取要怎么办啊
  8. mysql创建视图注意事项_mysql视图创建注意事项(转)
  9. 使用VMWARE(VMware8)安装Mac OSX 雪豹操作系统
  10. oracle限制条数