如何找出这种无上下文语法生成的语言?

时间:2011-11-14 15:01:49

标签: context-free-grammar formal-languages

我正在处理以下语法:

G = ( {S, A}, {a, b}, P, S ) 
P = { S -> aAb, S -> bAa, 
A -> aSa, 
A -> S, 
A -> epsilon}

我需要找出L(G)。 问题是,我发现语法中的单词形式如下: 以a开头,以b结尾,或以b开头,以a结尾,在这些字母之间以下组合之一:ab,ba,aaba,abaa;然后通过在中间的a和b之间插入这4种组合中的一种来形成下一个单词。但是我怎样才能正式表达呢? 我的意思是,据我所知,L(A)= a ^ n S a ^ n并且如果w属于L(G),则w反转也属于L(G)。 我试图将其表达为正则表达但却失败了......有人可以帮忙吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

你知道L不规律,证明你可以使用Pumping lemmaMyhill–Nerode theorem,所以不能讨论正则表达式

你可以注意到,由于L仅由{a,b}组成,你可以使用它的力量 我们看到该语言的形式为aAb或bAa或aAa,但aAa不能位于单词的开头 -

所以让我们使用它,我们唯一想念的是bAb的组合 A几乎可以生成所有内容(单词| w | = 2k,| w |> = 2)但是b的位置与b的位置相反的单词

形式上 enter image description here

对不起我的tex技巧和正式表达

肯定会有一些错误,因为我没有那么多时间来思考这个问题,但它可以通过某种方式继续下去,这是家庭作业,所以没关系,想一想! :)

答案 1 :(得分:0)

  

我试图将其表达为正则表达式但未通过

这种语言可能是'不规律。无上下文语言比正则表达式更复杂/更强大。

尝试生成几个单词,看看是否可以提供该语言的名称,属性。或者尝试在语言中找到的单词。

一些提示,您可以轻松看到的一些属性:

  1. 最小的字符串至少为2。

  2. 字符串的大小是偶数。

  3. b的数量是< =而不是

  4. 如果你取出A -> aSa,并将一个单词与其反转版本进行比较,则应该可以看到一个模式。如果您包含遗漏规则,则模式稍有变化......

答案 2 :(得分:0)

要求您找到语法 G 生成的语言

S → aAb | bAa
A → aSa | S | λ

首先,考虑从起始符号 S

开始的小推导
S ⇒1 aAb ⇒1 aaSab | aSb | ab

S ⇒1 bAa ⇒1 baSaa | bSa | ba

困难的一步是处理规则 A aSa S aAb 生成的递归和 S bAa 。通过考虑 G 生成的语言的归纳定义,揭示了处理这一困难的线索:

1. ab ∈ L4
2. ba ∈ L4
3. w ∈ L4 → awb ∈ L4
4. w ∈ L4 → bwa ∈ L4
5. w ∈ L4 → awa ∈ L4

规则(3) - (5)对应于规则 A aAa S aAb G 中的>和 S bAa 。很容易看出归纳定义和 G 的规则定义了相同的语言。归纳定义表明 G 的语言可以逐步增加。从 G 中可生成的最小字符串开始,我们构建了与问题规则相对应的越来越大的字符串集:

L(1)     = {ab, ba}
L(n + 1) = {awb, bwa, awa : w ∈ L(n)}

集合 L (1)包含 G 中可生成的最小字符串。集合 L (n + 1)包含每个字符串 w的字符串 awb bwa awa L (n)。也就是说, L (n + 1)中的字符串对应于通过应用规则获得的字符串 S aAb S bAa A aAa 一次到 L (n)中的字符串。剩下的就是构造 L (n)的并集,这是一个集合:

L = ⋃ {L(n) : n ∈ ℕ}

要看到 L 等同于语法 G 生成的语言,您可以通过归纳来判断 G 。从 G 中可编辑的最小字符串开始(即 ab ba ),使用适当的归纳假设向后工作。

答案 3 :(得分:0)

生成的语言是:(a) n (b) m 是n> = m