- 引论
- 正则语言本身属于3型语言,原本按道理只需要一个简单的实现就可以了,但是这部分的水其实非常的深。
- 强化正则有back reference。
 - 需不需要支持jit
 - 要兼容POSIX标准?
 - 要做online parsing么?
 - 实现打算怎么做?
 
 - 常见实现方式
- 回溯
- 性能可能会非常差,ReDOS的元凶。
 
 - NFA
- 很容易把正则语言parse成NFA,然而这样就很难做backreference了。
 
 - m-gram index
- 空间换时间
 
 - DFA
- 马马虎虎,也有NFA的局部问题。
 
 
 - 回溯
 
 - 正则语言本身属于3型语言,原本按道理只需要一个简单的实现就可以了,但是这部分的水其实非常的深。
 
- SuccinctStore Regex
- SuccinctStore Regex选择把底层依赖的SuccinctStore当成BlackBox,因为SuccinctStore的Compressed Suffix Array的实现,其效果和m-gram时间复杂度差不多,但是因为SuccinctStore无需耗费多余的空间做index,其本身就是index,所以其在空间和时间中找到了比较好的平衡。
 
 
- 参考资料
- Russ Cox的blog提及了很多Regex的实现方面的好文章。
 - 《Parsing Technology》讲的也很透。