📜  计算论中语法与语言的关系

📅  最后修改于: 2021-09-27 15:36:20             🧑  作者: Mango

语法是一组生成规则,用于生成语言的字符串。在本文中,我们讨论了如何找到由语法生成的语言,反之亦然。

由语法生成的语言——

给定一个文法 G,其对应的语言 L(G) 表示由 G 生成的所有字符串的集合。考虑以下文法,

G: S-> aSb|ε

在这个文法中,使用 S-> ε,我们可以生成 ε。因此,ε 是 L(G) 的一部分。同样,使用S=>aSb=>ab,生成ab。同样,aabb也可以生成。
所以,

L(G) = {anbn, n>=0}

在上面讨论的语言 L(G) 中,采用条件 n = 0 来接受 ε。
关键点 –

  • 对于给定的文法 G,其对应的语言 L(G) 是唯一的。
  • 对应于语法 G 的语言 L(G) 必须包含所有可以从 G 生成的字符串。
  • 与语法 G 对应的语言 L(G) 不得包含任何不能从 G 生成的字符串。

让我们基于此来讨论问题:

Qu-1。考虑语法:(GATE-CS-2009)

S -> aSa|bSb|a|b 

上述语法在字母表 {a,b} 上生成的语言是以下集合:
(A) 所有回文
(B) 所有奇数长度回文。
(C) 以相同符号开头和结尾的字符串
(D) 所有等长回文

解:使用S->a和S->b,可以生成a和b。类似地使用 S=>aSa=>aba,可以生成 aba。可以从语法生成的其他字符串有:a, b, aba, bab, aaa, bbb, ababa, …
因此,选项(B)是正确的。

阙2。考虑以下上下文无关文法:(GATE-CS-2016)

以下哪一对语言分别由 G1 和 G2 生成?

解决方案:考虑语法 G1:
使用 S=>B=>b,可以生成 b。
使用 S=>B=>bB,可以生成 bb。
使用 S=>aS=>aB=>ab 可以生成。
使用 S=>aS=>aB=>abB=>abb 可以生成。
正如我们所看到的,a 的数量可以是零或更多,但 b 的数量总是大于零。
所以,

L(G1) = {ambn| m>=0 and n>0}

考虑语法 G2:
使用 S=>aA=>a,可以生成 a。
使用 S=>bB=>b,可以生成 b。
使用 S=>aA=>aaA=>aa 可以生成。
使用 S=>bB=>bbB=>bb 可以生成。
使用 S=>aA=>aB=>abB=>abb 可以生成。

如我们所见,a 或 b 必须大于 0。
所以,

L(G2) = {ambn| m>0 or n>0}

生成给定语言的语法 –

给定一种语言 L(G),其对应的文法 G 表示产生 L(G) 的产生式规则。考虑语言 L(G):

L(G) = {anbn, n>=0}

语言 L(G) 是字符串ε、ab、aabb、aaabbb 的集合。
对于 L(G) 中的 ε字符串,产生式规则可以是 S->ε。
对于 L(G) 中的其他字符串,产生式规则可以是 S->aSb|ε。
因此,L(G)对应的文法G为:

S->aSb| ε 

关键点 –

  • 对于给定的语言 L(G),可以有不止一种文法可以产生 L(G)。
  • 语言 L(G) 对应的文法 G 必须生成 L(G) 的所有可能字符串。
  • 对应于语言 L(G) 的文法 G 不得生成任何不属于 L(G) 的字符串。

让我们基于此来讨论问题:

Qu-3。以下哪个语法生成语言 L = {a i b j | i≠j}? (GATE-CS-2006)

解决方案:给定的语言 L 包含字符串:

{a, b, aa, bb, aaa, bbb, aab, abb…}

这意味着字符串必须包含一个或多个 a 或一个或多个 b 或 a 后跟 b 具有不相等数量的 a 和 b。

如果我们考虑选项(A)中的语法,它可以生成 ab 为:

S=>AC=>aAC=>aC=>ab

但是,语言L不能生成ab。因此,选项(A)中的语法是不正确的。

类似地,选项 (B) 中的语法可以将 ab 生成为:

S=>aS=>ab

但是,语言 L 不能生成 ab。因此,选项 (B) 中的语法是不正确的。

类似地,选项 (C) 中的语法可以将 ab 生成为:

S=>AC=>C=>aCb=>ab

但是,语言L不能生成ab。因此,选项(C)中的语法是不正确的。
因此,采用消元法,选项(D)正确。