我想定义一些语言"使用正则表达式。要求是:
鉴于这一系列的要求,我到目前为止(根据我20年前对集合论和与之相关的数学的记忆),提出以下内容并且会欣赏来自集合论,正则表达式的一些输入。和正式的语言定义专家(我知道有很多人对这个主题有着深深的兴趣)。
以下是否至少接近完成(1)和(2)? (4)实际上意味着什么?例如,如果集合可以保持无限的字符串(理论上),根据要求(1),那么我们如何满足要求(4),其中说出了#34;给出了(FSA)和TWO接受的2个字符串那不是" ???
我目前的(相当可靠的)解决方案是:
字母
∑ = {s,a,e,t,n}
语言:
L* = { Ø , ∈ , taste, set, ate, sane, ….}
OR(使用正则表达式)
L* = [saetn]*
任何参赛者?
感谢。
答案 0 :(得分:1)
首先,正则表达式[saetn]*
将接受您选择的字母表上的所有字符串,因此您将无法找到两个不在语言中的字符串(语言将为L = Σ*
)并且不能满足要求(4)。
L = { Ø , ε , taste, set, ate, sane, ...}
不是有效语言,因为语言不能包含Ø
。空集不是字符串(语言是一组字符串,而不是一组集)。我们删除Ø
。
L = { ε , taste, set, ate, sane, ...}
以下是否至少接近完成(1)和(2)?
它没有实现(1),因为...
没有任何合理的模式具有任何意义。语言看起来有限。
L = { ε , taste, set, ate, sane }
将是一个有效的有限语言,其中ε
表示空字符串。所有有限语言都是常规语言,因为您可以创建一个表达式,该表达式是语言中所有字符串的OR
(|taste|set|ate|sane
)。
当你选择了包含5个元素的字母∑ = {s,a,e,t,n}
时,它确实满足了(2)。
(4)实际意味着什么?
这意味着该语言不能包含字母表中的所有字符串。 Σ*
中必须至少有两个不在语言中的字符串,您必须显示它们是什么。这并不能阻止语言无限。
无限语言的一个例子是:
L = { ε, s, a, t, ss, aa, tt, sss, aaa, ttt, ssss, ... }
该语言(在字母{s, a, t}
上)包含所有不超过一个不同字符的字符串。一个接受该语言的正则表达式为s*|a*|t*
。语言显然是无限的,任何包含两个不同符号的字符串,如at
或sat
都不在语言中。该语言满足所有要求。还有许多其他语言可以满足所有要求。
我会把DFA的图画留给你。如果您对此有任何疑问,请随时评论我的答案。