我如何将正则表达式转换为有限自动机?

时间:2011-10-03 05:16:04

标签: regex finite-automata regular-language

如何将以下正则表达式更改为有限自动机?

(abUb)(bUaaa)b*b((a*b)*Ub)*

注意:在这种情况下,U表示联合

2 个答案:

答案 0 :(得分:2)

此正则表达式有五个顶级连接组件。根据可以从Kleene定理的一部分中恢复的算法,你可以为这些算法制作NFA-Lambdas,然后通过将一个的最终状态连接到下一个的初始状态来形成连接。

当你看到一个联合时,这意味着你制作两台机器并通过一个带有两个lambda转换的新启动状态来组合它们。

Kleene闭包更多涉及,但基本上让机器重复,然后通过从旧的最终状态添加一个新的接受开始状态和循环来转换它。

基本案例是单个字母的机器,它是两个状态,初始和最终,具有适当标记的过渡。

从最简单的机器(最里面的子表达式)到整个事物递归地工作,并根据需要进行组合。尽可能简化结果,可能转换为最小DFA。

答案 1 :(得分:0)

有一个名为Automatic Java Code Generator for Regular Expressions and Finite Automata的应用程序,可自动生成给定正则表达式或有限自动机的NFA,DFA(包括转换表)和Java代码。可以从以下链接下载:www.s-solutions.info您可以随时检查解决方案是否正确。