您的位置:首页 > 其它

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,新状态若没有就建立新状态,并加入状态队列,直到状态队列中的所有状态都进行了字节类匹配
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: