【问题标题】:Chomsky languages: how to recognize them?乔姆斯基语言:如何识别它们?
【发布时间】:2016-01-23 19:02:43
【问题描述】:
我对语言的识别有疑问。给定某种语言,例如 ancb2n, n > 0,如何根据 Chomsky 快速确定属于哪种类型?
我的想法是确定生成它的语法,然后确定语言,但这是一个漫长的过程。我认为还有另一种方法可以通过眼睛识别它,
无需编写语法或自动机。
有人可以帮我吗?
【问题讨论】:
标签:
grammar
context-free-grammar
ambiguous-grammar
context-sensitive-grammar
chomsky-hierarchy
【解决方案1】:
不幸的是,在一般情况下,将任意语言与乔姆斯基层次结构的级别相关联是无法确定的。 (见Rice's Theorem。)
当然,对给定语法进行分类很容易,因为乔姆斯基层次结构是通过对语法本身的简单句法分析来定义的。然而,语言没有独特的语法。 (例如)一种语言的类型 2(无上下文)语法的存在并不意味着同一语言不存在类型 3(常规)语法。
所以没有捷径。
但是,对于经验,有很多话要说。语言{ a<sup>n</sup>cb<sup>2n</sup> | n > 0 } 是上下文无关的(不是常规的),所有类似形式的语言也是如此。语法证明了它是上下文无关的
L → c
L → a L b b
使用pumping lemma for regular languages 可以证明它不规则的事实。 (链接的 Wikipedia 文章包含,作为使用引理的示例,一个类似语言的证明,应该很容易适应。)
另一方面,需要三个相等计数的语言 ({ a<sup>n</sup>c<sup>n</sup>b<sup>n</sup> | n > 0 }) 不是上下文无关的(而是上下文相关的)。 (这与{ a<sup>n</sup>c<sup>n+m</sup>b<sup>m</sup> | n > 0 } 不同,后者 与上下文无关。)