[英]How to convert regular expression to finite state machine?
让正则表达式;
r = (a*|(ab)*)b*
将此表达式转换为有限 state 机器的规则是什么?
转换通用正则表达式的规则可以在文献中找到(例如 Aho 等人的“编译器:原理、技术和工具”),但是需要大量的努力来编写它。 目前,许多开源实现可用于此任务以及有限状态机和传感器上的其他操作,例如 openFST、SFST、Foma 和 HFST(这是三者的通用接口)。 它们可作为独立程序、库和通过例如 Python 使用。 下面的示例表达式是使用 hfst-xfst 独立程序编译的(有关更多信息,请参见http://hfst.github.io/ )。
$ hfst-xfst
hfst[0]: regex [a*|[a b]*]b* ;
? bytes. 6 states, 10 arcs, ? paths
hfst[1]: print net
Sfs0: b -> fs1, a -> fs2.
fs1: b -> fs1.
fs2: b -> fs3, a -> fs4.
fs3: b -> fs1, a -> s5.
fs4: b -> fs1, a -> fs4.
s5: b -> fs3.
hfst[1]:
给定的正则表达式
r = (a*|(ab)*)b*
给定的正则表达式可以分解为多个部分,并且可以再次组合在一起,以便于设计 DFA 让我们将正则表达式分解为 a*、ab、(ab) 、b 、a+b、a+((ab) ), (a |(ab) )b
现在 a* 可以变成有限自动机a*
现在 ab 可以制作为
b* 可以做成b*
通过将 ab 和 b* 加入一个自动机,我们得到 (ab)* 作为(ab)*
现在 a+b 作为a+b现在 a+b 和 (ab)* 可以通过在 a+b 中放置 (ab)* 代替 b 来组合,然后我们得到 a+((ab) ) a+((ab)*)现在 a+((ab) ) 和 b* 可以使用 ab 方法连接,并产生所需的结果有限 state 自动机。 结果转换为 (a*|(ab) )b
正则表达式到有限state机器的转换规则为:
1.将表达式分成几个部分,使其易于理解并添加它们 2.为这些部分表达式制作Finte state机器。 3.将这些部分表达式一一连接。 4.然后我们得到最终的 NFA。 5.如果我们想得到 DFA,那么通过使用 ε-closure 方法将 NFA 转换为等效的 DFA。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.