输入正则表达式
NFA状态转换图
正则表达式转NFA能做什么?
使用Thompson构造算法将正则表达式转换为NFA(非确定有限自动机),并在Canvas上绘制状态转换图。帮助理解正则表达式的底层原理,是编译原理和形式语言学习的可视化工具。
核心功能
• Thompson构造:系统化地将正则转为NFA
• Canvas可视化:绘制状态节点和转换边
• ε转移标注:清晰显示空转移
• 状态统计:显示状态数和转移数
• 导出PNG:保存状态图为图片
使用教程
步骤1:输入正则表达式,支持 a|b(选择)、ab(连接)、a*(闭包)、a+(正闭包)、a?(可选)、()(分组)、.(任意字符)。
步骤2:点击「生成NFA」,Canvas自动绘制状态转换图。单圆为普通状态,双圆为接受状态,箭头指向起始状态。
步骤3:查看NFA的ε转移和字符转移,点击「下载PNG」保存图片用于学习笔记或文档。
应用场景
场景1:编译原理学习 — 可视化正则表达式到自动机的转换过程,直观理解Thompson构造算法每一步的效果,是学习形式语言与自动机理论的辅助工具。
场景2:正则引擎开发 — 开发自定义正则引擎时,通过NFA可视化验证构造算法的正确性,快速定位bug。
场景3:技术面试准备 — 面试中常考正则与自动机的等价转换,用本工具练习和验证手动画的NFA是否正确。
扩展知识
Thompson构造的核心规则:①单字符a:两个状态通过a边连接;②连接RS:R的接受状态通过ε连接S的起始状态;③选择R|S:新起始通过ε连R和S的起始,R和S的接受通过ε连新接受;④闭包R*:新起始ε连R起始和接受,R接受ε回R起始和连新接受。
NFA→DFA→最小DFA:正则表达式处理的完整流程是:正则→NFA(Thompson构造)→DFA(子集构造)→最小DFA(Hopcroft算法)。本工具实现了第一步,后续步骤可用其他工具完成。
什么是NFA?
NFA(非确定有限自动机)是一种计算模型,每个状态可通过相同输入符号转移到多个状态,也可通过ε转移无需输入就跳转。NFA是正则表达式的等价表示形式。
什么是Thompson构造算法?
Thompson构造算法由Ken Thompson发明,用于将正则表达式系统性地转换为NFA。它递归地将基本元素组合为复杂结构,每步构造的NFA只有一个起始状态和一个接受状态。
支持哪些正则语法?
支持基本运算符:连接(ab)、选择(a|b)、闭包(a*)、正闭包(a+)、可选(a?)、分组(())、字符范围([a-z])、任意字符(.)。不支持反向引用和前瞻断言。
ε转移是什么?
ε(epsilon)表示空转移,即不需要消耗输入字符就能从一个状态转移到另一个状态。ε转移是Thompson构造的核心机制,用于连接子NFA。
圆形和双圆形代表什么?
单圆形是普通状态,双圆形是接受状态(终态)。带箭头指向的起始状态是NFA初始状态。输入消耗完毕且处于接受状态时,匹配成功。
如何将NFA转换为DFA?
通过子集构造法(Subset Construction)可将NFA转为DFA。DFA每个状态对应NFA一组状态的ε闭包。虽然DFA状态数可能指数增长,但匹配时无需回溯,效率更高。