re2正则表达式引擎学习(四)
2015-07-29 11:22
375 查看
DFA.cc
Workq 与 State类似,都是NFA的状态集合(即DFA的状态,一个DFA状态中包括多个NFA状态) 但Workq在过程中使用,完成后根据是否相同建立对应的State来存储(即Workq在过程中使用,完成后将Workq转化为State并存放到State中
DumpWorkq 打印工作队列中的内容: 调试打印格式: 1,2,3|4,5,6
DumpState 打印State中的内容: 调试打印格式:(地址) 1,2,3|4,5,6 flag=xxx ID=xxx
WorkqToCachedState 将Workq转换为State,当已经有对应的State时不转换 调用CachedState完成 调试打印格式:WorkqToCachedState 1,2,3|4,5,6 [flag] CachedState输出
CachedState 判断转换来的State是否在缓存中,若在就不再重复建立state,若不在就加入缓存 调试打印格式: -cached -> 1,2,3|4,5,6(缓存中已有) / -> 1,2,3|4,5,6(缓存中没有)
StateToWorkq 将对应的State格式转换为Workq格式
AddToQueue 在Workq中加入一个指令
RunWorkqOnByte oldq接受一个字符c转移到newq 调试打印格式:1,2,3|4,5,6 on c [flag] -> 4,5,6|7,8,9 [*ismatch]
RunStateOnByte函数 = StateToWorkq + RunWorkqOnByte + WorkqToCachedState
AnalySearch函数主要调用AnalySearchHelper来实现。主要就是找到开始状态集合,然后让开始状态集合一次对Bytemap进行匹配来设立StartInfo开始标示
首先调用AnalySearch函数来确定开始状态,然后对状态队列中的所有状态,从开始状态开始,对Bytemap的每个字节类进行RunWorkqOnByte,新状态若没有就建立新状态,并加入状态队列,直到状态队列中的所有状态都进行了字节类匹配
Workq 与 State类似,都是NFA的状态集合(即DFA的状态,一个DFA状态中包括多个NFA状态) 但Workq在过程中使用,完成后根据是否相同建立对应的State来存储(即Workq在过程中使用,完成后将Workq转化为State并存放到State中
DumpWorkq 打印工作队列中的内容: 调试打印格式: 1,2,3|4,5,6
DumpState 打印State中的内容: 调试打印格式:(地址) 1,2,3|4,5,6 flag=xxx ID=xxx
WorkqToCachedState 将Workq转换为State,当已经有对应的State时不转换 调用CachedState完成 调试打印格式:WorkqToCachedState 1,2,3|4,5,6 [flag] CachedState输出
CachedState 判断转换来的State是否在缓存中,若在就不再重复建立state,若不在就加入缓存 调试打印格式: -cached -> 1,2,3|4,5,6(缓存中已有) / -> 1,2,3|4,5,6(缓存中没有)
StateToWorkq 将对应的State格式转换为Workq格式
AddToQueue 在Workq中加入一个指令
RunWorkqOnByte oldq接受一个字符c转移到newq 调试打印格式:1,2,3|4,5,6 on c [flag] -> 4,5,6|7,8,9 [*ismatch]
RunStateOnByte函数 = StateToWorkq + RunWorkqOnByte + WorkqToCachedState
AnalySearch函数主要调用AnalySearchHelper来实现。主要就是找到开始状态集合,然后让开始状态集合一次对Bytemap进行匹配来设立StartInfo开始标示
首先调用AnalySearch函数来确定开始状态,然后对状态队列中的所有状态,从开始状态开始,对Bytemap的每个字节类进行RunWorkqOnByte,新状态若没有就建立新状态,并加入状态队列,直到状态队列中的所有状态都进行了字节类匹配
相关文章推荐
- Cookie的传递流程及安全问题
- iOS- iOS 和 Android 的后台推送原理各是什么?有什么区别?
- EHCI和OHCI,UHCI的比较和区别
- 百度地图iOS SDK开发教程(珍藏版)
- 如何在eclipse jee中检出项目并转换为Maven project,最后转换为Dynamic web project
- 如何在eclipse jee中创建Maven project并且转换为Dynamic web project
- Android开源库
- OS Automated Testing With Calabash, Cucumber
- IOCP模型与网络编程
- HDOJ题目2089 不要62(数位DP)
- 排序算法集合 -3
- JavaWeb项目中 .classpath、.mymetadata、.project文件的作用
- UICollectionView 使用 介绍
- ios 使用GCD 多线程 教程
- MVC dropdownlist使用
- $.ajax
- ZooKeeper原理及使用
- kettle创建Oracle数据库连接遇到的问题
- 使用FineReport打造考试分析系统
- 手动破解软件99%的软件的bat处理方法