我们如何区分常规语言和上下文无关语言?

How can we distinguish between regular languages and context free languages?

为了表达常规语言,我们使用正则表达式,对于上下文无关语言,我们可以使用类似堆栈的内存,我知道上下文无关语言有一些规范,比如中心嵌入,但我仍然不确定我们什么时候可以知己给定的语言是上下文无关语言吗?例如,为什么自然语言不是常规语言。除了中心嵌入还有什么原因吗?

自动机理论指出,常规语言 可以由有限状态机 (FSM) 处理。但是,如果一种语言有 "center-embedding",那么该语言就是 上下文无关语言 (CFL),它需要下推自动机 (PDA)。

重要的是,PDA 是一个 FSM,它具有类似内存的设备的额外资源,该设备是 "stack" 或 "counter" 以便跟踪嵌入。

维基百科在 Languages that are not context-free 中说:-

To prove that a given language is not context-free, one may employ the pumping lemma for context-free languages or a number of other methods, such as Ogden's lemma or Parikh's theorem.

维基百科在 Deciding whether a language is regular 中说:-

To prove that a language is not regular, one often uses the Myhill–Nerode theorem or the pumping lemma among other methods.

为什么自然语言不是常规语言?

乔姆斯基(1957)说:“英语不是常规语言”。至于上下文无关语言,“我不知道英语本身是否真的不在这种分析的范围之内”。

我补充说 English is such a vast language which can't be recognised by a finite machine