解释理论计算机科学(TOC)中正则语言的不同运算。


语言是从某个字母表(有限或无限)中的一组字符串。换句话说,Σ*的任何子集L在TOC中都是一种语言。

一些**特殊语言**如下所示:

  • {} 空集/语言,不包含任何字符串。
  • {ε} 包含一个字符串的语言,空字符串。

示例

  • Σ = {0, 1}

    L = {x | x ∈ Σ* 且x包含偶数个0}

  • Σ = {0, 1, 2,…, 9, .}

    L = {x | x ∈ Σ* 且x构成一个有限长度的实数}

    = {0, 1.5, 9.326,.}

  • Σ = {a, b, c,…, z, A, B,…, Z}

    L = {x | x ∈ Σ* 且x是Pascal保留字}

    Σ = {BEGIN, END, IF,…}

  • Σ = {Pascal保留字} ∪ {(, ), ., :, ;,…} ∪ {合法的Pascal标识符}

    L = {x | x ∈ Σ* 且x是一个语法正确的Pascal程序}

  • Σ = {英语单词}

    L = {x | x ∈ Σ* 且x是一个语法正确的英语句子}

正则语言的运算

正则语言的一些运算如下:

  • 并集
  • 交集
  • 差集
  • 连接
  • Kleene星闭包

让我们一一了解这些运算。

并集

如果L1和L2是两个正则语言,它们的并集L1∪L2也将是正则的。

例如,L1 = {an | n > 0} 和 L2 = {bn | n > 0}

L3 = L1 ∪ L2 = {an ∪ bn | n > 0} 也是正则的。

交集

如果L1和L2是两个正则语言,它们的交集L1∩L2也将是正则的。

例如:

L1 = {ambn | n > 0 且 m > 0} 和

L2 = {ambn ∪ bnam | n > 0 且 m > 0}

L3 = L1 ∩ L2 = {ambn | n > 0 且 m > 0} 也是正则的。

连接

如果L1和L2是两个正则语言,它们的连接L1.L2也将是正则的。

例如:

L1 = {an | n > 0} 和 L2 = {bn | n > 0}

L3 = L1.L2 = {am.bn | m > 0 且 n > 0} 也是正则的。

Kleene闭包

如果L1是一个正则语言,它的Kleene闭包L1*也将是正则的。

例如,L1 = (a ∪ b),L1* = (a ∪ b)*

补集

如果L(G)是一个正则语言,它的补集L'(G)也将是正则的。可以通过从所有可能的字符串中减去L(G)中的字符串来找到语言的补集。

例如:

L(G) = {an | n > 3}

L'(G) = {an | n ≤ 3}

注意:如果由两个正则表达式生成的语言相同,则这两个正则表达式是等价的。例如,(a+b*)* 和 (a+b)* 生成相同的语言。由(a+b*)*生成的每个字符串也由(a+b)*生成,反之亦然。

示例1

编写接受集合Σ={a}上所有a组合的语言的正则表达式。

所有a的组合意味着a可以是零个、一个、两个等等。如果a出现零次,则表示空字符串。也就是说,我们期望集合为{ε, a, aa, aaa, …}。

因此,我们给出如下正则表达式:

R = a*

即a的Kleene闭包。

更新于:2021年6月11日

14K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告