解释 TOC 中正则语言的不同操作。

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

一些特殊语言如下 -

  • {} 空集/语言,不包含字符串。

  • {s} 一种包含一个字符串的语言,即空字符串。

例子

  • E = {0, 1}

    L = {x | x 在 E* 中并且 x 包含偶数个 0}

  • E = {0, 1, 2,., 9, .}

    L = {x | x 在 E* 中并且 x 形成一个有限长度的实数}

    = {0, 1.5, 9.326,.}

  • E = {a, b, c,., z, A, B,., Z}

    L = {x | x 在 E* 中,x 是 Pascal 保留字}

    = {开始,结束,如果,...}

  • E = {Pascal 保留字} U { (, ), ., :, ;,...} U {Legal Pascal identifiers}

    L = {x | x 在 E* 中,x 是语法正确的 Pascal 程序}

  • E = {英文单词}

    L = {x | x 在 E* 中,x 是语法正确的英语句子}

对正则语言的操作

对常规语言的一些操作如下 -

  • 联盟

  • 路口

  • 区别

  • 级联

  • 克莱恩 * 关闭

让我们一一了解这些操作。

联盟

如果 Ll 和 If L2 是两种正则语言,它们的并集 Ll u L2 也将是正则的。

例如,Ll = {an I n > O} 和 L2 = {bn I n > O}

L3 = Ll U L2 = {an U bn I n > O} 也是正则的。

路口

如果 Ll 和 If L2 是两种正则语言,它们的交集 Ll n L2 也将是正则的。

例如,

Ll= {am bn I n > 0 and m > O} 和

L2= {am bn U bn am I n > 0 and m > O}

L3 = Ll n L2 = {am bn I n > 0 and m > O} 也是规则的。

级联

如果 L1 和 If L2 是两种常规语言,则它们的串联 L1.L2 也将是常规的。

例如,

Ll = {an I n > 0} 和 L2 = {bn I n > O}

L3 = L1.L2 = {am . bn I m > 0 和 n > O} 也是规则的。

Kleene 闭包

如果 Ll 是正则语言,则其 Kleene 闭包 Ll* 也将是正则的。

例如,Ll = (a U b ), Ll* = (a U b)*

补充

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

例如,

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

L'(G) = {an I n <= 3}

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

示例 1

在集合 l 上写出接受 a 的所有组合的语言的正则表达式:= {a}

a 的所有组合均值 a 可以是零、单、双等。如果 a 出现零次,则表示空字符串。也就是说,我们期望集合 {E, a, aa, aaa, ....}。

所以我们为此给出一个正则表达式如下 -

R = a*

那是克林闭包了。