如何将正则表达式转换为有限状态机?

时间:2016-12-08 11:45:45

标签: regex regular-language state-machine finite-state-automaton

让正则表达式;

r = (a*|(ab)*)b*

将此表达式转换为有限状态机的规则是什么?

1 个答案:

答案 0 :(得分:2)

转换一般正则表达式的规则可以在文献中找到(例如Aho等人的“编译器:原理,技术和工具”),但编程它需要付出很多努力。目前,许多开源实现可用于该任务以及有限状态机和换能器上的其他操作,例如, openFST,SFST,Foma和HFST(这是三者的通用接口)。它们作为独立程序,作为库和通过例如库提供。蟒蛇。您的示例表达式下面是使用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]: