上下文无关语言中的 1 或 2 个右侧变量

1 or 2 right hand side variable in Context free language

我有2个问题要问,我也有一些想法。

1) X-Context free grammer(X-CFG) 在每个规则的右侧有 1 个终端或变量。

2) Y-CFG 在每个规则的右侧有 2 个终端或变量。

问题:

a) 他们会生成任何非常规语言吗?证明.

b) 他们生成所有常规语言吗?证明.

答案:

a) 我认为对于 X-CFG,他们不能生成任何非常规语言,因为它只能生成有限数量的字符串,所以他们不能生成任何非常规语言。

b) 像 a^* 这样的正则语言有无数种。我们也不能用CFG生成无限的字符串,所以可以说它不能生成所有的正则语言。

我说得对吗?

我对b题一无所知

考虑 Y-CFG:

S → aA
S → ab
A → Sb

这不是满足你的约束生成非常规语言的Y-CFG吗? an bn 使得 n >= 1

另请参阅 this,因为它指出:

Every regular grammar is context-free, but not all context-free grammars are regular. And explains a little why with an example to help grasp it.

所以如果我理解正确的话,我相信你的两个答案都是错误的。

更新

每个常规语法都是上下文无关的。那么问题是我们可以使用 2 个变量定义所有 CFG(t 是终端,N 是非终端):

S → SS
S → t
S → N
S → tN
S → Nt

因此我们可以定义终止的东西,从多个起始字符串中生长出来的东西,在前面生长的东西和在后面生长的东西。这是 CFG 中的每个案例。所以我会说是的,你可以生成所有常规语言。