证明以下语言是无上下文的:

时间:2012-04-05 00:25:39

标签: context-free-grammar

这个问题是在一个样本考试中,我们的教授懒得输入解决方案,而且我很困难。在此先感谢您的帮助!

证明以下语言无上下文{x is an element of {a,b,c}* | the number of a's in x is greater than the number of b's or the number of c's in x}

2 个答案:

答案 0 :(得分:1)

  

{x是{a,b,c} * |的元素x中的a的数量大于b的数量或x中的c的数量}

这可以通过两种方式解释:

  1. a的数量大于(b的数量加上c的数量)
  2. a的数量大于b的数量)或(a的数量大于{{1}的数量) }的)。
  3. 提示1:PDA可以如下工作。如果堆栈为空并且您在输入上看到c,则向堆栈添加a。如果堆栈为空并且您在输入上看到ab,请向堆栈添加c。如果最顶层的堆栈符号是b,并且您在输入上看到b,请从堆栈中删除a。如果最顶层的堆栈符号是b,并且您在输入上看到bb,请将另一个c添加到堆栈。如果最顶层的堆栈符号是b,并且您在输入上看到a,则将另一个a添加到堆栈。如果最顶层的堆栈符号是a,并且您在输入上看到ab,请从堆栈中删除c。现在简单地产生一个参数,如果a的数量等于ab的数量之和,那么这样的PDA将具有(1)空堆栈。的; (2)如果caa的{​​{1}}更多b,则会在堆栈顶部显示c; (3)如果b比查看ab'(合并)的c更少,则会在堆栈顶部a

    提示2:首先,构建一个PDA,接受bca的任何字符串,其中b更多比c更多,忽略任何c(上面的Hints for 1中描述的PDA可以很容易地修改为忽略a)。然后,构建一个PDA,接受bca的任意字符串,其cb更多{{1}} s,忽略任何{{1}}(类似于你刚建立的那个)。最后,证明你试图证明无上下文的语言是这些自动机所接受的语言的结合;一个简单的论证就足够了。由于无上下文语言在联合下被关闭,这证明了这种说法,即你为证明无上下文而设定的语言实际上是无上下文的。

    请随时要求进一步澄清。另外,请查看新网站以获取以下问题:https://cs.stackexchange.com/。您可能会在该网站上的未来问题上获得更好的答案。

答案 1 :(得分:-2)

任务是表明语言可以通过无上下文语法生成。

一些提示:

A -> aabAc | B
B -> B|epsilon