是否有Flex REGEX优化器?有类似于perl模块的东西:
http://search.cpan.org/~rsavage/Regexp-Assemble-0.37/
但不幸的是它不支持lex正则表达式语法。我想要做的就是拥有一个优化正则表达式的工具
TOMA|TOMOV
到
TOM(A|OV)
提前谢谢大家。
答案 0 :(得分:0)
确实没有必要这样做。 Flex将正则表达式编译成单个确定性有限状态机(FSM),除了具有非常大的扫描器定义的次要缓存效果之外,对于交替或重复运算符没有性能损失。
Flex不会最小化FSM,但这只会减小FSM表的大小,而不会减少词法分析的速度(除了前面提到的缓存效果,如果适用)。
即使FSM未最小化,NFA到DFA的转换过程也会执行您建议的特定转换。因此,以下两条规则产生完全相同的词法分析器:
TOMA|TOMOV { /* do something */ }
TOM(A|OV) { /* do something */ }
虽然没有真正的性能损失,但您应该尝试避免以下操作,这会不必要地重复操作代码:
TOMA { /* do something */ }
TOMOV { /* do the same thing */ }
您可能还会发现this question中的讨论很有用。