re2正则表达式引擎学习(四)

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,新状态若没有就建立新状态,并加入状态队列,直到状态队列中的所有状态都进行了字节类匹配
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值