语境自由语言中的1或2个右侧变量

时间:2017-09-03 09:38:39

标签: regular-language automata context-free-language

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

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

2)Y-CFG在每条规则的右边都有2个终点或变量。

问题:

a)他们是否生成任何非常规语言?证明。

b)他们是否生成所有常规语言?证明。

数目:

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

b)有无数的常规语言,如^ *。我们也不能用CFG生成无限的字符串,所以我们可以说它不能生成所有常规语言。

我是对的吗?

我不知道问题b。

1 个答案:

答案 0 :(得分:0)

考虑Y-CFG:

S → aA
S → ab
A → Sb

这不是满足您的约束并生成非常规语言的Y-CFG吗? a n b n 使得n> = 1

另请参阅this,其中指出:

  

每个常规语法都是无上下文的,但并非所有无上下文语法都是常规语法。并用一个例子来解释为什么要帮助掌握它。

所以如果我正确地理解了这个问题,我相信你的两个答案都是错误的。

更新

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

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

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