让正则表达式;
r = (a*|(ab)*)b*
将此表达式转换为有限状态机的规则是什么?
答案 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]: