Recursion 考虑下面的BNF文法(BNF,递归) 编写一个BNF语法,以识别anbn-2形式的所有句子,其中n>1。例如,aa、aaab、aabb都被接受,但abbb、aab、aabb不是(提示:使用递归)。

Recursion 考虑下面的BNF文法(BNF,递归) 编写一个BNF语法,以识别anbn-2形式的所有句子,其中n>1。例如,aa、aaab、aabb都被接受,但abbb、aab、aabb不是(提示:使用递归)。,recursion,bnf,Recursion,Bnf,这是我的推导: S::=AZ Z::=A | AAB A::=A B::=B 这是正确的吗 编辑:也许这是正确的 S->a | X | YX->aX | aY->aX | b两者都是完全错误的 第一种语法:由于A只变成A,B只变成B,我们可以用A代替A,用B代替B。语法将是: S -> aZ Z -> a Z -> aab 因此,S变成aa或aaab,但不是,例如,aabb 第二个语法:使用第一条规则,把S变成a。由于a不是一个有效的单词,语法也不正确。(或者,我们可以将S转

这是我的推导:
S::=AZ
Z::=A | AAB
A::=A
B::=B
这是正确的吗

编辑:也许这是正确的


S->a | X | Y
X->aX | a
Y->aX | b

两者都是完全错误的

第一种语法:由于A只变成A,B只变成B,我们可以用A代替A,用B代替B。语法将是:

S -> aZ
Z -> a
Z -> aab
因此,S变成aa或aaab,但不是,例如,aabb


第二个语法:使用第一条规则,把S变成a。由于a不是一个有效的单词,语法也不正确。(或者,我们可以将S转换为X,然后将X转换为aX 9次,然后将X转换为a,使aaaaaaaa无效)。

两者都是完全错误的

第一种语法:由于A只变成A,B只变成B,我们可以用A代替A,用B代替B。语法将是:

S -> aZ
Z -> a
Z -> aab
因此,S变成aa或aaab,但不是,例如,aabb


第二个语法:使用第一条规则,把S变成a。由于a不是一个有效的单词,语法也不正确。(或者,我们可以将S转换为X,然后将X转换为aX 9次,然后将X转换为a,使aaaaaaaa无效)。

您的第一个语法只生成:

S -> AZ -> aZ -> aa
S -> AZ -> aZ -> aAAB -> aaab
第二种语法允许单词只包含
a
,而这不是语言的一部分。例如:

S -> a
我只需要从两个
a
开始,然后生成任意对。因此,语法看起来像():

::=“aa”|“aa”
:=“ab”|“a”和“b”
例如:

<term> -> "aa"
<term> -> "aa" <pair> -> "aaab"
<term> -> "aa" <pair> -> "aaa" <pair> "b" -> "aaaabb"
...
->“aa”
->“aa”->“aaab”
->“aa”->“aaa”“b”->“AAABB”
...

您的第一个语法只生成:

S -> AZ -> aZ -> aa
S -> AZ -> aZ -> aAAB -> aaab
第二种语法允许单词只包含
a
,而这不是语言的一部分。例如:

S -> a
我只需要从两个
a
开始,然后生成任意对。因此,语法看起来像():

::=“aa”|“aa”
:=“ab”|“a”和“b”
例如:

<term> -> "aa"
<term> -> "aa" <pair> -> "aaab"
<term> -> "aa" <pair> -> "aaa" <pair> "b" -> "aaaabb"
...
->“aa”
->“aa”->“aaab”
->“aa”->“aaa”“b”->“AAABB”
...