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,新状态若没有就建立新状态,并加入状态队列,直到状态队列中的所有状态都进行了字节类匹配