语言和正则表达式的表达

时间:2018-12-18 13:51:28

标签: regex dfa formal-languages automaton

我不知道什么是形式语言和正则表达式 这个自动机:

DFA自动机

Screen Shot

我知道'b'或'a'的实例必须是偶数。 起初我以为该语言是:

L = {((a ^ i)(b ^ j)| i(mod2)= j(mod2)= 0,i,j> = 0}

但是自动机可以从'b'开始,因此语言不正确。 另外,我发现的正则表达式也不匹配((aa)* +(bb)-

例如无法获得abab。

1 个答案:

答案 0 :(得分:2)

我通过逐渐删除节点(顺序:3、1、2、0)得到的正则表达式是:

(aa|bb|(ab|ba)(bb|aa)*(ab|ba))*

据我所知,这是最简单的方法。 (我很想知道是否有人有一个更简单的减少方法-本周我实际上正在对此材料进行测试!)

分步处理

我们首先添加一个新的开始和接受状态。每个旧的接受状态(在这种情况下只有一个)通过ε过渡链接到新的接受状态:

step 1—added new start and end states

接下来,我们剔除状态3。我们需要保留通过状态3的所有路径。在这种情况下,我们添加了从状态0返回自身的路径,从状态0到状态2的路径以及状态2回到本身:

step 2—removed state 3

我们对状态1进行同样的操作

step 3—state 1 removed

我们可以稍微简化一下:我们将回圈过渡用逗号连接起来。 (最后,这将变成联合运算符(|等,具体取决于您的符号。)

step 4—simplified

接下来,我们将删除状态2,并将所有内容压缩到一个大循环中:

step 5—state 2 removed

循环成为恒星;我们删除了最后一个状态,所以我们只有从开始状态到结束状态的过渡,并与一个大正则表达式相连:

step 6—all states removed

这就是我们的正则表达式!

语言定义

您与语言定义非常接近。如果您可以放宽一些,那就是这样:

L = { w | w contains an even number of 'a's and 'b's }

定义的问题是,每次都以w开头字符串a,而唯一的限制是a和{ {1}}。