Skip to main content
QUICK REVIEW

[论文解读] Sequential Circuits from Regular Expressions Revisited

Dogan Ulus|arXiv (Cornell University)|Jan 26, 2018
Formal Methods in Verification被引用 5
一句话总结

本文提出一种新颖的触发集算法,可直接从正则表达式构建时序电路,采用前轮驱动式更新机制,将状态信息从前驱节点向后传递——与传统自动机的前向传播形成对比。该方法在高度非确定性模式下表现优异,优于标准NFA,并在内存受限的病态情况下达到或超越DFA的性能。

ABSTRACT

We revisit the long-neglected problem of sequential circuit constructions from regular expressions. The class of languages that are recognized by sequential circuits is equivalent to the class of regular languages. This fact is shown in [5] together with an inductive construction technique from regular expressions. In this note, we present an alternative algorithm, called the trigger-set approach, obtained by reversing well-known the follow-set approach to construct automata. We use our algorithm to obtain a regular expression matcher based on sequential circuits. Finally, we report our performance results in comparison with existing automata-based matchers.

研究动机与目标

  • 解决长期被忽视的问题:直接从正则表达式构建时序电路用于模式匹配。
  • 克服回溯匹配器的局限性,后者在病态输入下可能遭遇指数级时间复杂度。
  • 探索时序电路作为传统自动机(NFA/DFA)在正则表达式匹配中的替代方案,尤其在非确定性场景下。
  • 评估时序电路是否能在性能和内存效率方面优于基于自动机的匹配器(如re2的DFA和NFA引擎)。
  • 证明时序电路能够有效处理导致DFA状态爆炸的模式,而DFA因状态爆炸而失效。

提出的方法

  • 提出一种触发集方法,逆转传统自动机构造中使用的后续集方法,实现状态可达性的向后传播。
  • 使用访问者模式遍历正则表达式的语法树,为每个位置计算:表达式大小、输出集和触发集(可到达当前状态的前驱节点)。
  • 通过生成实现基于触发集和输入向量的状态更新与输出函数的C++代码,构建时序电路。
  • 采用前轮驱动式更新机制:每个状态独立地从前驱节点和当前输入计算得出,与自动机的后轮驱动式前向传播形成对比。
  • 将生成的电路代码进行编译,并使用标准性能指标(吞吐量,单位为MB/s)与re2的DFA和NFA实现进行基准测试。
  • 使用固定67MB的随机输入序列,通过10次运行的最小执行时间测量确保准确性,优化级别为-O2。

实验结果

研究问题

  • RQ1触发集算法能否有效用于从正则表达式构建时序电路,提供一种可替代自动机构造匹配器的方案?
  • RQ2时序电路在各类正则表达式模式下的性能与re2的DFA和NFA实现相比如何?
  • RQ3时序电路中的前轮驱动式更新机制是否在非确定性或病态情况下优于自动机的后轮驱动式传播?
  • RQ4在导致DFA构造出现指数级膨胀的模式下,时序电路方法是否在时间和内存效率方面优于DFA和NFA?
  • RQ5时序电路能否在保持相当或更低内存使用量的前提下,实现比标准NFA更快的处理速度?

主要发现

  • 在所有测试案例中,时序电路均优于标准NFA,包括表2中的高度非确定性模式,尽管内存使用量相近。
  • 对于导致DFA构造出现指数级膨胀的表5中的模式,时序电路实现保持稳定性能(在n=20时为12 MB/s),而re2的DFA因缓存限制而急剧下降,并回退至NFA。
  • 在26个字母的序列情况下(表2),时序电路仅使用48 MB内存,远低于re2的DFA(304 MB),与NFA(161 MB)相当,但吞吐量更优。
  • 在路径病态情况(a?)*a^n中,时序电路比NFA更高效,n=30时内存使用为115 MB,而NFA为15 MB,DFA为335 MB。
  • 触发集方法实现了从正则表达式到优化C++电路的直接、高效代码生成流程,避免了复杂自动机构造过程。
  • 前轮驱动式更新机制在非确定性环境中提供了实际优势,通过向后依赖计算避免了确定性自动机中常见的状态爆炸问题。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。