语法是一组生成规则,用于生成语言的字符串。在本文中,我们讨论了如何找到由语法生成的语言,反之亦然。
由语法生成的语言——
给定一个文法 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)正确。