如何使用正则表达式定义“语言”?

时间:2014-08-26 20:58:11

标签: regex math

我想定义一些语言"使用正则表达式。要求是:

  1. 语言必须包含无限数量的字符串。
  2. 基础字母必须至少有三个不同的字符。
  3. 我还需要绘制一个确定性的有限状态自动机,它接受该语言的字符串。
  4. 提供两个由有限状态自动机接受的字符串,两个不是。
  5. 鉴于这一系列的要求,我到目前为止(根据我20年前对集合论和与之相关的数学的记忆),提出以下内容并且会欣赏来自集合论,正则表达式的一些输入。和正式的语言定义专家(我知道有很多人对这个主题有着深深的兴趣)。

    以下是否至少接近完成(1)和(2)? (4)实际上意味着什么?例如,如果集合可以保持无限的字符串(理论上),根据要求(1),那么我们如何满足要求(4),其中说出了#34;给出了(FSA)和TWO接受的2个字符串那不是" ???

    我目前的(相当可靠的)解决方案是:

    字母

    ∑ = {s,a,e,t,n}
    

    语言:

    L* = { Ø , ∈ , taste, set, ate, sane, ….} 
    

    OR(使用正则表达式)

    L* = [saetn]*
    

    任何参赛者?

    感谢。

1 个答案:

答案 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*。语言显然是无限的,任何包含两个不同符号的字符串,如atsat都不在语言中。该语言满足所有要求。还有许多其他语言可以满足所有要求。

我会把DFA的图画留给你。如果您对此有任何疑问,请随时评论我的答案。