Flex Lexer REGEX Optimiser

时间:2016-07-21 14:21:48

标签: flex-lexer

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

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

但不幸的是它不支持lex正则表达式语法。我想要做的就是拥有一个优化正则表达式的工具

TOMA|TOMOV

TOM(A|OV)

提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

确实没有必要这样做。 Flex将正则表达式编译成单个确定性有限状态机(FSM),除了具有非常大的扫描器定义的次要缓存效果之外,对于交替或重复运算符没有性能损失。

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

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

  1. TOMA|TOMOV { /* do something */ }
    
  2. TOM(A|OV)  { /* do something */ }
    
  3. 虽然没有真正的性能损失,但您应该尝试避免以下操作,这会不必要地重复操作代码:

    1. TOMA       { /* do something */ }
      TOMOV      { /* do the same thing */ }
      
    2. 您可能还会发现this question中的讨论很有用。