正则表达式到有限自动机

Regex to Finite Automata

如何转换正则表达式,例如:

((e|£|$)([1-9][0-9]*|0)(,|$|\.){1}([0-9][0-9]))|(([1-9][0-9]*|0),[0-9][0-9](EUR))|([1-9][0-9]*|0)$[0-9]{2}

像这样的有限自动机:

试试这个在线工具https://regexper.com/ which will automatically generate diagram

我不会详细介绍,但过程可能如下所示:

  1. 将您的正则表达式重写为带完整括号的正式正则表达式。如果您的正则表达式没有等效的完全括号形式的正则表达式,请停止;没有有限自动机。

  2. 使用证明有限自动机与(形式)正则表达式一样强大的标准构造算法构造一个非确定性有限自动机,它接受步骤 1 中获得的(形式)正则表达式描述的语言.

  3. 可选:确定步骤 2 中获得的非确定性有限自动机,例如使用subset/powerset 用于显示确定性有限自动机的构造算法与非确定性有限自动机一样强大。

  4. 可选:使用一些标准的 DFA 最小化算法最小化在步骤 3 中获得的确定性有限自动机。