我目前正试图进入学校的正则表达式,并且必须完成任务以缩短这个正则表达式:
r = 0(e + 0 + 1)* + (e + 1)(1 + 0)* + e
e是空字epsilon。
到目前为止,我得到了这个:
r = 0(0 + 1)* + 1(1 + 0)* + e
考虑规则
r* = (e + r)*
但是,我真的不知道如何继续。如果不是kleene星运营商,我可以使用分配法,但这不适用于此。我无法找到合适的法律继续使用这个正则表达式。
有用的提示吗?
编辑:
我认为通过将r形成
,我更进了一步r = 0(1 + 0)* + 1(1 + 0)* + e
然后能够将它与
结合起来r = (0 + 1)(0 + 1)* + e
这是对的吗?
另外,我们可以说
r = (0+1)*
应该是最终形式
答案 0 :(得分:1)
除了一件事,我说你自己的演绎是正确的。拿你原来的
r = 0(e + 0 + 1)* + (e + 1)(1 + 0)* + e
删除根据你的e是空的,离开
r = 0(0 + 1)* + 1(1 + 0)*
或用简单的字0 followed by any number of 0 or 1
或 1 followed by any number of 1 or 0
。
因此,左侧表示必须至少有0
,右侧必须有1
。这意味着必须至少有0
或1
。现在,你的正则表达式是我从未见过的,所以我不知道如何用你的味道表达one or more
(它通常是+
)所以我会在中表达它常规的正则表达式,这将是
r = [01]+
仅表示 at least one
0 or 1 repeated any number of times
。
问候。