常用表达

时间:2010-07-21 04:18:07

标签: regex finite-automata

(ab+ba)*接受所有零个或多个“a”后跟零个或多个“b”,以及零个或多个“b”,接着零个或多个“a”s。这个RE的拒绝状态是什么?

想一想(ab+ba)*不接受的字符串。

2 个答案:

答案 0 :(得分:1)

好吧,想一想(这很重要 - 这是你的家庭作业,你需要了解)。

根据你的描述(你的实际RE是一个非常奇怪的形式BTW,没有像我使用的任何RE格式 - 更常规的RE语言,它将是a*b*|b*a*),没有拒绝条件除非你在字符串的开头和结尾有隐式锚点(在这种情况下,aba将被拒绝)。

所有约束条件为“零或更多”这一事实意味着任何字符串都会通过。

答案 1 :(得分:1)

关于术语的一些注释:正则表达式没有状态 - 拒绝,接受或其他。 (纯)正则表达式描述常规语言。普通语言也没有状态;只是字符串或元素 不是语言的元素。人们可以讨论语言的补充:集合 同一字母表中不是该语言元素的字符串。碰巧的是,常规语言的补充也是常用语言。每个常规语言都可以用有限自动机来描述,而这个自动机就是拒绝或接受状态。

提供正则表达式并要求其“拒绝状态”是不正确的 - 可能有许多自动机描述相同的常规语言,而且可能会有 指明正在考虑哪些可能性。

我假设您要求对语言中没有的字符串进行一些描述 由你的表达式(ab + ba)*指定,甚至可能是一个描述的表达式 关于(a + b)*。

的这种语言的补充

您可能尝试的一种方法是找到识别该语言的DFA 改变所有接受状态以拒绝状态,反之亦然。所结果的 DFA认可原始语言的补充,并且(有一些聪明 - 留给读者的练习)这可以转换回常规 表达