LawrencePeng's Blog

专注收集代码小精灵

如何给SuccinctStore添加正则引擎

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