📜  语法生成的语言

📅  最后修改于: 2020-11-26 10:11:00             🧑  作者: Mango


可以从语法派生的所有字符串的集合被称为是从该语法生成的语言。语法G产生的语言是由

L(G)= {白| W∈Σ*,S⇒ģW】

如果L(G1)= L(G2) ,则语法G1等于语法G2

如果有语法

G:N = {S,A,B} T = {a,b} P = {S→AB,A→a,B→b}

下面产生AB,而且我们可以用b通过替换A,B。在这里,唯一接受的字符串是ab ,即

L(G)= {ab}

假设我们有以下语法-

G:N = {S,A,B} T = {a,b} P = {S→AB,A→aA | a,B→bB | b}

该语法生成的语言-

L(G)= {ab,a 2 b,ab 2 ,a 2 b 2 ,……}

= {a m b n | m≥1和n≥1}

生成语言的语法的构建

我们将考虑一些语言,并将其转换为产生这些语言的语法G。

问题-假设L(G)= {a m b n | m≥0且n> 0}。我们必须找出产生L(G)的语法G。

由于L(G)= {a m b n | m≥0且n> 0}

接受的字符串集可以重写为-

L(G)= {b,ab,bb,aab,abb,……。}

此处,起始符号必须至少包含一个“ b”,后跟任意数量的“ a”,包括null。

为了接受字符串集{b,ab,bb,aab,abb,……。},我们采用了产生式-

S→aS,S→B,B→b和B→bB

S→B→b(已接受)

S→B→bB→bb(接受)

S→aS→aB→ab(已接受)

S→aS→aaS→aaB→aab(已接受)

S→aS→aB→abB→abb(已接受)

因此,我们可以证明L(G)中的每个字符串都可以被生产集生成的语言接受。

因此语法-

G:({S,A,B},{a,b},S,{S→aS | B,B→b | bB})

问题-假设L(G)= {a m b n | m> 0且n≥0}。我们必须找出产生L(G)的语法G。

解决方案

由于L(G)= {a m b n | m> 0并且n≥0},则可以将接受的字符串集重写为-

L(G)= {a,aa,ab,aaa,aab,abb,……。}

在这里,开始符号必须至少包含一个’a’,然后是任意数量的’b’,包括null。

为了接受字符串集{a,aa,ab,aaa,aab,abb,……。},我们采用了产生式-

S→aA,A→aA,A→B,B→bB,B→λ

S→aA→aB→aλ→a(已接受)

S→aA→aaA→aaB→aaλ→aa(已接受)

S→aA→aB→abB→abλ→ab(已接受)

S→aA→aaA→aaaA→aaaB→aaaλ→aaa(已接受)

S→aA→aaA→aaB→aabB→aabλ→aab(已接受)

S→aA→aB→abB→abbB→abbλ→abb(已接受)

因此,我们可以证明L(G)中的每个字符串都可以被生产集生成的语言接受。

因此语法-

G:({S,A,B},{a,b},S,{S→aA,A→aA | B,B→λ| bB})