Flex Lexer REGEX 优化器

Flex Lexer REGEX Optimiser

是否有 Flex REGEX 优化器?有一些类似于 perl 模块的东西:

http://search.cpan.org/~rsavage/Regexp-Assemble-0.37/

但遗憾的是它不支持 lex regex 语法。我几乎想做的是拥有一个优化正则表达式的工具

TOMA|TOMOV

TOM(A|OV)

提前谢谢大家。

实在没有必要这么做。 Flex 将正则表达式编译成单个确定性有限状态机 (FSM),除了对非常大的扫描器定义产生轻微的缓存影响外,交替或重复运算符不会造成性能损失。

Flex 不会最小化 FSM,但这只会减少 FSM 表的大小,不会降低词法分析的速度(除了前面提到的缓存效果,如果适用)。

即使 FSM 没有最小化,NFA 到 DFA 的转换过程也会执行您建议的特定转换。因此,以下两条规则产生完全相同的词法分析器:

  1. TOMA|TOMOV { /* do something */ }
    
  2. TOM(A|OV)  { /* do something */ }
    

虽然没有真正的性能损失,但您应该尽量避免以下情况,因为它会不必要地重复操作代码:

  1. TOMA       { /* do something */ }
    TOMOV      { /* do the same thing */ }
    

您可能还会发现 this question 中的讨论很有用。