我们先不一口气讲完,后面用到再讲。 NFA代码实现 构造NFA的主要文件都在nfa包下,nfa.py是NFA节点的定义,construction.py是实现对NFA的构造 NFA节点定义 NFA节点的定义也很简单,其实这个正则表达式引擎完整的实现只有900行左右,每一部分拆开看都非常简单 edge和input_set都是用来指示边的,边一共可能有四种可能的属性...
首先先计算出开始节点的closure集合 开始遍历输入的字符串,从刚刚的closure集合开始做move操作 然后判断当前的集合是不是可以作为接收状态,只要当前集合有某个状态节点没有连接到其它节点,它就是一个可接收的状态节点,能被当前NFA接收还需要一个条件就是当前字符已经全匹配完了 到目前为止,其实一个完整的正则表达式引擎...
从零实现正则表达式引擎:从NFA到DFA 完整代码 :Regex in Python这节主要讲通过根据之前构造的NFA来匹配字符串和更进一步:如何把NFA转换为DFA 匹配输入字符串 我们先开看一下使用NFA来匹配字符串需要两个关键操作: closure move 我们通过一个例子来理解一下这两个函数的作用 以刚刚的图作为演示,假设0-1节点的边是...
实现语言:Javascript,C++,Python3 首发知乎:zhuanlan.zhihu.com/c_128775305… 2. 理论准备 自动机 ️ NFA And DFA 从正则表达式开始 Regex to NFA NFA to DFA 最小化DFA 实现技术预热 如何表示State 如何表示Transition 如何唯一确定对象标示 closure---闭包算法 消除ℇ转换 深度优先搜索 广度优先搜索 不动点...
从零写一个正则表达式引擎 Github:Regex in Pythongithub.com/dejavudwh/Regex 从零写一个一个C语言编译器 Github:C2j-Compilergithub.com/dejavudwh/C2j-Compiler 从零写一个一个操作系统 Github:FragileOSgithub.com/dejavudwh/FragileOS
到此已经完成了一个简单的正则表达式引擎的所有过程,正则表达式-> NFA -> DFA -> DFA最小化 -> 匹配字符串。如果大家觉得还不错的话,可以到github点个Star: Regex in Python 另外所有代码都是之前所写,代码质量不高,如果有看不懂的欢迎私信或者邮件询问。
阅读全文 赞同 2 条评论 分享收藏 前言与写作计划安排 1. 从零开始实现正则表达式引擎0x00 系列长度: 7个章节 Tags: Automata , Regex 实现语言: Javascript , C++ , Python3 2. 理论准备 自动机 ️ NFA And DFA 从…阅读全文 赞同1 添加评论 分享收藏...