re2dot

根据正则表达式生成其对应 DFA 的状态转移图, 简单来说就是输入一个正则表达式, 然后会构造其对应的 NFA, 然后再构造对应的 DFA, 然后再最小化 DFA, 最后使用 dot 语法绘制出最小 DFA.

re2dot 使用姿势如下:

$ ./re2dot.py --help

usage: re2dot.py [-h] [-N] [-D] [-d] regexp

根据正则表达式生成其对应 DFA 的状态转移图

positional arguments:

regexp 正则表达式

optional arguments:

-h, --help show this help message and exit

-N, --nfa 若指定, 则输出原始 NFA 对应的状态转移图.

-D, --dfa 若指定, 则输出原始 NFA 转换为 DFA 对应的状态转移图.

-d, --minidfa 若指定, 则输出原始 NFA 转换为 DFA 并最小化后对应的状态转移图.

emmm.. 精力所限, 这里只支持闭包, 连接, 选择三种正则运算符. 据说剩余的正则运算符均可只用这三种运算符重写.

$ ./re2dot.py 'a|bc|def|ghij'

// Generated by hidva.com

digraph {

rankdir=LR

0 [label="" peripheries=0]

1 [peripheries=1]

0 -> 1

2 [peripheries=1]

1 -> 2 [label=d]

3 [peripheries=2]

1 -> 3 [label=a]

4 [peripheries=1]

1 -> 4 [label=g]

5 [peripheries=1]

1 -> 5 [label=b]

6 [peripheries=1]

2 -> 6 [label=e]

7 [peripheries=1]

4 -> 7 [label=h]

8 [peripheries=2]

5 -> 8 [label=c]

9 [peripheries=2]

6 -> 9 [label=f]

10 [peripheries=1]

7 -> 10 [label=i]

11 [peripheries=2]

10 -> 11 [label=j]

}

$ ./re2dot.py -N 'a|bc|def|ghij' | dot -Tpng > imgs/nfa.png

$ open imgs/nfa.png

$ ./re2dot.py -D 'a|bc|def|ghij' | dot -Tpng > imgs/dfa.png

$ open imgs/dfa.png

dfa转正则表达式_GitHub - hidva/re2dot: 根据正则表达式生成其对应 DFA 的状态转移图...相关推荐

  1. java正则表达式及api_JAVA常用API:正则表达式regular expression

    一.正则表达式的概念 正则表达式,regular expression,在代码中通常简写成regex 正则表达式是一个字符串,使用每单个字符串来描述.定义匹配规则,匹配一系列符合某个语法规则的字符串. ...

  2. python正则表达式入门_Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

  3. mysql触发器可以使用正则表达式_SQL 正则表达式及mybatis中使用正则表达式

    这篇文章主要介绍了SQL 正则表达式及mybatis中使用正则表达式的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 mysql 提供的模式匹配的其他类型是使用扩展正则表达式. 当你对这 ...

  4. java生日正则表达式_Java编程基础15——正则表达式常用工具类

    1_正则表达式的概述和简单使用 A:正则表达式 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. 作用:比如注册邮箱,邮箱有用户名和密码,一般会 ...

  5. 正则表达式发明者_浅谈正则表达式背后的基本原理

    一.写在前面 搞编程的都知道正则表达式是什么东西,这里就不多啰嗦了,需要强调的是,这篇文章并不是教你怎么去使用用正则表达式,正则表达式的语法并不是本文的重点,这篇文章的目的就是剥开正则表达式的语法糖, ...

  6. python perl正则表达式_python学习笔记(正则表达式)

    什么是正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.最简单的正则表达式就是普通字符串,可以匹配其自身.换包话说,正则表达式'python' 可以匹配字符 ...

  7. 正则表达式入门教程经典Javascript正则表达式(share)

    前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...

  8. php 正则表达式 文档,php的正则表达式完全手册

    php的正则表达式完全手册 更新时间:2011年02月06日 17:12:49   作者: 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感.只要认真去阅读这 ...

  9. java 正则表达式 table_JavaEdge/Java/Java中正则表达式.md at master · VegTableBird/JavaEdge · GitHub...

    主要用到的是这两个类 - java.util.regex.Pattern - java.util.regex.Matcher. Pattern对应正则表达式,一个Pattern与一个String对象关 ...

最新文章

  1. CrackMe_001
  2. 题目 1083:【蓝桥杯】【入门题】Hello, world!
  3. wget,curl 下载文件
  4. Apache与Tomcat 区别联系​
  5. python装饰器-python装饰器
  6. golang中的目录操作
  7. undefined reference to `sqrt‘ 问题
  8. C语言--关于指针两种初始化赋值操作
  9. 为 GridView、DetailsView、FormView 等数据显示控件删除功能添加“确认对话框”
  10. android 已经给权限读取照片 还是提示无法读取照片_iPhone无法访问照片,一招教你解决...
  11. HDU 5145 - NPY and girls
  12. 测试项目开源_测验您对开源的承诺
  13. 笔记本电脑键盘失灵一键修复_笔记本部分按键失灵的键盘可以用了,省下键盘的钱...
  14. 服务器虚拟化底层系统安装,服务器虚拟化安装步骤 虚拟化会动摇操作系统的地位吗?...
  15. 一次生产内存溢出记录
  16. 爆锤数据结构(期末复习笔记)
  17. matlab工作区中的参数清除,【单选题】清空MATLAB工作区中所有变量的命令是_____。 (7.0分) A. clc B. c...
  18. 小白学习MySQL - MySQL会不会受到“高水位”的影响?
  19. cups支持的打印机列表_CUPS共享网络打印机
  20. Oracle索引 详解

热门文章

  1. maven添加外部jar,以及springboot打包
  2. IDEA报错Target Level '1.5' Is Incompatible With Source Level '1.8'
  3. Windows 下安装 Scala
  4. mysql如何创建用户代码_MySQl创建用户和授权的方法介绍(代码示例)
  5. 简单的js网页计算机代码,简易js代码实现计算器操作
  6. Cap03_项目立项管理
  7. Editor扩展之查看Prefab用在那儿
  8. Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT
  9. ​inotify+rsync实时数据同步实践讲解17
  10. 【分享】Java软件架构师所要需的东西 (希望对很多迷茫的朋友指个路)