这是我的推导:
S :: = AZ
Z :: = A | AAB
A :: = a
B :: = b
这是对的吗?
编辑:也许这是正确的?
S - > a | X | Y
X-> aX | a
Y - > aX | b
答案 0 :(得分:0)
两者都完全不正确。
第一语法:由于A只转向a,而B只转向b,我们可以用a代替A,用B代替B.语法将是:
S -> aZ
Z -> a
Z -> aab
因此,S转向aa或aaab,但不是,例如,aaaabb。
第二语法:使用第一个规则并将S转为a。由于a不是有效单词,因此语法也不正确。 (或者,我们可以将S转为X,然后将X转换为aX 9次,然后将X转换为a,制作aaaaaaaaa,这也是无效的。)
答案 1 :(得分:0)
你的第一个语法只产生:
S -> AZ -> aZ -> aa
S -> AZ -> aZ -> aAAB -> aaab
你的第二个语法允许只包含a
的单词,这些单词不属于该语言。例如:
S -> a
我只是从两个a
开始,然后产生任意对。因此,语法看起来像(implicit newline (see the end
argument per the documentation)):
<term> ::= "aa" | "aa" <pair>
<pair> ::= "ab" | "a" <pair> "b"
示例:
<term> -> "aa"
<term> -> "aa" <pair> -> "aaab"
<term> -> "aa" <pair> -> "aaa" <pair> "b" -> "aaaabb"
...