在字母表Σ= {0,1}上编写以下语言的正则表达式:
答案 0 :(得分:0)
第一个正则表达式为e + 0 + 1 + S* (00 + 01 + 10)
,其中e
为空字符串,S
为字母,*
为Kleene闭包,{{1}是联盟。这是有效的,因为语言可以分为长度小于2的字符串(+
)和长度至少为2的字符串,但不以e + 0 + 1
结尾(这会留下结尾11
,{ {1}}和00
)。
第二语言的正则表达式为01
。请注意,我们必须在所有10
的左侧放置1*0*
以避免子串1
,但我们可以根据需要添加任意数量。{/ p>
第一个的DFA看起来像
0
状态q0是初始,q0和q1正在接受。在状态q0,你刚开始或最后看到零;你的最后一个符号不是1.在状态q1中,你的最后一个符号是1,但你的倒数第二个符号不是。在状态q2中,你已经看到连续两个1。
第二个DFA看起来像是:
01
q0是初始状态,q0和q1正在接受。 q0读取所有0,q1读取所有1,如果我们在看到1后看到0,则发生q2。