【问题标题】:How to convert regular expression to finite state machine?如何将正则表达式转换为有限状态机?
【发布时间】:2017-04-23 15:37:55
【问题描述】:

让正则表达式;

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

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

【问题讨论】:

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


【解决方案1】:

转换通用正则表达式的规则可以在文献中找到(例如 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]: 

【讨论】:

    猜你喜欢
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多