下面的每个BNF语法生成什么语言

时间:2016-01-11 08:28:00

标签: bnf

下面的每个BNF语法生成什么语言(假设s是起始符号):

<s> -> <x> | <y>
<x> -> 0 <x> 1 | <x1>
<x1> -> 0 <x1> | 0
<y> -> 0 <y> 1 1 | <y1>
<y1> -> <y1> 1 | 1

我理解它的作用:0 ^ n 1 ^ n

但我之前在网上寻求帮助(其他地方)并且有人给了我答案:

For <x>: 0^n 1^m where n > m and m >= 0
For <y>: 0^n 1^m where m > 2n and m >=0

我不能完全遵循它,不平等从何而来?

为什么n大于m?为什么m大于2n?

我猜测2n来自y的两个1,但是如果n大于或小于m,怎么弄清楚?反之亦然?我完全忘记了。

1 个答案:

答案 0 :(得分:1)

我们以 x 为例。

<x1> -> 0 <x1> | 0       <x1>: 0^n, n > 0

<x> -> 0 <x> 1 | <x1>

这意味着 x 的格式为:

<x>: 0^m 0^n 1^m, n >= 1, m >= 0

因为如果 0 ^ m 1 ^ m 中间始终存在 x1 。如果我们简化,我们将有

<x>: 0^(m + n) 1^m, n >= 1, m >= 0

m + n&gt; m ,因为n严格为正。